Sunday, December 25, 2011

Affordable Subject-Wise Certification from Govt. Recognized Academia

Last updated on June 8th 2013

US President Obama meets US university presidents to address/discuss their challenges: http://www.economist.com/node/21541398.

The article talks of the problems of rising costs in an age of austerity, more courses & more research students than there is money for and interestingly, Ivy league envy. "Ivy League envy leads to an obsession with research.", it states. This results in professors who are focused on research and don't do their job of teaching students well enough, and even causes teaching dysfunction at lower-level universities!

I think the last problem is the case with lots of Indian universities too.

The article then goes on to giving examples where technology is helping to ease the burden.

A fascinating news item is about MIT planning to offer online subject-wise certifications leveraging its OCW but starting only in 2012 spring: http://arstechnica.com/science/news/2011/12/mit-launching-certificate-program-based-on-opencourseware-open-source-platform.ars.
MIT launches online learning initiative: http://web.mit.edu/newsoffice/2011/mitx-education-initiative-1219.html
What is MITx?: http://web.mit.edu/newsoffice/2011/mitx-faq-1219

I think affordable individual subject-wise certifications from recognized universities (academia as against non-govt-recognized private "training" institutes) done online or at physical university could be a game-changer in CS/IT education. It will be interesting to see how this pans out.

A concern raised about subject-wise certifications is that it could water down universities into training schools.

Well, what I feel is that ultimately universities should cater to what its students choose & need. And students' choice will typically be dictated by job market demand (industry jobs as well as academic jobs; programming/design jobs & research & teaching jobs) and students' interests.

If a university wants to focus on higher quality work/higher complexity work then it can clearly define itself as that kind of university. Only elite students will join it and they will typically have the capability to do higher quality work. Perhaps MIT is the example of an elite tech. university. Their courses as seen in OCW seem to reflect that.

In India, the IITs (Indian Institutes of Technology) are clearly defined as the elite tech. schools e.g. http://www.iitb.ac.in/, http://www.iitm.ac.in/. Their entrance exam (joint entrance exam for all IITs) is the toughest tech. university entrance exam in India (http://www.iitg.ac.in/jee/).

IITs don't have to worry about funding as the government provides them excellent support. Their campus is usually fabulous. The salary structure for their teachers is the best in Indian academia. The facilities are excellent. So they get the elite students.

The IIT courses reflect the elitist nature of the institution. E.g. They don't seem to teach programming languages in particular. They expect the students to pick up particular programming languages. They seem to teach only algorithms, data structures, general programming constructs - a language independent way of teaching programming. And, of course, they have courses on Artificial Intelligence, Compiler Design, Design & Analysis of Algorithms, High Performance Computer architecture etc. which their elite students can perhaps not only handle but excel at.

I feel universities should clearly identify the student population category they are aiming at. If all universities look up to elite universities like an MIT and try to emulate them with students who are not elite quality you get into a messy situation.

In my considered opinion there is nothing shameful about a university focusing on non-elite/commoner students and delivering them courses that gives them the skill set they desire so that they get the job they want. If they should not be called universities and should be called "training schools" - that is fine. But the "training school" should be government recognized and be able to offer a degree in IT or even CSE.

To my mind it is like there being nothing shameful about being an average competence General Practitioner doctor handling common diseases in comparison to a very skilled Cardiac surgeon who focuses only on open heart surgery. Both serve very important needs of society.

In India there is a thriving "private" but expensive IT training school industry which seems to be doing a far better job of teaching programming skills than government recognised CS/IT academia. But the "private" IT training schools cannot award a graduate degree; they can award only diploma certificates. So many well-to-do students in urban areas of India do a non-tech. graduate degree from govt. recognized academia like B.Sc. (Chemistry) [Pure science as against tech.; cheaper to do and easier to pass as exam standards are "watered down" in most Indian "science" universities] and simultaneously attend the "private" IT training school to learn programming and get a well paid IT job placement.

Here is the most famous IT training school of India, NIIT: http://www.niit.com/Pages/DefaultINDIA.aspx. The home page runs an Ad. which says, "College made me a graduate; NIIT's diploma programmes made me job-ready"! That says something about the Indian government agency(ies) regulated education system.

In other words the market has stepped in to fill the job-oriented skill set teaching void left by government recognized academia. But the poor students have to do both (and parents have to pay for both) - govt. recognized academia for the govt. recognized graduate degree and the private training school for the job-oriented skill set. This seems to me to be a terrible failure of the Indian education system for commoner students. And this has been the situation for decades!

And since the private IT training school industry gets ZERO government funding it is too expensive for the urban poor and the rural poor & middle class students. All the taxpayer money for education goes to government recognized academia which fails to deliver on job-oriented skill set for commoner students.

A Tough View of UK CS Academia

Last minor update on 22nd Feb. 2020

A friend passed on "Hackers and Fighters" by Dr Mark Tarver: http://www.lambdassociates.org/blog/hackers.htm.

Dr. Tarver compares the "street programmer"/"street fighter" with the "CS grad."/"school-trained martial artist". I think it is an interesting comparison.

He also talks about how difficult it is to do something innovative in CS academia. He said it took eight years for a CS dept. where he was working to decide to move from Pascal to C++!

He also states that for a fast moving area like computing the university model is too slow to adapt. I entirely agree with his view.

He mentions that the only way of handling the heavy teaching load of five to six courses a year at junior positions in academia is to go for canned courses. I think he is spot on here. At junior positions the teacher himself/herself is struggling to master his/her courses and when he/she is burdened with five to six courses, and fair bit of research work too sometimes, what can the teacher do but go the easy route of canned courses for most if not all the courses he/she has to teach.

He wryly notes that the professor will comprehensively beat the street programmer in the "black arts of churning out papers". I think he is spot on here too :).

Then an acquaintance sent another article by the same author, "Why I am Not a Professor OR The Decline and Fall of the British University". This is a vitriolic article about British universities in general and CS departments of those universities in particular just before 2000. It is brutal in its criticism but offers no thoughts of solutions. Read it only if you can stomach very harsh criticism: http://www.lambdassociates.org/blog/decline.htm.

I studied the article carefully. My God! What a terrible indictment of the British CS educational system (prior to year 2000)! [I don't mean to imply that India is better off - it may be worse off in the "commoner" universities.] The language used is stinging and sarcastic to the hilt.

The analysis of the need for universities in Europe from the eleventh or twelfth centuries onwards and how free online "information" & general literacy is challenging the position of universities is interesting. So too is the analysis of the impact of British government policies on education post World War II.

I get the feeling that a lot of what the author has penned must be true. But I wonder whether somebody from the British educational system rebutted his article. Maybe this author was with a not-so-great university ["but the procession of students who walked into my office and said 'Dr Tarver, I need to do a final year project but I can't do any programming'... well, they are more than I can remember or even want to remember."]. I find it hard to believe that most British university CS departments would have many students saying, "I need to do a final year project but I can't do any programming". The students, of course, may not be great programmers - but student himself/herself confessing to "can't do any programming" & looking for an easy way out with the project work - that seems hard to believe. Maybe that happens with lots of "commoner" Indian university CS/IT departments too - I just don't know.

The author solved his problem by getting out of the system. I think many of the problems he points out, namely, egalitarianism requirements of politicians who are voicing the needs of the people at large, I guess, not being able to fail many students even if they deserved to be failed as otherwise the course may become unpopular and so be shut down, watering down of courses, farcical (maybe even fixed) teaching audits, the black arts of churning out papers (counterfeit academic Mozarts), academic profession becoming unattractive, foreign immigrant academics with poor language skills ... may be true even today, at least, to some extent of CS education worldwide. But I feel that today the academic system is being challenged by commoner students (the 99 %) (Occupy movement tried to make a point at Harvard), politicians and people at large, and so I am quite hopeful of some meaningful reform happening. The Internet can be a great force which may allow for elite, commoner ... various types of courses to co-exist & flourish based on student choice and industry demand.

On deeper thought, I felt that Dr. Tarver's article is perhaps too negative, paints a depressing picture & offers no thoughts of solutions. A reader may feel that the system is beyond any possibility of redemption. Which I don't think is accurate. What we need to do is to raise awareness of the problems and work amicably and peacefully with politicians, bureaucrats, academics, industry, students & parents to improve the situation.

Tuesday, November 8, 2011

CS & IT Academia: Should 'Customize' Instead of 'Build' be Taught?

Last Updated On December 28th 2011

This post captures a slightly edited email exchange with a friend on the "CS & IT Academia: Inform Students About Software Contribution Record of Faculty" post.

Friend wrote: I am not sure if I understood the problem definition and therefore the solution. But let me put it in my words and if it is not what you meant, then please ignore my email ...

This is what I think is the problem that you are describing:
1) Teachers in universities don't have enough expertise in software development and thus can't teach students well enough.
Eklavya Sai responded: They can't teach software development well enough but can teach theory & research oriented stuff in their area of expertise very well.
Friend wrote:
2) Students can't appreciate and learn software development skills no matter which university they approach.
Eklavya Sai responded: That's the case with most universities in India though not all.
Friend wrote:
3) Employers don't get to recruit skilled people.
Eklavya Sai responded: The employers that are looking for software development soldiers don't get to recruit the right people and so have to educate them by having in-house fresher training.
Friend wrote:
4) Result - we are all a bunch of losers!
Eklavya Sai responded: Students (& their parents) who want to learn software development skills by doing a CS / IT degree are losers. Students (& their parents) who want to become theory and research Generals are winners. Employers don't invest time & money like students and parents, and so they cannot complain about being losers. Though overall as a country we lose out as the educational system is a pipeline which feeds skilled manpower into the industrial economy.
Friend wrote: As I said before, if what I am saying does not correctly capture what you said, please ignore my email. But if it does say what you are thinking, then I have a slightly different take on software development needs of today's world - at least the business world as most of the software development that employers do is focused on achieving competitive advantage.

Let me tell you a very short true story. Recently a retailer was facing tough competition in the market (and continues to do so today). It was closing store after store. One particular store was in the red for a few months and was facing the possibility of being shut down. But just ten days before the month ended, they went live with a supply chain initiative that enabled the store to fulfill parcel shipments and came out a winner. Essentially, it got business that it could not have got otherwise. Such was the power of the supply chain improvement.

Now that supply chain improvement initiative involved customizing a packaged solution and not building a software from scratch. The reason why I am emphasizing this is because the people who were required to or asked to "build" the software were mainly required to be able to "configure" the software rather than build it. Along the way they were required to be able to "figure" out what custom code needs to be built and build just that little code here and little code there. Employers prefer solutions to be built to deploy today rather than designed with zero defect for tomorrow.
Eklavya Sai responded: I think this has been the reality of the business app. world for at least a decade. Maybe it has become more prevalent now.
Academia has Component Based Development courses which I feel should handle such 'customize' solutions rather than reinvent the wheel, and live with 'acceptable quality' today rather than 'perfect quality' tomorrow. I recently taught an Open Source Web Development course using Joomla, Moodle, Al Fresco, MySQL, Apache ... and a software developed by a major IT firm of India using these tools.
Most students loved the power of component based development which allows you to produce solutions at unbelievable speed.
So what I am saying is that 'customize' as against 'build from scratch' can also be taught in a university.
Friend wrote: One can question such practices but businesses are run for customers of today who can walk out on you if they find solutions elsewhere even if those solutions have defects. Loss of customer can imply going out of business to employers. A software consultant who ignores such business priorities will get thrown out of business. So essentially, employers are looking for software consultants who understand their pains and provide pills for now rather than later.
Eklavya Sai responded: And students have to be trained with skill sets that match the needs of employers. As most students desire such job-oriented skill sets.
Friend wrote: Universities can teach algorithms and languages and even business processes. But real-world exposure has no substitute.
Eklavya Sai responded: Sure, real-world exposure has no substitute. But universities can prepare students for the real-world to the extent they can.
Friend wrote: One may be very good in algorithms but have no desire to understand the business priorities and you might find school drop-outs who have an unusually good understanding of the market as a whole and can drive the solution the market needs.
Eklavya Sai responded: Sure. But why can't a university IT graduate also excel at understanding business priorities? Of course he can. He simply has to be taught properly in university.
Friend wrote: My point is that businesses demand clear deliverables from software companies. Software companies in turn rationalize this into the 80-20 rule and hire people who can deliver the goods (an acceptable quality software). ...
...
Friend wrote: We might then think that perhaps it is not the business world that students should concentrate on. But is it [business world] really that bad? Innovations normally lead commercialization. But once you champion the commerce part of it, it fuels further innovation. Logistics at one time was thought to be an integral part of the army. But now it has taken a whole new dimension and not only new business models have come up but also it is being outsourced from army to businesses. If space exploration is to be left only to academic oriented organizations, innovative and cheaper solutions for space flight would not be available as some of the businesses are trying to achieve. If CROs had not rolled up their sleeves, drug discovery would continue to be indefinitely slow to achieve by universities and hospitals.
Eklavya Sai responded: I feel IT students can certainly concentrate on the "business world" software solutions.
...

Friend wrote: Have fun with what you do!
Eklavya Sai responded: What I am learning is that even "peaceful & amicable activism" can generate a lot of unwanted heat. I mean there is always resistance to change - and I am questioning the big Profs - they don't like such questions. So this is not really a 'fun' thing :(. But I feel I must do it as I have seen so many students & parents suffer from this mostly dysfunctional CS & IT academic teaching system in India.

US CS & IT Academia: Usually TAs/RAs Teach Programming

This post captures a slightly edited email exchange with a friend on the "CS & IT Academia: Inform Students About Software Contribution Record of Faculty" post.

Friend wrote: I too felt exactly the same way as --- that while it seems to be reasonable to ask this of faculty, it would not pan out. Most people don't have such background (to the tune of ~90% or more; most prof/faculty dont write software, their students do). And, most top universities here in the US call themselves 'Research Univ', including MIT, Stanford etc. For them, R&D is distinctly different from producing software - they realize that writing production code is very hard - and so as long as they can prove conclusively what they propose, that is enough.
Eklavya Sai responded: Thanks for the input, especially your numbers take. The Profs. may not like it but they cannot dictate terms to society. If students, parents & employers who are the key customers/stakeholders of the educational system feel that this performance parameter of faculty must be shared with them, the academic administrative authorities should impose it. Those profs. who have no software contribution record can omit it, but those who would like to have one can create their software contribution record and possibly enjoy more student enrollment & career growth benefits from it.
Friend wrote: And in India, I doubt if there is any significant % of faculty that can actually write even basic programs.
Eklavya Sai responded: In India it is absolutely vital that this changes.
Friend wrote: Even in the US, labs classes are handled by TAs/RAs (Teaching Assistants/Research Assistants) and not by professors/faculty.
Eklavya Sai responded: So sad, isn't it? Imagine a surgeon-professor never demonstrating surgery to his/her students and delegating it to interns!!! And then further imagine a surgeon-professor who has never even done surgery!!! Terrible state of affairs man.

Friend responded: I don't think it is sad that Profs don't teach lab courses. Infact, I'd rather they NOT teach lab courses. Reason? Simple - TAs USUALLY have a lot more experience with programming than most professors have. So, students are better off learning programming from the better experienced of the two in this particular case.

In my opinion, at least here at (a US university), most TAs/RAs have at least interned over summers at companies. Also, they are the people who routinely write software (even if not production quality code) as part of their research -- so they have a fair amount of experience with code.

Eklavya Sai responded: It is good that in (a US university) students get the benefit of teaching assistants with good programming experience. ... It is very good that most TAs/RAs at (a US university) are far better skilled at programming than most junior teachers in Indian engg. colleges.

....

I should also add that I understand possible management/economic realities of US universities (or Indian universities for that matter) which cannot allow them to have highly paid Professors handling all work. Division of labour is required and the natural division is perhaps to delegate programming lab. work to less expensive TAs/RAs. That's acceptable, I guess.
 
But that should not result in professors not knowing programming or becoming completely distant from it. That will be like a surgery-teacher focusing only on biological detail in the classroom and staying away from practical surgery. IMHO, students learning from such a surgery-teacher may not become safe and competent surgeons.

CS & IT Academia: Profs. May Not Like Idea of Software Contribution Record

This post captures a slightly edited email exchange with a friend on the "CS & IT Academia: Inform Students About Software Contribution Record of Faculty" post.


Friend wrote: Its a clever idea and tries to work around the problem but it seems like a somewhat superficial solution to a deeply ingrained problem.

Eklavya Sai responded: I entirely agree that it is not a proper/complete solution to a deeply ingrained problem.
Friend wrote: I don't think profs will go with the suggestion since they think programming expertise isn't important in the first place and therefore don't want to be judged by this irrelevant (to them) criterion.

Eklavya Sai responded: Vital point. I read somewhere, in a recent newspaper issue I think, about HRD Minister Shri Kapil Sibal talking about independence of academia from government (interference) during some IIMs related discussions.

So profs will reject it as it does not suit them. Some may realize the importance of programming/software development but will not say so in public when such a measure is suggested.

But I am given to understand that students & parents at counseling (engg. college admission) time do question college/university representatives about the placement record. If placement record is poor then they tend to shy away from that college/university. So college/university managements give value to placement and as they pay the salaries of the academics, the academics have no choice but to listen to them.

If AICTE/UGC feel that this "software contribution record" is worth trying out and agree (perhaps under people pressure), then profs. may have no choice but to go with it.
Friend wrote: Students and parents have no idea what makes an engineer or a prof a good one any more than they know what makes a painter good.

Eklavya Sai responded: I am given to understand that many students & parents do put a lot of questions at counseling time. I think the high college education costs makes it somewhat like an investment and so I think they do try, with their limited knowledge, to assess where best to invest their time & money. If "software contribution record" is available then they may use that like they use placement record, as a parameter to decide their choice.

Friend wrote: Besides ideas that require the network effect to be useful are hard to get off the ground, unlike ideas that are useful to their practitioners even if others don't go with them.

So, sorry, but I'm not bullish on this one.

Eklavya Sai responded: I can understand. To be honest, I know that we are up against a solid wall.

Friend wrote: We can still give it a shot, though.

Eklavya Sai responded: That's exactly what I feel. I mean, it is like negotiating a tough deal. If MHRD and NASSCOM agree that something needs to be done, then AICTE/UGC admin. profs. may have to accept something. This may be the easiest thing to push through.

Even if it does get pushed through, whether it will really be adopted in the proper spirit ... and so succeed is another thing altogether. For that we have to experiment and wait & see.

I guess all we can do is raise the problem, suggest some easily implementable solutions and use 'amicable & peaceful' means to make them (MHRD/AICTE/UGC) at least acknowledge these issues & suggested solutions. After that it is completely out of our hands.

CS & IT Academia: How To Relieve Suffering of Students, Parents and Employers

I think it is universally known that Indian CS & IT academia has very poor software development skill set - as its focus is on theory and research publication skill set.

Who is suffering due to this lack of software development skill in CS & IT academia? Is it the CS & IT academics? No, not at all. As their promotions are based on research publications and not on software contributions.

The people who suffer are students, parents and employers. The software industry suffers and so the economy of India where software is a very important component, suffers. In fact, software is so pervasive in all fields today that all the industries needing software skill set suffer and not the software industry alone. In general, I think I can say that almost everybody is suffering due to this lack of software development skill set in CS & IT academia.

But are the CS & IT academics to blame? No, not at all. They are human beings like all of us. The academic system gives far more importance to research publications instead of software contributions and so they naturally focus on research publications. It typically would be a wrong decision career wise for a CS & IT academic to focus on software contributions - that is the plain and unvarnished TRUTH. Once the CS & IT academic system changes, the problem will get solved. As simple as that, IMHO.

Prof. S.S. Mantha, the AICTE chairman is a mechanical engineer by training but is also a software specialist! See: http://www.aicte-india.org/adcv.htm. He has implemented e-Governance projects, provided IT expertise for IT initiatives of several departments of the Govt. of Maharashtra, and is currently the IT Expert for the Department of IT, Government of Maharashtra. He also has co-authored a book on C++ Programming (Prof. Stroustrup created the C++ programming language). So Prof. S.S. Mantha, a professor of Mechanical Engineering, seems to have a software contribution record which most CS & IT professors in the country will not be able to match!!! As the CS & IT professors focus on research publications instead of software contributions due to lack of significant rewards/recognition in academia for software development work.

Further Prof. Mantha does not seem to have any academic qualifications for CS & IT. He seems to be self-taught in software. And he is not alone in that regard. Here are some well known self-taught software preeminent people:

a) The Late Steve Jobs, perhaps the most famous computer technologist today, known for the iPod, iPhone and the iPad amongst other things. http://en.wikipedia.org/wiki/Steve_Jobs [Steve Jobs was far more into hardware but did have software knowledge too.]

b) Bill Gates, co-founder of Microsoft and famous philanthropist. Fortune recently listed him as the fifth most powerful person in the world http://www.forbes.com/powerful-people/. Here is his wiki: http://en.wikipedia.org/wiki/Bill_Gates

c) Mark Zuckerberg, founder of Facebook. He is only 27 years old now and Fortune recently listed him as the ninth most powerful person in the world http://www.forbes.com/powerful-people/. Here is his wiki: http://en.wikipedia.org/wiki/Mark_Zuckerberg

All the three persons above dropped out of college before finishing their graduation. But they developed / were instrumental in developing very significant software which had a MASSIVE IMPACT on the world. I am quite sure their research publication record, if any, will not be great. So we can conclude that the software contribution/development skill set is a very different skill set from a CS & IT research publication skill set.

I think it is clear that for the dire situation to improve, CS & IT teachers must become experts in software development and have significant software contributions. Otherwise how will they be able to capably teach software development skills to CS & IT students? And for that to happen, IMHO, AICTE/UGC regulations should have two simple changes:

a) Provide promotion incentive for CS & IT teachers based on software contribution record as well as research publication record. The software contribution record should be given as much importance as research publication record.

b) Make it mandatory for CS & IT departments to show software contribution record as well as research publication record of all CS & IT teachers on its website so that prospective students and their parents, and prospective employers can make well informed choices about which college/university to join/recruit from.

Currently AICTE/UGC may be following a "one size fits all" policy with same recruitment and promotion norms for all branches of science, engineering, commerce & humanities/arts. CS & IT are very different areas with explosive growth in knowledge and in applications of that knowledge across almost every aspect of life like life-saving surgical equipment, technology enhanced education, business process workflows, e-Governance, home entertainment etc. Software Development has become an inter-disciplinary skill set with almost all branches of science, engineering, commerce as well as humanities having a need for it at some level. E.g. Language learning software is quite popular to teach/learn English.

Given this background AICTE/UGC must treat the practice oriented CS & IT branches differently from other branches like Mathematics or Physics.

I think it is high time AICTE/UGC change CS & IT academic regulations to provide promotion incentive for software contribution (development). Otherwise CS & IT students, parents of those students and huge number of employers needing software skilled professionals will continue to suffer. Note that the employers are not limited to software industry as software has permeated almost all walks of life today and so software skill set is needed in all kinds of industries and offices.

So I think I can say that the entire country will continue to suffer unless AICTE/UGC act.

Friday, November 4, 2011

CS & IT Academia: Inform Students About Software Contribution Record of Faculty

Last Updated On 8th Nov. 2011

Some of the proposals I have outlined in previous blog posts may have some implementation challenges, even if the proposals are found interesting by CS & IT academic administrators.

Here is a simple and, IMHO, easily implementable proposal to improve software development skills in CS & IT academia.

AICTE & UGC should make it mandatory for CS & IT departments to put up the software contribution (development) record of each faculty on its website. Now, typically, only the research interests and, possibly, research publication record of the faculty are put up.

The software contribution record could have following information for each software contribution:
  1. Short description of the software including development platform (Operating System, Software tools used etc.)
  2. If the software is free or open source then a download link from where the software & documentation can be downloaded and used/verified by anybody.
  3. If the software is proprietary then a link to the website of the company for which the software was developed where the software details are mentioned. Ideally that page should have a credits menu/link which should list the faculty as a contributor.
  4. Role faculty played - Architect, Requirements Analyst, Designer, Developer, Tester etc.
  5. Duration of involvement of faculty with the software development.
Besides such individual faculty software contribution record, a consolidated department software contribution record should also be put on the website.

Such information would allow students, parents and employers to get some idea of the software development skills of the faculty & department besides the research skills.

If a CS / IT department has only research publication record with very limited or no software contribution record then students, parents and employers who are interested in software development skill set can make an informed choice to not study in/recruit from that department. Instead students, parents and employers who are interested in research can make an informed choice to study in/recruit from that department.

Okay, but how will this proposal improve software development skills in CS & IT academia? Well, the reality is that the overwhelming majority of students, parents & employers are interested in software development skills. So CS & IT departments which have zero or limited software contribution record will, over time, lose out to CS & IT departments which have a good software contribution record. That will motivate CS & IT academia to improve its software development skills.

Wednesday, October 26, 2011

CS & IT Academia: Some Comments on Teaching Programming

A friend shared his views over email, a month back, on some of the posts related to teaching programming in CS & IT Academia.

Friend wrote:
I tend to agree a lot with Chittar (comment here) on this issue: a balance (between theory & practice) is needed; and it is most definitely possible. And here are my reasons, thoughts & comments:

Importance of theory: in my (extremely limited life in this field), I have seen that if you can think abstract, you tend to think more general, more clear and usually results in better design. Yes, to reach the level of abstraction, the starting point is concrete examples, but yes, one can move up to abstractions quite easily if one applies oneself. Here is where theory can really help. Decades of rigorous study had created some well tested abstractions (lists, pointers, heaps and so on, to name a few basic ones). For example, not just in the classroom, but often at work, I could prove that something was not possible for the simple reason that it was NP-hard. Or that it was equivalent to the halting problem and so we have to rephrase the question or relax some restrictions to make it work. Things like Turing machines are the way everyday concepts like Regular expressions work. I mean, it may be enough to know how to write regular expressions. But if you know why they work or how they are implemented, that is a non-functional bonus.

Eklavya Sai: Sure I can appreciate that knowledge of concepts like Turing machines and NP-hard makes one a more capable programmer. But my point is that it is not necessary for all programmers to know Turing machine or NP-hard concepts. If a programmer feels the need to know them he can always study them on-demand.
Look at OOP, for example. The word abstraction is part of the native vocabulary. The abstractions here are basically 'generalizations'. It is not difficult to see that cat & dog are in general, animals; but it takes a keen mind to 'realize/see' more real-world (Goodbye, poor Car extends Vehicle object-orientation tutorial: http://lists.canonical.org/pipermail/kragen-tol/2011-August/000937.html). 
For that, you need experience and training would definitely help - better so at the student phase, with limited to no pressure, than in Industry where mistakes could be fatally expensive.

I have to say that there are enough system/low level jobs these days. At major-cell-phone-company, I worked mostly on MW and at major-search-engine-company, spent a fair amount of time on their proprietary RTML compiler. Not to say that Application jobs are few: I did spend a good amount of time at major-search-engine-company doing application level work. However, to do application level work, you mostly need to know the framework - and you can generally use it well, once you get to know it.

Eklavya Sai: Perhaps we can call the Application work - IT work.

But to do system/MW work, it definitely helps to know a good amount of pure CS: lists, pointers, efficiency of algorithms, more efficient algorithms. Even for application level jobs, this knowledge definitely helps - I have seen a bit of such examples at work at both the above mentioned companies. It was trivial to prove that my implementation was better than other's simply because I could figure out the running time complexity of both the implementations and then it was simply a matter of stating the obvious - and this is no story - I actually did this a couple of times at work (major-cell-phone-company).

Eklavya Sai: Sure, I agree that efficiency of algorithms, mastery of design & analysis of algorithms etc. may be useful even in IT (applications) work. But my point again is that it is not a pre-requisite or an absolutely necessary skill. And further, it can be picked up on-demand if & when required.
Coming to the issue of student, teacher & parent responsibility: yes, in India, there is a focus on the importance of passing students (...in the student mindset, passing examinations are the key goals to be achieved - that earns parental approval...). In my 6 months at an-American-University, I have seen that the mindset is so very different here in the US: the onus is on the student and teachers/professors generally don't mind failing a student.

Eklavya Sai: I think that is a vital, vital point. I wonder what the statistics are for failures in 'Lab' programming courses in AICTE/UGC universities in India. I have not heard of any student failing in a 'Lab' programming course.

Perhaps the prohibitively expensive nature of schooling, even at public schools like an-American-University, ensures that mostly serious students come in.

Eklavya Sai: I think that is the great benefit of a market-driven system as against a state-subsidized system. As the schooling is expensive in the US mostly serious students enroll. And they would demand to be taught well. The market goes by value-for-money and accountability.

But the bottom line is this: a mindset change.

I tend to consider myself a polyglot (I heavily read Paul Graham). Not that I don't care what language I program in, but precisely because I care. Not saying that one language is better than the other. But I think after a point, you should be able to program in ANY language, independent of personal prejudices towards languages. And I am stating this simply to emphasize that I agree with Chittar on the fact that he believes in teaching programming independent of language. Infact, this is what the timeless book on programming (SICP: http://mitpress.mit.edu/sicp/) does. It teaches you Scheme in the first few pages - it is practically possible - and you learn to think about programs, rather than think about programs in C/C++/Java/Python or whatever.

Eklavya Sai: My considered view is that whether programming is taught in a language independent way or a language dependent way should be a collective choice of the teachers & students of an educational institution. Some like the elite tech. universities may choose the former but the majority may choose the latter. One particular way should not be imposed on all educational institutions and all CS/IT students.
I also have to agree with Friend1 (comment here) on this: you should introduce (as opposed to necessarily teach) as many languages as possible. The roster he has listed would sound like what I would like too and for similar reasons. How many people even know about these languages to even casually mention them for one of their merits?

Eklavya Sai: I think it is a question of available time and comfort-level of students. Expecting that all CS/IT students of all educational institutions should be introduced/taught Scheme, Smalltalk, Erlang, Haskell, Joy, Forth etc. seems quite impractical to me. Give the students the choice, I say. If students of some elite educational institutions want to be taught this way and the teacher agrees - wonderful. But if the majority of CS/IT students want to be taught C/C++, Java, PHP etc. then let the teacher teach them those languages. Later, if time permits, he can introduce students to Scheme, Smalltalk, ... But given the crunch for time that C/C++, Java courses itself have, I am doubtful whether there will be time for other languages introduction as part of the 'Lab' programming courses.
Bottomline: people who teach should also upgrade themselves, by personal motivation.

Eklavya Sai: Interesting point. I personally do not have the time nor the inclination to learn Scheme, Smalltalk, Erlang, Haskell, Joy, Forth etc. I am willing to teach languages that I know like Java/C/C++ and also pick up languages like PHP on-demand (if students have to be taught those languages). So I do my new programming language learning on a strictly on-demand basis as I prefer to focus on my non-CS/IT interests in my "free time".

Therefore I do not fit into your criterion. And so, should I stop teaching programming? I don't mind as I have a lot of non-CS/IT interests I can work on. Except that there is a great shortage in Indian CS & IT Academia of teachers who are knowledgeable and capable of teaching Java/C/C++. So I feel I should continue to teach programming if students want to learn Java/C/C++.

But I personally enjoy programming in C/C++ simply because it is more challenging. Programming with C/C++ allows you to go to the guts of the algorithm. Yes, for app development, they may not be what you want to do and Java would be a better option, but C/C++ also have a ton to teach - especially wrt what Chittar noted: they have direct proof of application of seemingly esoteric theoretic concepts.

WRT limitations of time in teaching in the classroom: X taught us C++ and integrated design into his classes. Personally, my first job is totally attributed to his classes. I had less than 6 hours to prepare for the interview at major-cell-phone-company. And just the line of thinking and reasoning with objects and classes, the assignments that he gave us on C++ topics like overloading, overriding, inheritance and so on got me through a 4 hour interview. Trust me, all we discussed was C++ (about 45 minutes) and OOP design (~ 3 hours). I am not saying X is the authority on teaching C++ nor am I saying that mine was a one-off chance in the interview. I was interviewed, I later found out, by one of the best respected architects at major-cell-phone-company. After he said yes, even though I did not really do well with my manager, I got the job with a great offer for a fresher at major-cell-phone-company. So, to summarize, it is definitely possible. But yes, the student's interest also plays a key role - it is symbiotic.

Eklavya Sai: I think you were very fortunate to be taught C++ by a dedicated and gifted teacher. The interesting point to me here is that you did not do too badly :) even though you were taught programming in a language-dependent way!!! You may have, on your own, studied language-independent books on programming and learned many other programming languages thereby becoming a more accomplished software professional. That's wonderful. So you may have used an on-demand self-learning method to gain the benefits of language-independent programming. The majority of students who learn CS/IT programming in a language-dependent way are free to do something similar to you to gain the benefits of language-independent programming.
WRT priorities of universities: in the US, there are two kinds: teaching and research. Yes, the teaching universities (that are not allowed to award PhDs), aim to become research universities. But they also focus on high-quality undergrad & masters programs. Here, people expect you to pick up programming on your own, after they introduce you to a language. This is not so much the case in India. If not taught, students usually throw a 'not-taught' tantrum!!

Eklavya Sai: I feel that it is unfair to blame CS/IT students in India without delving deeper. My impression is that most US university CS/IT departments have a far better balance of theory and practice than in India. Their lab. facilities would also be far better typically - as students pay through their noses for it. I think Indian CS/IT students would, in general, be as good as US CS/IT students. IMHO, it is the systemic problems in Indian CS/IT academia that needs to be addressed.
Testing is another thing that should be integrally taught with programming - atleast the Unit-test part of testing. And that should be graded. Strictly. I recently started using a performance library that measures kernel parameters. The author provided a fix for something and said that he 'extensively tested it'. My question was how can I believe him? I looked up the source code, found & read the tests and it was trivial to answer my question. And here is the best part - the author is a researcher at -a-US-university. So, it is possible AND necessary to teach testing by default. Yes, this is different from Chittar's exposition, but without exposure to basics, I think Chittar's recommendation is difficult - but if inculcated, would be an incredible tool in any CS/IT persons' arsenal.

Eklavya Sai: In an ideal scenario teaching programming and unit-testing together will be wonderful. And the unit-test-plan and unit-test-report would also be graded. Given the time available for 'Lab' programming courses and many other realities on the ground, I feel it will be quite impractical, as of now, for most CS/IT departments to teach and grade testing integrally with programming.
It pains me to state this: but most people who come into programming from non CS/IT backgrounds these days have this skill: 'Programming by copy-pasting'. I have seen people with over 6 years experience at major-cell-phone-company who copy-pasted stuff and it was out right wrong. They wrote test cases to make it pass, but I caught it at review. He did not understand simple OR vs AND. This may sound like a pathological case, but yes, that is the gist of not having theoretical & practical training.

Eklavya Sai: Oh! I have seen copy-paste programming being done by CS/IT graduates as well. But I agree that programmers who neither have a CS/IT background nor an IT-Finishing-School/Private-IT-training background may be more prone to copy-paste programming. I also have seen countless programmers who have ZERO CS/IT formal academic background but were far superior programmers as compared to many CS/IT graduates.

You have good programmers and bad programmers irrespective of whether they have formal CS/IT academic background or not. It is a company's responsibility to assess potential software developer employees properly before they are given software development jobs. If they somehow got through the assessment mechanism, once they are found to be incompetent, irrespective of whether they are CS/IT graduates or not, they should be asked to relocate to some other activity or become competent by undergoing appropriate study & training.
Let me conclude with some general thoughts: Education/schooling is a time where one can learn from example to a great extent (unless you do some research kind of problem). The cost of making mistakes while learning in the class is quite less compared to that of doing so in real projects. While students may not have the wisdom to understand this, instructors should have the wisdom and courage to take necessary action. One can learn a lot by studying works of others: not everyone is a prodigy. Even whom/what you copy is a reflection on your taste/preferences. One can learn a good deal about how/why an algorithm works by studying it in all its theoretical abstraction aided by good working examples running in parallel. Algorithm design for example, is a very little taught discipline, but is very essential for great progress. It could mean the difference between Top-US-Product-Development-Companies and Indian-Software-Consultancy-Companies; no, I don't mean to belittle the latter companies, but what they do and are capable of doing is very, very fundamentally different from that of Top-US-Product-Development-Companies.

Eklavya Sai: My focus in this blog is on teaching programming in general as against teaching sophisticated algorithm design & analysis. "Programming-in-general" would include basic algorithms for searching, sorting involving data structures like arrays, vectors, linked lists, hash tables, maps etc. But it would not delve into deep analysis of these algorithms and their efficiencies. Of course, Top-US-Product-Development-Companies would want CS/IT graduates who are very good at design and analysis of algorithms besides being good at programming in general. My understanding of most CS/IT academia in the country is that Design & Analysis of Algorithms is taught as a separate 'theory' course. I do not want to comment on that course as it is outside the scope of my 'Lab' programming courses interests.

Monday, October 24, 2011

Does a Teacher of Programming Need to Know Turing Machine?

I learnt COBOL programming through a few months of in-house training in Datamatics Consultants, a software consultancy company in Mumbai in 1984. I moved on to other programming languages, notably Wang VS Assembler (close to IBM 360/370 Assembler)1 & 'C', through self-learning with some input, at times, from short company sponsored training programs. "The C Programming Language" by K&R book was perhaps my most important teacher of programming.

I don't know Turing Machine, NP-hard, NP-complete and a host of such Computer Science/Mathematics concepts. I have not read the influential computer-science text Structure and Interpretation of Computer Programs, by Abelson, Sussman, and Sussman: http://mitpress.mit.edu/sicp/. But I have read hosts of other books on Programming (specific computer language like C++, Java oriented), Unix, OOAD, Design Patterns, Databases, Networks, Operating Systems, ... besides countless manuals on processor instruction sets, computer hardware architecture, software design, OS and Programming references & guides ...

So I am clearly not a Computer Science guy :). But I consider myself to be a strong computer software technologist with many, many years of international design and programming experience in areas like process control software, networking (mail gateway, LAN OS, Videotex, Internet profiling etc.), windowing, database oriented business apps etc. Over time my main technical expertise was in Object Oriented Analysis & Design and C++ programming. Of course, it may, in all probability, have helped me do a better job if I were a master of Design & Analysis of Algorithms & Computational Complexity etc. But I managed to get by without knowing these Computer Science subjects and, if you will allow me to blow my own bugle, my software work gave a lot of satisfaction and happiness to my managers & customers/users.

I am not saying that a software professional should not be a master of Computer Science. It will be great if he is. But there are lots of very capable software professionals who are not Computer Science masters.

With that background, let me pop a couple of questions on the need for a teacher of programming to know Computer Science theory:

  • Does a teacher of programming need to know Turing Machine?

  • Does he also need to know NP-hard & NP-complete concepts?

My view is that the answer for both the questions is NO. It will help if he knows them but it is "not necessary for him to know".

But if the person has to be a teacher of Computer Science courses on Design & Analysis of Algorithms, Computational Complexity, High Performance Computing etc. then, IMHO, he may have to know such Computer Science theory topics well. [I cannot say he definitely will need to know as I am quite blissfully ignorant about Computational Complexity and High Peformance Computing, and have introductory knowledge of Design & Analysis of Algorithms.]

I also need to mention that I am given to understand that in many elite tech. universities like IITs they don't have 'programming' courses. So they have no notion of a 'teacher of programming' at all. But in many commoner tech. universities they certainly have programming courses e.g. C, C++, Java, Web programming etc. and so have 'teachers of programming'.

Notes
  1. "VS Assembler is very much like IBM mainframe macroassembler, with sophisticated macro features. It is virtually identical to IBM 360/370 assembler, and mainframe programmers make the transition quite easily." Source: Wang VS Languages, http://wangvs.ning.com/group/newvsreference/forum/topics/vs-languages

Programming: Practical Solution Mindset vs. Scientific Mindset

Last updated on January 6th 2013

Note: At the time I wrote the original version of this post I was not well versed with efforts of persons like Prof. David Parnas to bring a professional engineering approach to the teaching and practice of software design & development, and name that as "software engineering". So I casually used the term "engineering mindset" in the original version of the post when I wanted to refer to a practical solution approach. I have now (Jan. 5th 2013) changed the post to use "practical solution mindset" instead of "engineering mindset".

I presume that, say, with the civil engineering approach in the Western world I will get a level of guarantee of the design & construction of a building by a certified & licensed civil engineer. The engineer would have used standard principles for the design & construction which can be verified by other competent authorities. In India, I believe it is quite similar, except for the absence of licensing. So when one uses the term "engineering approach" or "engineering mindset" in the context of software, a knowledgeable about engineering reader will presume a similar application of well defined & well understood design principles and a level of guarantee of the solution.


I am a technologist/technology solution provider as against a 'computer scientist'. So I use a "practical solution mindset" as against a "scientific mindset". What do I mean by these terms? Well, in my terminology, a "practical solution mindset" applied to software focuses on how to provide a software solution which:

a) Satisfies the users in terms of functionality, efficiency and user interface quality. Note that the efficiency may not be the best possible efficiency but what is acceptable to the user.

b) Gets done with optimal resources in terms of manpower, time and money. This will typically involve use of existing software components with or without modifications. Why reinvent the wheel?

c) Provides acceptable standard of design & documentation for maintenance and enhancement of the software solution over time.

There are some more factors too like reasonable protection against technology obsolescence but the above are the critical ones.

For the "practical solution mindset" person "need to know" is an important principle. So a programmer/designer may not need to know about implementation details of, say, a collection class like vector. He simply needs to know the programming interface and the pros & cons of the vector class. He "need not know" anything whatsoever about the inner workings of the vector class. But if he does know, it may be of "insightful" help.

To explain this "practical solution mindset" to students that I taught component-based-development type of programming courses (e.g. Open Source Web Technology using Linux, Apache, MySQL, PHP, Joomla, Moodle, Al Fresco etc.), I would use the example of driving a car. You "need to know" how the user interface (driver-interface rather) of the car operates the car. The ignition, steering, accelerator, brake & gears (if manually operated gears are used) is what you "need to know". What is under the hood is "not necessary to know". But if you know how the stuff under the hood operates then you may be a better driver and if the car breaks down you may be in a position to fix it. Whereas the driver who knows nothing about what's under the hood is completely dependent on somebody else, say a mechanic, to fix the car in case of a breakdown.

But if you have limited amount of time to learn, it makes sense to first learn what you "need to know" like the driver-interface of the car. Then, if time permits and you have the inclination, you can learn the "under the hood" stuff.

The "scientific mindset" person, on the other hand, focuses on the Whys and inner-working-Hows as well as the outer-Hows. He wants to know why a vector class operates the way it does as well as its innermost working. He is quite uncomfortable with a "you don't need to know" attitude or answer. He wants a "building block by building block" learning experience. He wants to be able to answer any questions no matter what the level of detail about any software solution he provides.

I feel that such a "scientific mindset" can be a serious problem for a component-based-development software solution approach. The problem really is the available time for learning or for providing a solution. It is like the time involved to learn driving can be orders of magnitude more than it is now if a student insists on knowing everything about what's under the hood of a car before he learns how to operate the user-interface of the car.

But such a "scientific mindset" may be essential for developing the core building blocks of software like an Operating System or a Compiler or defining a new computer language or writing a systems library of components. The person working on such software would need to write, say, a new vector class from scratch with as close to best-possible-efficiency as feasible. Of course, at some point he still will not know the details. I mean, he will operate at a lower level of abstraction as against a component-based-developer. But nonetheless he too may have a "need to know" approach for lower levels of abstraction like Computer Language or Operating System Services for memory allocation or how the processor's instruction set executes the services that he requests. And it goes on & on, processor's microcode, the electronics on the processor, NAND gates, the transistor ...

However, IMHO, the lower levels of abstraction like a computer language or operating system services are very well defined and stable as compared to higher levels of abstraction like Joomla components. And so the "scientific mindset" student/software developer struggles to come to terms with developing software solutions using fast-changing and not-so-well-defined components like Joomla components (fast-changing meaning rapid new versions with older versions changing only for bug-fixes). He feels that he has just put some stuff together and even if works and satisfies users, he cannot explain all its "inner" workings and feels that it is not a "scientifically" done job.

But the real world is driven by how society's needs are satisfied quickly and at acceptable cost. The "practical solution mindset" is what delivers tremendous value-for-time-and-money to a wide range of non-mission-critical software needs of society. Component-Based-Development delivers solutions quickly and at far lower cost than reinventing-the-wheel solutions. Yes, there may be a few bugs and crashes, but since the software is not-mission-critical, users are willing to put up with a certain amount of inconvenience. [If the inconvenience becomes too much they tend to switch to some other solution]. So component-based-development model thrives and, in turn, "need to know" practical solution mindset software professionals & solution providers thrive.

The "scientific mindset" software professional has his niche mission-critical and systems software development areas where he thrives. But that is a much smaller part of the worldwide software "action".

Wednesday, October 19, 2011

More on IT Finishing Schools

Last updated on 4th September 2014

http://www.careers360.com/news/3716-Job-hunting-The-truth-about-finishing-schools: A very interesting article in Dec. 2009. [Update: This article seems to now be behind a login wall] Some notes from the article:

Dr K R V 'Raja' Subramanian, CEO of Radix Learning, a finishing school with a focus on IT and a former BITS Computer Science professor says 'We need outcome-based learning,' as that translates to 'job-ready' students
...
It is important for students to know their "unemployability quotient" and then (if that is high) focus on doing something about it.

--- end Notes ---

Here is a BBC article in March 2010, "Finishing school for Indian IT graduates": http://news.bbc.co.uk/2/hi/8547327.stm

Jul, 2009, Education Plus, Hindu article, "Applications invited for IT Finishing School": http://www.hindu.com/edu/2009/07/13/stories/2009071350710800.htm

Here is the IT Finishing school mentioned in above article: http://teknoturf.biz/it_finishing_school.php

http://www.3edge.in/IT%20Finishing%20School.htm Claims, "The concept of IT finishing school was pioneered in India by 3Edge in 2006."


http://www.smartguruji.com/it-finishing-school.php .E-learning (online) course:
Mode : eLearning
Duration : 3 Months
Eligibility : Graduate/PG (Eg: BE/B.Tech/M.Tech, BCA, B.Sc., MCA, M.Sc. etc)
Fee : 4500 + Free TechnoFIRST Career Magazine (6 Months)

Syllabus:

    * Programming Fundamentals
    * User Interface Design
    * C Programming
    * HTML Basics
    * LINUX OS Concepts
    * Software Testing Basics
    * Basics of UNIX
    * OOPS Concepts
    * Database Concepts (RDBMS, MS SQL Basics)

Placements: We have a 100% placement assistance program and you will also become a part of our extensive recruitment database after undergoing our 6 months industrial training.
....
Eklavya Sai: Sounds like a pretty good deal. Wonder how good their placement record is? May not be great - sounds too good to be true.
---------

Well, the IT Finishing School concept seems to have become quite established in India. So looks like the division of labour is that AICTE/UGC governed CS & IT departments focus on the theory & research stuff and also impart some weak programming skill set, and the market-forces-created private "IT Finishing Schools" step in the "gap" to provide "job oriented skills" to those CS & IT graduates who could not land a job. Of course, some of these finishing schools are open to all graduates not just CS & IT graduates - but clearly many CS & IT graduates are not able to land a job without the help of such "IT Finishing Schools" or private training institutes.

Tuesday, October 18, 2011

Steve Jobs: Some Criticism and Some Defense

Last Updated On 23rd October 2011

A friend sent a few links which were partly critical of Steve Jobs. I have given my views (extracted from email exchanges) below the links.

FOX Studio head on SJ: http://www.hollywoodreporter.com/news/jim-gianopulos-steve-jobs-dead-248311

Driven, wasn't he? Threatening to collar a business partner by flying down to Greece and interrupt his holiday!!!

My experience of industry was that it is these driven guys who can handle the heat of the top seats. Otherwise the competition just walks over you.

From a human point of view, such a driven life, completely mucks up family life. They call it 'sacrifice' - I don't know whether that is the right word. I think Steve Jobs' family life was not that great - towards his end he seemed to regret that he did not spend enough time with his kids. IMHO, that's a TERRIBLE PRICE to pay for FAME & SUCCESS.

New York Times article, "Against Nostalgia": http://www.nytimes.com/2011/10/06/opinion/jobs-looked-to-the-future.html?_r=4

Steve Jobs was a tough business nut but I really don't recall any top business tycoon who was not.

"Today there is no tech company that looks more like the Big Brother from Apple’s iconic 1984 commercial than Apple itself, a testament to how quickly power can corrupt. ". I disagree but then I am not closely following the business. IBM was HUGE. To get an idea the saying in the late 80's (when I got exposed to IBM's dominance) was that "You can't get fired for buying IBM". [Update: A friend argued that Apple had, at a particular point of time, near-monopoly (88%) in the US legal music download business. That market-share reduced later on.]

Apple may have tremendous net worth or whatever they use to judge a company's financial strength but even in the phone business you have Nokia, Samsung, Motorola, LG, Sony-Ericsson etc. Is the market share of Apple's iPhone anywhere close to the dominance that IBM had in the mainframe business in the 80's? I doubt, though I do not have the numbers, so I can't be sure. But I got some info. that half a million Android devices are being activated per day!! That will seriously worry me if I am an Apple management guy.

About the Apple lock-ins. Well, I think it is a fair deal. You don't like the lock-in - don't buy Apple. Buy Creative, Sony, Nokia .... You want Apple - accept the lock-in. That's the way he ensured Apple made enough money to be able to continue to build those fantastic products. It is like how Drug companies make huge money on successful products (like anti-cancer products) for a stipulated amount of time (till the copyright or whatever the equivalent is called in the pharma industry runs out). This pays for their R&D and takes care of the losses of many failed products.

I accept Apple lock-ins for both iPod Nano & iPod Touch. I do crib about it but the bottom line is that I am willing to pay the lock-in price for the fantastic value of these devices. And, if I get too bugged about it I can always shift to another vendor like Creative, for example. It is just nowhere close to a MONOPOLY like what IBM and AT&T enjoyed in the past. You could not turn to anybody else - REALLY. Like what BSNL was in the past in India.

About appalling labour conditions in China - [Update: My earlier comments on this were strongly contested by a friend. I feel it is not appropriate for this blog to get into sensitive labour conditions matters, so have deleted my earlier comments.]

"We would also see a man who in the end failed to “think different,” in the deepest way, about the human needs of both his users and his workers. " [Update: Watered down my original comment.] Maybe Steve Jobs drove his workers hard. Maybe he was a perfectionist who could not tolerate others who could not match up to his 'perfectionist' standards. Maybe he was unfair at times. But he was a business leader and not a spiritual master leading his followers to spiritual brotherhood and joy. I feel that is part of cutting-edge business life. If, as a worker, you cannot handle the heat you can move out and join a more easy-going organization.

And this one from ESR, "On Steve Jobs’s passing": http://esr.ibiblio.org/?p=3790

"Jobs created a myth that arrogated that innovation to himself". Well, I felt it was an acceptable marketing strategy. They commercialised the Mac & the iPhone. So his boasts can be read as arrogating the commercialization of the innovation to himself/Apple. I mean, Xerox failed to commercialize the Alto. Jobs succeeded in taking Alto ideas into the Mac and commercializing it. R&D alone is not everything - Commercializing it successfully is what delivers R&D to people and not prototypes or journal publications.

"The myth was freedom, but the reality was Jobs’s way or the highway." Well, the relatively cheap and beautiful Mac as compared to the huge cost & monopoly of IBM - that's the freedom that the 1984 ad seemed to imply to me. Not open source hardware and open source software.

[Update: Deleted Open Source vs. Proprietary comment as I realized that it is not an appropriate comment for this blog.]


[Update: Deleted comment on Steve Jobs' medical decision. Realized it was too sensitive a topic to be put up on this post.]

Sunday, October 16, 2011

The Brains Behind Aakash, the Rs. 3000 (aka $35) Tablet

Important Update - 8th Feb. 2012

A friend passed on the link below around the end of 2011. It certainly raises some questions about IIT Jodhpur's contribution to the Aakash project. But it may be a one-sided view.

Claimed back story behind the Aakash tablet stating that DataWind already had a design almost identical to Aakash specs. put out by Indian government:
http://www.theglobeandmail.com/report-on-business/rob-magazine/how-a-montreal-company-won-the-race-to-build-the-worlds-cheapest-tablet/article2282337/singlepage/#articlecontent

My view is that the article seems quite believable. But IIT Jodhpur's supposed design effort is not mentioned at all (B.Tech. project report ...). Maybe the specs. of the tender came from the B.Tech. project report + IIT Jodhpur/Rajasthan Profs.

Here is a Jan 2012 report raising questions about Aakash project continuing. It also has an old (video) review which is quite a telling one. Worth seeing (less than 5 min. IFIRC). http://tech2.in.com/news/tablets/defects-may-prod-government-to-discontinue-aakash-tablet/272422

An early Feb. 2012 report states that MHRD is keen on continuing Aakash. It is involving more IITs into the project and trying to indigenise its production as far as possible: http://articles.economictimes.indiatimes.com/2012-02-02/news/31017202_1_tablet-aakash-hrd-ministry

We will have to wait and see how it pans out. Maybe we need a year or two to see how things will pan out! That's a long time in this super-fast market. A game-changer product from some US/Korean/Taiwanese ... company could challenge the indigenised Aakash.



Last Updated on December 20th 2011

I find this article on Aakash, http://www.hindustantimes.com/The-brains-behind-Aakash/Article1-757780.aspx, fascinating.

Professor Prem Kumar Kalra, director, Indian Institute of Technology (IIT) Jodhpur, Rajasthan seems to be one of the key technical & vision moving forces behind Aakash. The B.Tech. thesis of his son, a student at IIT Jodhpur, apparently was the foundation of the Aakash project!!! I am stunned and extremely happy if even 50% of this is accurate. I mean, an Indian educational institute B.Tech. student's project thesis resulting in a tablet whose launch was noted worldwide - Wow!!! [Perhaps the son had some ideas & help from his father & his Profs - but still, a B.Tech. thesis!!]

I salute the technical-expertise-cum-entrepreneurial-efforts of IIT Jodhpur in having brought Aakash to this stage. I pray to God to give them the strength and inspiration to make Aakash a decent product. I mean, at a price point of Rs. 3000/- you cannot expect an iPad like device.

And they are doing field tests - the article has a review from a student-user.

This seems like the real stuff. Not just a news item which promises much and then dies away without a whimper. Maybe it really is going to be the Tata Nano of the tablet market!!

Prof. Kalra was in IIT Kanpur, Electrical Engineering department before becoming director of IIT Jodhpur. IIT Jodhpur got set up in 2008. He seems to have a focus on "revolutionizing education" and the Aakash project seems to be one expression of his efforts. This man seems to be a man with a mission. Here is a short talk by him at Indian Semiconductor Association (ISA) Vision Summit 2011, where he comes across as a very entrepreneurial  academic:  http://www.youtube.com/watch?v=HBIqS42JnmU. Here is the summit website: http://www.isaonline.org/index.php?option=com_content&view=article&id=1219&Itemid=482

Here is iitj (Jodhpur) with Aakash launch pics holding center-stage (no surprise there): http://www.iitj.ac.in/

Here is Prof. Kalra's home page: http://www.iitj.ac.in/iitf/view-profile.do?id=40

I did not realize that iitj is so deeply involved in Aakash. The article talks about a 170 member team of IIT Profs. & students working on it. Another Prof. of iitj says that they are designing an indigenous motherboard which if it works out (in 12 to 15 months), hardware part of Aakash will also be fully Indian!!! Wow - I am truly impressed by the way they seem to be going about their stuff.

BTW I did not know that we had an IIT, Jodhpur, Rajasthan. What a way to announce a technical university to the world!!!

Saturday, October 15, 2011

A Defense of The CS/IT PhD Teacher

Last minor update on 19th Feb. 2020

This is an edited mail exchange with a friend in response to the post: Is a PhD in CS/IT Necessarily a Good Teacher?

Friend wrote: First, let me be upfront with the fact that I may be in defensive mode - only because I have seen somethings very different here (West) and back in India, in some cases.

For pedantic, completeness reasons, I would like to add d) Non-PhD + Not a good teacher... We have both seen examples of this type, I am sure. They may not be immediately pertinent to the discussion at hand, but sometimes tend to negatively influence some policies.
Eklavya Sai wrote: Very valid point. I had missed it. Thanks. Added it to post.

Eklavya Sai had written in the post: And then there is the communication skills issue. Research typically needs solitude and an individualistic approach.
Friend wrote: I must disagree. While lots of R is individualistic, presentation skills are extremely important. Infact, every Graduate student is expected to go thru' comm. skills training, just like in the Industry.

Eklavya Sai wrote: Well, I think it is clearly recognised by researchers that presentation skills are important. I am not disputing that at all. But picking up presentation skills and good communication skills (spoken & written) is not easy for many. And so, quite a few PhD qualified CS/IT persons in India are not good communicators though they very much desire to be good communicators.

Friend wrote: Sadly, this is not the case in India, but in general, comm. skills are an absolute must.
Eklavya Sai wrote: I am really focusing on the Indian CS/IT academic system space. US is really different. My impression is that there it is a market driven system. I mean, tuition fees are so expensive that if a PhD qualified teacher is not a good communicator, students would crib and crib loudly - they would not care about whether he is a PhD or not. So a poor communicator PhD qualified teacher would not be able to last long as a teacher and may move to research-only positions.

Eklavya Sai had written in the post: So only a few should understand, for your research work to be considered noteworthy :-).
Friend wrote: Why is this the case? Because, only a few are capable of understanding this. Hence, it is all the more important to be able to effectively communicate to that elite few capable of understanding you. Consider the converse: if many could understand, you will probably gloss over most of the details and hope that those who can, will understand: this is definitely not effective communication, IMO.

Eklavya Sai wrote: The comment was made part-jokingly, part-seriously by a UK academician. I think many of the greats in sciences have the ability to convey their research ideas very effectively. I have been very impressed with how certain Western scientists present complex stuff. They can really communicate.

And I certainly recognise that very complex research stuff will be understood only by persons of the field. I mean I will not understand much about your research work, to be honest, as I am a technologist and not a researcher :).

But I have noticed a common flaw in some persons of both the researcher and technologist communities. When they are not sure of their stuff they take refuge in jargon. And this jargon stuff well used can give an impression to not-so-knowledgeable people that the guy is knowledgeable!! If the guy gets grilled by a really knowledgeable guy who is not willing to get fobbed off by jargon & assumed-punditry, then his ignorance gets exposed.

That is why tech. reviews are so important in the software technology space. And I guess that must be the role that reviewers of scientific journals are supposed to play. The elite journals would surely be having quality reviewers but I think there are a lot of non-elite journals where high-sounding-but-low-real-content stuff passes through.

I think it is this aspect of the researcher that the UK academician part-jokingly referred to. I mean, the guy had a PhD under his belt and years of academic teaching experience in the West. It is not a non-PhD, non-researcher guy like me talking.

Eklavya Sai had written in the post: And all non PhD software industry professionals are NOT good teachers - but some certainly are.
Friend wrote: Isn't the converse also true? And therefore, only a few people are in general, really capable of teaching - not just restricted to the PhD circle.
Eklavya Sai wrote:
I agree, all can't teach. Whether it is PhD circle or non-PhD circle. I presume this is what you mean.

Friend wrote: Why is this pertinent? Because, what I have seen is this: people who have spent more time with research, generally tend to know things that you can only know by that deep study. So, among the good teachers, those who have a PhD would tend to be the more knowledgable ones and thus prepare better students.
Eklavya Sai wrote: They tend to know things in their research area well. And I have acknowledged that in the post. "Note that for the course he teaches where he has done research he will be very knowledgeable typically - I am talking about other courses here."

But for other courses? If a guy is a PhD in algorithms, will he automatically be knowledgeable enough to teach OOAD? IMHO, he won't. So he will read from a book, understand it well (as he has certain amount of intellectual capability - he did a PhD after all) and then teach. But that will be only book knowledge. How can it compete with a professional with years of OOAD expertise under his belt? Neither will it be able to compete with a PhD in OOAD.

And, as I wrote in the post, the teacher cannot do another PhD in OOAD just because he has to teach OOAD.

Now elite colleges & elite PhDs are perhaps special cases. In an IIT a teacher may offer only a couple of courses - one may be his research area and he can spend enough time on the other to know it reasonably well, even if it is book knowledge. And, anyway the teacher is a real smart guy.

But in commoner techie colleges in India for CS/IT I think the picture is very different. Bookish knowledge teachers are the norm rather than the exception. They may be teaching 4 to 8 courses in an academic year and only one CS/IT course may be corresponding to their research area.

I think you do not have exposure to the commoner techie college issues and commoner CS/IT teacher issues so much. I get the impression that your views are more appropriate for elite colleges and elite teachers, at least in the Indian CS/IT academia perspective. But, I could be wrong. After all, my exposure to Indian CS/IT academia is quite limited.
Eklavya Sai had written in the post: But most students and parents are not interested in research!
Friend wrote: Not sure about students, but afaik, many parents these days actively encourage their ward to go into Research/Teaching. Their reasons could be less stress, more respectable job (even if not pay ;) ) and quality family time.
Eklavya Sai wrote: Well, let's look at the numbers. I play it somewhat safe and say it is 80% industry job and 20 % research (what students do after passing out of grad/post-grad CS & IT degree programs). A noted CS academic and industry person wrote (in a mail exchange I had with him in early 2010) that he feels it is more 95 % industry  job and 5 % research.

Eklavya Sai had written in the post: ...curricula not left to PhD alone...
Friend wrote: I can think of atleast one reason why this tends to be the case (I am by no means endorsing or opposing the statement). Education is as much about preparing people for the future as it is for the present. Not everyone is capable of picking-up skills; and so the system must consider the majority of the populace that cannot stand on its own. And, people can in a position to have some inkling about the future of science, technology, humanities, arts are those engrossed in R in those areas. Difficult choice - for both the people on curricula committees and for those deciding who gets to be on the committees as well.
Eklavya Sai wrote: Well, I think there should be transparency in the system. And the student should be able to choose what he wants to do. As far as I am concerned the Indian CS/IT academic system is heavily biased towards the elite. And that is why you have this new, "IT Finishing School" concept, which even IT graduates go to!!! Unbelievable. And, IMHO, a terrible proof of CS/IT academic system failure for the commoner students. For more please see: CS & IT Academia: IT Finishing Schools
But this is my view and I guess I get a little emotional about it. During my industry days, I have conducted countless tech. interviews and wondered what the he** the teachers were teaching students doing programming courses in colleges. After spending some time in CS academia, I think now I know what the problems are when it comes to teaching programming in Indian CS & IT academia. Maybe that is clouding my vision about the bigger CS/IT academic picture.

Friday, October 14, 2011

Online Programming Courses: Use MIT's OCW or IIT's NPTEL or Stanford's SEE

Mail exchange (slightly edited) with friend on MIT's OCW (& IIT's NPTEL) vs. Stanford's SEE. This exchange is related to the post: CS & IT Academia: Use Stanford Engineering Everywhere to Teach Programming.

Friend wrote: Why is this (Stanford's SEE) a boon in particular? MIT's Open Course Ware (http://ocw.mit.edu) has been around for a really, really long time. And they have had similar courses too.
Eklavya Sai wrote: As I wrote in the post, MIT's course is more like IIT approach - teach algorithms & problem solving - leave the language to the student. I find Stanford's course to be a lot more suitable for non-elite CS/IT departments.
Friend wrote:

does NOT talk even a little bit about algorithms - it teaches programming with Python.
Eklavya Sai wrote: This is a 3 week short course and not a regular course. In fact, like I mentioned in the post, they have a short course on C++ too, 4 weeks this time instead of 3.

It is almost like, hey, you don't really need to be taught a language - you should learn it on your own. But in case you can't do it, here is a short-term course for you. And, I think that may be perfect for the smart kids that MIT & IITs attract.

But the majority of students studying in CS & IT depts in India cannot handle that. I mean, having a language independent Intro to CS & Prog. course and then teaching C++ in 4 weeks will be just not acceptable to most students. But maybe I am wrong. Maybe it will be acceptable. However changing the programming course system from language dependent to language independent is a HUGE EFFORT. I mean, you need to experience how much EFFORT is required to change such things in the system, then only you know.

The Stanford course content seems to fit in far more to most Indian CS & IT dept. needs and current language dependent programming courses system.
Friend wrote:
But yes, I personally still find value in teaching programming as against programming in a specific language. Teaching programming will help him learn ANY language. Teaching a specific language will make it difficult for him to program in a different syntax even if underlying concepts are the same. And this is the approach an alternative MIT course takes: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/

That is one classic book that teaches one to think about programs rather than programming.
Eklavya Sai responded: That is your personal choice and that's wonderful. You can handle it. Good for you.

But that may not be the choice of most other CS & IT students in India.

Friend wrote: MIT is catering to both requirements.
Eklavya Sai responded: I have already given some comments on this earlier. In short, my take is that MIT primarily caters to elite students and the Stanford programming courses are more suitable to non-elite Indian CS & IT students. So, I guess we will have to agree to disagree here.

Please note I am talking only about programming courses and not courses like Machine Learning or Image Processing.

Friend wrote: Stanford is only just getting started in this game, and are doing a ton of recent propaganda - not saying that SEE is bad, just new.
If the universities were interested, they could have as well used those (and quite a few do so; in fact, a few people in (a CS department) use these lectures to enhance/advance their classes).
Eklavya Sai responded: I do not know of anybody (in non-elite Indian CS & IT departments) using NPTEL or MIT's stuff for the basic programming courses (C/C++/Java) - Don't know whether anybody has used it for Introductory Data Structures and Algorithms. BTW my initial focus is on teaching programming.
Friend wrote:
Also, our very own IITs (which are more likely to offer something that Indian students may more easily follow) have their own project on the lines of OCW: http://nptel.iitm.ac.in/
Eklavya Sai responded: Did you see IIT's Intro. to CS & Problem solving course?? I find Stanford's course content to be far more appropriate for non-elite CS depts.
Friend wrote:
Sorry, but I find that SEE being a new novelty that the University system will (as opposed to could) benefit from is not interesting to me at all
Eklavya Sai responded: That's OK. We agree to disagree :)

Friend wrote: If the University system did not benefit from course material from places like OCW that have existed so long, I find it difficult to believe that they will, on their own volition, suddenly wake up to SEE. As long as they wake up, that should be good.
Eklavys Sai responded: I feel, for the first few programming courses, Stanford's offering is better suited to Indian needs and so may be more acceptable than OCW or NPTEL. Let's see what happens.

Friend wrote: And, again, I am not disputing the benefit of SEE or suggesting that it is in anyway inferior to MIT's OCW; just that it is not a new novelty. Infact, I respect it quite a lot. And, whats different here is this: with SEE, some courses are actually evaluated. ai-class.org for example, db-class.org for example, ml-class.org. These are courses that are currently offered by the profs at Stanford. They give assignments, tests, quizes and grades. For non-stanford students, ai-class.org will be sending out letters of completion from the professors (one of who is Peter Norvig, the Director of Engg. at Google!!). All for FREE!
Eklavya Sai responded: I had gone through the ai-class one earlier as (a friend) has also enrolled for it. I did find it to be very well organized as an online course offering (far better than MIT or NPTEL). (The friend) said a huge number of students had enrolled. I have asked him to give me feedback after he completes the course.

My interest in this is from an Internet Based Education example point of view. I am not interested in ai or machine learning.

And yes, I noted the top notch professional-professors teaching the course. I went through the intro. video. I mean, the whole thing is very well organized like a commercial offering - but it is FREE. Amazing!! Noted that the same venture capitalist company (http://en.wikipedia.org/wiki/Sequoia_Capital) that was an important funding source for Google is involved in SEE too. Maybe that's the reason it looks so professional as compared to MIT & NPTEL.

Friend wrote: One way a live class in India could use this is: if syllabus is similar, tests and quizzes could be the result of the evaluation of the online exams only!
Eklavya Sai responded: If I were a teacher of ai/machine learning I would just jump at the possibility of running my course on these videos, and using the tests, quizzes and exams. But then perhaps my boss may question me why do I need you? I feel the teacher is still needed to adapt the material to local needs, and to answer doubts & queries of students. And this way students will learn more effectively.

But I come from an industry teaching background (besides industry development experience) and the game is very different in AICTE/UGC governed academic teaching environments (for teaching programming).

Friend wrote: And (friend's wife) is currently enrolled with ai-class.org. It may not be as much benefit as a live class, but better than just listening to the lectures offline since these are evaluated!
Eklavya Sai responded: All the best to (friend's wife) for her ai course!