January 13th, 2007


How To Teach Computer Science - The MIT Way!

If you want to build a ship, don't drum up people to collect wood and don't assign them tasks and work, but rather teach them to long for the endless immensity of the sea.

If you are a student at MIT, your first step into the world of CS/Electrical engineering would be via this amazing course which integrates programming (using Python), basic electrical engineering, robotics and control system theory - all in one paper! This course replaces (not completely) perhaps the most famous introductory course in CS ever designed, the legendary SICP. Read more about this syllabus change here.

Compare this with the way students are introduced to CS and programming in our country - I had to read an `introductory' CS book for +2 students in order to `teach' a cousin of mine - it's perhaps one of the dumbest books I have ever read - if you still like CS and programming after `studying' that book, then you really have a bright future! Page after page, the book simply tries to cram in some horrible C++ syntax without ever telling you how the stuff is going to be useful. Same is the case with our engineering syllabus where students are `taught' C programming as their introduction to CS. The point I wish to convey is this - we try our best to make our students hate programming and CS - and then lament the fact that we do not have enough people to contribute code to the free software world. We do have tens of thousands of people writing code for our Wipro's and Infy's - these people code only because they get paid to do it. But if we really want good free software written in our country, we have to build a generation of programmers who are excited by what they do - who, to quote Antoine de Saint-Exupery once again, long for the endless immensity of the sea.

Can we do something to change the situation? As a beginning, what we need is a really, really exciting introductory CS course where students are made to view programming as not just manipulating bits and bytes but as something which reaches out to the real, physical world and controls the way it works. Imagine the excitement a student feels when the first line of code he writes lights up an LED or moves a simple robotic vehicle .... It's difficult for us to reach out to the same heights as a MIT or a Stanford - but we do have the resources to do something similar. We have a programming language which is easy to teach - Python. We have an amazing project which tries to integrate computers with Science and Engineering, the Phoenix project. It's not too difficult to create a simple robotic vehicle which responds to commands from the PC delivered as RF signals. I already have a few students working on Phoenix, and I have got a few involved in building the robot. The major hurdle is in writing some course material which integrates all these - I will try my hand at this. The goal is to have something ready for school students by April so that we can conduct some classes during the summer vacation.