In the 1970s I worked for a few years as a computer programmer, writing applications in the now obsolete COBOL language on an IBM mainframe that had a whopping one megabyte of memory. It was clearly the stone age of computing. I was curious about what the state of programming has become in the intervening years, so I recently dipped into three attractive online courses. The first two are traditional introductory courses that teach computer fundamentals through exposure to one programming language. The third course is a whirlwind tour of computer science, covering multiple languages and topics.
Introduction to Computer Science | Programming Methodology (website, iTunes, YouTube) Mehran Sahami, Stanford University.
Mehran Sahami is the kind of teacher we all wish we’d had in school: enthusiastic, funny and clearly in love with his subject. He has a bag of candy on his desk to reward students who ask good questions, and it seems like all the questions are good. The course focuses on programing fundamentals using the Java language, and it starts out gently using a programmable online robot named Karel. Each lecture is also available in transcript, which is a big plus for non-native English speakers. The website has links to the free software you’ll need to do the homework, and if you want to really learn the material, you’ll have to do the problem sets. The website also has solutions to some of the problems, so you can compare your work with actual programs that work. All in all, you get 28 class sessions that set you up for the sequels, Programming Abstractions and Programming Paradigms. But unlike the two other offerings below, there is no online support group for when you (inevitably) get stuck.
Introduction to Computer Science and Programming (website, iTunes) Eric Grimson, John Guttag, Massachusetts Institute of Technology.
This course focuses on programing fundamentals using the Python language, a modern open source language often used in web development. Grimson starts out the course with an interesting overview of computing philosophy and theory before plunging into how to program in Python. The website has links to a free textbook on Python and to the free software you’ll need to do the problem sets, and to a very helpful and active study group website where your fellow students can answer questions.
Introduction to Computer Science I (website, iTunes) David Malan, Harvard University.
With his leading-man good looks and flamboyant style, it’s easy to see why David Malan’s Harvard courses are so popular. He starts out this course by getting a student to rip a phonebook in half to illustrate the power of computer algorithms. His videos are a lot of fun to watch, but they’re only the beginning of the educational journey. You get links to the software you’ll need to do the projects, as well as detailed problem set specifications. The website also includes videos of section meetings where a grad student delves deeper into programming nitty gritty, and videos of problem set “walkthroughs” that help you get started on each problem set. Other helpful materials include lecture transcripts and detailed lecture notes.
The course starts out with the fun and easy Scratch programming environment, where you learn programming fundamentals like loops and conditions. But all too soon you switch to the hard-core C language where you have to cope with a compiler and arcane programming syntax. Fortunately there is a very active and helpful CS50 Google Group of other course participants that can help you over the tough spots. Unlike the other 2 courses, Malan’s course ventures into other topics besides programming, including cryptography, and web site creation.