Aug 07 2008
How to Think Like a Computer Scientist
I have become more and more convinced that trying to teach beginning programming using a production language like C++ or even Java is really just a horrible horrible mistake. I am just wrapping up teaching our Programming II course this summer. We use C++ for our intro courses (as do many other institutions), and continue on with it for the core courses of our undergraduate curriculum. My experience this summer has been the same as in the past. We spend so much time on the minutia of the syntactic complexities of the C++ language that there is no time for any of the big picture. And worse, many students just see this seemingly impenetrable mass of complexity and it often just stops them cold. C and C++ are powerful languages, and they must, in my opinion, be learned at some point as part of a complete CS education, but…
So I recently saw this free creative commons published book How to Think Like a Computer Scientist. What first brought it to my attention was that I saw MIT was actually using it as part of their intro to programming course, and it showed up on their most recent OCW course curriculum. Now I am a big fan of the Python programming language, as those around me will tell you, so I may have some bias. But seeing how it is being used and praised in all kinds of cutting-edge domains, like not only this MIT OCW course, but for example Google uses it heavily, and it is really beginning to take off among researchers and scientists in the scientific computing community, replacing Perl in many cases, I would venture to say that I am not the only one that sees the power and advantages of Python.
So, a) I really do need to renew my own effort to see if we can get our department to rethink some of its choices of the undergraduate curriculum; b) in the meantime, any undergraduates that might stumble upon this who are about to take or have just taken our intro programming courses, I would recommend that looking at this book might help you to get a better understanding of programming, and maybe see some of the big picture issues that we might not get to you clearly in the current courses, and c) the book also works great as just a Python tutorial. I have been recommending this book as well to my graduate students who will be taking my AI: Collective Intelligence course this fall, as a good tutorial for learning the Python language.