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!

Thursday, October 13, 2011

Dennis Ritchie, a Truly Great Software Guy

Last Updated On December 26th 2011

A friend passed on the news of Dennis Ritchie, one of the truly great contributors to the software industry & profession, passing away.

He wrote a touching mail:
I imagine somewhere up there, earlier today a class just started with:

#include <stdio.h>
main()
{
    printf("Hello, heaven!\n");
}

So long and thanks for everything, Dr. Ritchie!
----

Eklavya Sai: I am immensely grateful to Dennis Ritchie for his 'C' programming language as well as Unix. I pray to Almighty God to shower His Grace on Dennis Ritchie.

I will never forget how much his (& Kernighan)'s book, "The C Programming Language", contributed to my learning programming decently. So, in a sense, I guess I am a student of his, and also a long time practitioner of his programming language creation.

But, to be honest, he was a private man and so I have very little info about the man, Dennis Ritchie. I am sure he would have been a very decent chap.

His contribution to CS & IT can be felt by the fact that even today in most CS depts. and some other depts. in Indian academia they still teach 'C' programming!! Linux is still written in 'C'. From 1971 (?) to 2011 - 40 years on in the fast changing tech. world and still current!!! I think that is tremendous testimony to the value of his creation.

Here's a nice article on him: http://www.zdnet.co.uk/news/business-of-it/2011/10/13/dennis-ritchie-father-of-unix-and-c-dies-40094176/

Here's his Bell Labs home page: http://cm.bell-labs.com/who/dmr/

And here's the wiki page on him: http://en.wikipedia.org/wiki/Dennis_Ritchie

Wiki on 'C' programming language: http://en.wikipedia.org/wiki/C_%28programming_language%29

CS & IT Academia: Use Stanford Engineering Everywhere to Teach Programming

Stanford Engineering Everywhere (SEE) seems to be a very interesting experiment in Internet Based CS teaching.

It is currently offering 12 of Stanford's engineering courses free to students, educators (and professionals) anywhere & everywhere. And its site states: "A Creative Commons license allows for free and open use, reuse, adaptation and redistribution of Stanford Engineering Everywhere material.": http://see.stanford.edu/

One of the courses it offers is, "Introduction to Computer Science | Programming Methodology". It provides Lectures (videos & transcripts), Syllabus, Handouts, Assignments, Exams and Software (Downloads)!! The course uses Java as the programming language. That is a pretty complete Free Internet Based Course from one of the top CS educational institutions in the world! What it may lack is a certification that one has passed the course and associated grading. Here's the course home page: http://see.stanford.edu/see/courseInfo.aspx?coll=824a47e1-135f-4508-a5aa-866adcae1111

The above course would be relevant for IT Academia as well. The course home page states, "This course is the largest of the introductory programming courses and is one of the largest courses at Stanford." and "The course is explicitly designed to appeal to humanists and social scientists as well as hard-core techies. In fact, most Programming Methodology graduates end up majoring outside of the School of Engineering." So this seems to be aimed at anybody in any science, arts, commerce or engineering stream, who is interested in programming. The prerequisite mentioned is important to note: "The course requires no previous background in programming, but does require considerable dedication and hard work.". There is no easy way to learn programming (for most mortals); you have to sweat it out.

Another course offered is "Introduction to Computer Science | Programming Abstractions" which has a pre-requisite of "Solid performance in Programming Methodology and readiness to move on to advanced programming topics". This course teaches OOP, stacks, queues, sets, recursion, linked lists, trees, graphs, and introduces time & space complexity analysis. And, it is done in C++. It also has Lectures, Syllabus, Handouts, Assignments & Exams. Here is the course link: http://see.stanford.edu/see/courseinfo.aspx?coll=11f4f422-5670-4b4c-889c-008262e09e4e

Yet another introductory CS course is, "Introduction to Computer Science | Programming Paradigms" which covers advanced memory management features of C & C++, concurrent programming using C & C++, functional paradigm (using LISP), and also has a brief survey of other modern languages like Python, Objective C & C#. The prerequisite is rather elaborate - to me it seems that a person who has "solidly performed" in the Programming Methodology and Programming Abstractions courses will fit the prerequisites. Here is the course link: http://see.stanford.edu/see/courseinfo.aspx?coll=2d712634-2bf1-4b55-9a3a-ca9d470755ee

These three are the Introduction to CS courses offered at SEE, currently. Nine other courses in areas of Artificial Intelligence, Linear Systems & Optimization and a misc category (iPhone App. prog., Massively parallel processors programming) are also offered. Here are the courses on offer: http://see.stanford.edu/see/courses.aspx

For teaching CS programming, the Introduction to CS courses mentioned above can be a fantastic boon to AICTE/UGC governed university CS departments. They can base their introductory programming courses on the above and can even advertise that these courses are based on world-famous Stanford University CS dept. courses. As educators are free to adapt and redistribute the material (for non-commercial use) CS department teachers can tweak the material as per their needs. Ideally, of course, they should offer their tweaked material back to the Internet community under an appropriate Creative Commons license.

The challenges may be that the teachers are not well versed in programming to understand these Stanford courses. I mean, the teachers will need to understand it to be able to help students with their doubts. If that is the case, AICTE/UGC CS/IT policy makers should create policies encouraging software industry experts knowledgeable in these areas to step in as teachers for these courses. And AICTE/UGC CS/IT policies should reward teachers who master such programming knowledge as against rewarding only those teachers who publish research papers.

The other challenge may be lack of time for students to finish all the assignments and perform well at the exams. If so, then the cause may be that the CS curriculum is skewed towards theory with little importance being given to practical work. A solution will be to remove some theory courses so that students have enough time to complete the Stanford CS programming courses. If they are not willing to do that then students will continue to suffer with an overload of theory knowledge but weak programming skills.

MIT's Open Courseware has 2000 courses!! Its CS & EE dept. courses available for everybody seems to be in the range of a hundred! See: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/. But its programming courses seem to aimed at elite students. It seems they, like the elite IITs in India, treat programming in a generic way not focusing on any particular programming language. Here are the lecture titles for its "Introduction to Computer Science & Programming" course: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-00-introduction-to-computer-science-and-programming-fall-2008/video-lectures/. As a kind-of special case they have what seems to be short-term programming courses like this one on C++: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-096-introduction-to-c-january-iap-2011/

NPTEL in India has free courses in CSE (Computer Science & Engineering) from IITs mainly, here: http://nptel.iitm.ac.in/courses.php?disciplineId=106. I feel it has the same elitist approach that MIT's Open Courseware has. The "Introduction to Problem Solving & Programming" course(s) do not seem to be based on a particular programming language.

I think IITs & MIT can afford to have the elitist approach. But most CS departments in AICTE/UGC governed universities/colleges in India simply cannot take such an elitist approach. For them the Stanford Engineering Everywhere courses seem to be a fantastic boon. I know I am repeating it, but I think it is worth repeating :).

Monday, October 10, 2011

Steve Jobs: The iPhone Introduction (2007)

Post Last Updated On 23rd October 2011
Steve Jobs' 2007 iPhone introduction videos (partial):
Part1
Part2

The youtube video links above mention that the videos belong to Apple, Inc. Therefore the Steve Jobs quotes/partial transcripts of the videos that I have given below also belong to Apple, Inc.

The iPhone was a revolutionary product (commercially), and today smart phones have become very significant multi-purpose computing devices. Prior to the iPhone I don't think people felt that you could really write general purpose apps for the smart phone. iPhone & AppStore changed all that. Now Android is a craze, and even for my "Service to Society" IT software I may end up writing a few Android apps. which may run on an Android tablet or smart phone. Perhaps Android owes its current craze/success to Steve Jobs proving with iPhone that smart phones can run general purpose apps. So I wanted to study this 2007 iPhone introduction video in depth and share some comments on it.

I think it really exemplifies Steve's marriage of creative vision & drive to create experientially beautiful consumer electronic products with hard business reality understanding. Perhaps he had realized during his days of exile from Apple that his special talents would be a runaway winner in the "consumer" products like portable music players and phones market as against the "enterprise" products like desktop/personal computers market. The Mac is certainly not a 'loser' but cannot be called, by any stretch of imagination, a runaway winner in the desktop/personal computer space.

Some quotes from Steve Jobs' iPhone introduction:

"Every once in a while a revolutionary product come along that changes everything.
...
In 1984 we introduced the Macintosh. It didn't just change Apple. It changed the whole computer industry."

Eklavya Sai: Now Apple was not the first company to use a mouse and the GUI for a computer - Xerox Palo Alto Research Centre (PARC) developed the first computer that demonstrated the GUI in 1973; mouse was created by somebody else even earlier: http://en.wikipedia.org/wiki/History_of_the_graphical_user_interface. But Apple's Macintosh, inspired by Steve Jobs' acumen for commercialising beautiful computing ideas, was the first commercially successful product to use the GUI. To get a feel of Steve's willingness to take on the big guns, see the famous Ad. introducing the Macintosh: http://www.youtube.com/watch?v=OYecfV3ubP8. Steve was taking on Big Blue (IBM) and the Ad. likened their dull & drab console based UI to Big Brother of George Orwell's "1984" fame. Fantastic theme but it apparently ran into copyright issues with George Orwell's estate. See: http://en.wikipedia.org/wiki/1984_%28advertisement%29. 1

But did Macintosh change the whole computer industry (by itself - implied)? I don't think so. In fact, I feel it is quite an exaggeration. But its successful commercialization perhaps made Microsoft start going the GUI way. With Microsoft Windows 3.0 in 1990, GUI exploded into cheap PCs that reached even small companies in India. I know from experience as my first exposure to GUI was with a project related to X-Windows in the late 80's. But that was on expensive Sun Workstations & Apollo workstations running Unix. Microsoft Windows ran on cheap Intel PCs and this affordable WINTEL combo was a massive game-changer in the desktop computing space. When I moved into a startup company in SEEPZ, Mumbai in 1990, we were able to buy cheap WINTEL PCs and have Microsoft Windows as well as SCO-Unix with X-Windows/Motif running on them. We started two GUI application software projects, one on Microsoft Windows and another on X-Windows/Motif in 1990 itself. But Macintosh was limited to desktop publishing kind of market in India and not really seen in software development consultancy companies. BTW I have not yet worked on a Macintosh.

So Apple did not invent the GUI and the mouse. They just were the first successful commercialisers of it with the Macintosh. But Macintosh was not able to really take over the desktop market with their GUI. That was done by Microsoft Windows & Intel. BTW Apple sued Microsoft over Windows but did not win - it seemed to have got settled out-of-court eventually.

I guess this exaggerated line just shows what a good showman and Ad-savvy guy Steve was.

"In 2001 we introduced the first iPod and it didn't just change the way we all listened to music, it changed the entire music industry."
Eklavya Sai: I think his claim about changing how "we all listened to music", especially in the affluent West, must be quite true barring minor exceptions, of course. I think iPod really was a music listening device, music library software & music purchasing software game-changer. While it would have had a very significant impact on the music industry - Steve pushed through hard business deals with music industry bigwigs - I don't know about changing "the entire music industry". From a music consumer point of view, I think iPod was truly a revolutionary game-changer. Even though mp3 players had been around for some time prior to the iPod, the click-wheel UI & software of the iPod just blew them away. http://en.wikipedia.org/wiki/Portable_media_player states that over 300 million iPods have been sold. Over time the musicphones took over this space (minus iTunes lock-in) with the same wiki page stating that in 2007 the installed base of music phones passed 1 billion!! And so the iPhone had to come.

"An iPod, a phone and an internet communication device... These are not three separate devices. This is one device. And we are calling it iPhone."
Eklavya Sai: This part does not seem to be so revolutionary, by itself. I mean, a lot of the smart phones already had music player, phone + internet. But his showmanship is great and the adulatory fans really lap it up.

"Business school 101 graph - smart axis & easy to use axis ... leap-frog product way smarter than any mobile device has ever been and super easy to use. This is what iPhone is. So we are going to reinvent the phone."
Eklavya Sai: I think he is SPOT ON here. Way smarter and super easy to use - No exaggeration here whatsoever, IMHO.

"Revolutionary UI ... interplay of hardware and software ... (popular smartphone models then) ... What's wrong with their user interface. Well, the problem with them is really sort-of in the bottom 40 there .. they all have these keyboards that are there whether you need them or not ... and they have all these control buttons that are the same, that are fixed in plastic for every application ... Every application needs ... a slightly optimized set of buttons just for it.... It doesn't work because the buttons and the controls can't change."
Eklavya Sai: SPOT ON analysis, put so simply! [Update: A friend contested the "Revolutionary UI" term strongly. Touch interfaces were around prior to the iPhone. I feel the whole package - multi-touch, better touch technology and so no stylus, fantastic software, fast, sleek & light - can be termed 'revolutionary UI' especially at a commercial product level. Maybe something similar existed previously in niche markets and R&D labs. - but the world at large did not seem to know of it.]

"What we are going to do is get rid of all these buttons and get a giant screen.... Who wants a stylus? You have to get'em and put them away. Yuck!! Nobody wants a stylus."
Eklavya Sai: Could he understand people's needs & problems with using technology or what!! I think part of his genius lay here.

"(Touch screen) - Works like magic - Far more accurate - Ignores unintended touches - multi-finger gestures - and boy, have we Patented it!"
Eklavya Sai: Apple's hardware genius seems to have really delivered the goods here. Maybe they had some great touch screen technology supplier who was driven by Apple specs./design. I am not knowledgeable about touch screens, but I get the impression that prior to the iPhone the touch screen technology for mobile phones was not so great. I mean, I had seen guys tap around with their stylus but I had not seen anybody use his finger to operate the mobile phone touch screen.

"Software - iPhone runs OS X. -- Multi-tasking - networking - power management - awesome security - And to write apps - cocoa - graphics - animation - audio & video ... built right into iPhone ... and that has let us create desktop class applications & networking ... not the crippled stuff that you find on most phones - one of the pioneers of our industry, Alan Kay, has a lot of great quotes throughout the years and I ran across one of them recently that explains how we look at this ... cause we love software and here is the quote, "People who are really serious about software should make their own hardware." Now, Alan said this thirty years ago. and this is how we feel about it and so we are bringing breakthrough software to the mobile device for the first time and its five years ahead of anything on any other phone."
Eklavya Sai: Steve clearly knew the value of software. Perhaps it was the decision to use "breakthrough software" meaning a very powerful OS X on the iPhone, which perhaps was truly years ahead of the competition that made the mind-boggling and absolutely fascinating variety of iPhone Apps possible. That seems to have been the key winner for iPhone. I mean, an iPhone or an iPod Touch without its Apps. would be as ordinary as a WINTEL PC without its Apps. 2

Being a Silicon Valley guy, Steve could create the hardware for the breakthrough software to run. I think in the consumer device space this hw+sw combo seems to be an outright winner. But not in the mainstream enterprise computing space where proprietary hw+sw coupling led to the demise of many erstwhile computer giants. BTW Alan Kay was associated with Xerox PARC GUI: http://en.wikipedia.org/wiki/Alan_Kay.

"Design - something wonderful for your hand - on the front only one button down there we call it the home button, takes you home from wherever you are - that's it."
Eklavya Sai: [Update: Watered down my original comment.] IMHO, a stroke of UI Genius. I mean, there was room for buttons on either side of the Home button. But they did not succumb to putting buttons there - they let the bitmapped screen buttons provide the other buttons besides Home. Fantastic clarity of design perspective. Makes it so simple for the users. If you land up somewhere weird in the App. just press the single bottom-centred Home button to get home - the safe, known space.

"... thinner than any smart phone out there"
Eklavya Sai: Hardware engineering genius of Apple. Steve was famous for insisting on elegant hardware no matter what.

"We have also got some stuff you can't see. We have got three really advanced sensors built into this phone ... proximity sensor ... when you bring iPhone upto your ear to take a phone call it turns off the display and it turns off the touch sensor instantly. Why do you want to do that? One to save the battery. Two, so that you don't get spurious input from your face into the touch screen. Just automatically turns it off, take (it) away and boom it is back on ... ambient light sensor ... accelerometer ... so you can tell when you switch from portrait to landscape; it's pretty cool."
Eklavya Sai: Perhaps proximity sensors in touch phones may have been old hat as other touch phones would have had the same issues as what Steve mentioned above. But the way he explains it is so dramatic and cool. Regarding accelerometer I recall that when I got my ipod Touch I was quite fascinated by the portrait to landscape switch as I rotated the device. I had never experienced that in any device earlier. So it was real cool. I think this relatively minor aspect of the iPhone must have appealed to a lot of people.

Eklavya Sai: The introduction goes on, beyond the two youtube videos given at the top, but I feel I can stop the analysis here. I would just like to add that another vital aspect of Steve Jobs' genius was his ability to drive innovative business deals with business partners like telephone carriers, music industry, etc. For techies, such skills are usually poor - somehow he could understand business tycoons of other fields and make them business offers they could not turn down :)

Notes
  1. As I started my software career in 1984 :), I can completely empathise with the theme of the Ad. I worked on Wang VS Computer line which was compatible with the IBM 360. Wang VS was introduced around the same time as DEC's VAX. Wang VS computers were referred to as mini-computers and targetted the mid-sized systems market where IBM was not completely dominant. In the mainframe sector (more powerful than mid-sized computers) it was IBM all the way. Absolute Dominance. It is difficult for today's techies to imagine the complete sway of IBM then in the business computing space. No wonder the Ad. had the Mac. taking on THE Big Brother. And here is some info. about Wang Labs. including a photo of its HQ where I had worked for 2 assignment stints totaling over one and a half years in late 80s: http://en.wikipedia.org/wiki/Wang_Laboratories.
  2. I possess an iPod Touch, but I don't own an iPhone. Instead I have a Nokia E-52 with the plastic keyboard :). But then I do not use my mobile phone much.

Saturday, October 8, 2011

CS & IT Academia: A Bureaucratic POWER structure

The POWER structure in CS & IT Academia is very different from the POWER structure in international software consultancy companies.

Academia has an essentially bureaucratic power structure. I think that must be flowing down from the Union Ministry of Human Resources & Development as they are the ultimate power centre for academia. They give out the Grant money that flows down to universities and they control government recognition via AICTE/UGC (& status/reputation via NAAC).

For an academician, the HOD is the KEY POWER CENTRE. Massive amount of power is concentrated in him/her. Of course, academia gives a lot of room for academicians to explore their varied interests. And most HODs having come from the academic setup do give that freedom to members working under them. But if, for some reason, one gets into a direct conflict with the HOD, life can become very tough. You have to either get an amicable resolution to your conflict with the HOD OR you have to quit and join CS department of another college/university! I mean, if one were a PhD in CS, one cannot shift from a CS department to Physics or Management, for a paid academician post (Free Service is different as there may be some common/related courses). And to join CS department of another university, there has to be a vacancy there! Universities & colleges are far fewer than software companies! And the university/college with a vacancy could be in a different city/region and so, if you were married with children, the whole family will have to consider moving to another place!

So most academicians are very reluctant to CROSS PATHS with the HOD. If the HOD blocks something, it stays blocked. Efforts in the department which do not have the blessing of the HOD will typically wither away and die.

There is no HR manager to go to for listing out your litany of woes, who, if you are a good performer, will do his utmost to resolve the problem. That is a key function of the HR manager in industry - the company does not want to lose good people to the competition. In academia, you can find some Sympathetic Listener (Agony Aunt type) and unburden yourself - that is the nice thing about academia - generally the teachers are nice people, so they will listen to you and give you some peaceful and gentle advise - and wish you well. But they cannot change the system - you should not have a serious conflict with the HOD - if you do, you will suffer. Fact of Academic Life. Period.

In tremendous contrast, the software industry is really cool on that front. If you are good and you get fed up with one manager, you look around and shift to another group in the same company (using HR manager's services at times) or get another job. Jobs are no problem for good guys - yes, the pay may differ here and there and working environment may be different. But at least you can get another job and earn enough to run your household. And in the same city, or same suburb or even same building - no kidding - I was working with a company on the 3rd floor of a building in SEEPZ, Mumbai, the original "IT park" of India - moved out of SEEPZ to try freelance training instructor work - came back after a few months to SEEPZ by joining a company on the 2nd floor of the same building as a 'consultant'! (For more on SEEPZ see footnotes).

So if you are an industry guy and if you have a rosy, rosy picture of academia and have visions of, at some point in your life, sharing your knowledge with young students in academia and, perhaps, becoming a respected & revered CS/IT Professor, be aware that there are many thorns too. I am not saying that CS/IT Academia is all bad - no, not at all - One of the great joys of being in Academia is the joy of imparting knowledge to eager, and many times, grateful young students. That is a very satisfying experience - Industry may not be able to provide much opportunities for such kind of joy. The fellow teachers are also usually a very nice & friendly lot. There is a lot of respect from society, too. And one works in a far more relaxed environment as compared to the typical industry environment. But academia certainly has its bureaucratic power structure and you have to fit into that very-different-from-software-industry power structure.


Notes:

Here are a couple of links on SEEPZ, Mumbai: http://en.wikipedia.org/wiki/SEEPZ, http://www.seepz.gov.in/ - For most of my software industry career, from 1984 to 2002, I was based in SEEPZ - 4 different companies but all in SEEPZ. During the initial years of the software export boom, SEEPZ, Mumbai was where a lot of the ACTION was happening.

A wiki page states:

India's IT Services industry was born in Mumbai in 1967 with the establishment of Tata Group in partnership with Burroughs. The first software export zone SEEPZ was set up here way back in 1973, the old avatar of the modern day IT park. More than 80 percent of the country's software exports happened out of SEEPZ, Mumbai in 80s. Source: http://en.wikipedia.org/wiki/Information_technology_in_India