Thoughts about this Course and How to Learn Programming

Introduction to Computer Science

This is the first time I've taught computer programming as a course. As such, I'm less certain than usual how the class will go. For the course to be a success, honest feedback will be especially important. Here are some initial general thoughts about how to go about learning programming and some specific thoughts about the course.
  1. The only way to learn programming is to do it. A lot. I suppose that this is true about learning just about anything. But it seems somehow more true for programming than some other areas.
  2. I have never taken a programming class. I learned C++ mostly on my own, but had help from some friends and colleagues who are very good programmers. I do not consider myself to be an expert programmer, although I am certainly not a beginner, either.
  3. I will use class time to explain general concepts and some particularly tricky or subtle aspects of coding. I will follow the textbook fairly closely. However, my aim will be to complement the text and not duplicate it. It will be essential for you to spend a fair amount of time thoughtfully reading the book. I think the book is well written and is almost always quite clear. There are definitely some sections that you can skim, but I suspect that you'll want to read most of it.
  4. This class likely will be a lot of work at time. It is difficult to estimate how long it will take you to complete a programming exercise. This is the nature of programming. Sometimes a program compiles on the first try. Other times it may take days. Learning to struggle and cope with this is part of the course.
  5. Particularly at first, you won't understand everything. I think the best thing to do is to blast ahead anyway. When learning a spoken language, it is inevitable that you'll have to use grammatical constructions that at first you don't understand. Only after you've learned quite a few things does the logic of the language come into view. I think learning a programming language is similar. Don't feel like you have to be perfectly comfortable with one chapter before going on to the next.
  6. If you're not keen on C++, don't worry. Once you know one language it is relatively easy to pick up an additional language. (Learning to program isn't the same thing as learning a particular language.)
  7. Some of the programming exercises might be a little tedious. It will be a while before you'll be able to code up anything really interesting or new. I don't think there is any way around this. However, by the end of the course you should be able to write your own, reasonably complex original programs. You should have a fairly large number of working programs that you can use as templates and starting points for other programs that you might want to write in the future.
  8. I hope after this class many of you will use programming as part of your academic or non-academic work.
  9. Programming is an art as much as a science. Effective programming involves creativity and originality; it is not simply a technical skill.
  10. Programming is also a "state of mind." To program effectively requires patience, focus, and motivation. This state of mind has been likened to that which is gained in practicing certain sorts of martial arts.

Others' thoughts

Here are some essays on how to learn programming, how to learn to be a hacker, and generally how to learn. I don't agree with all recommendations, but these make quite interesting reading.
  1. Undergraduation by Paul Graham. I think this is an excellent essay. Highly recommended.
  2. Teach yourself programming in ten years by Peter Norvig, director of research at Google.
  3. How to become a hacker, by Eric Raymond.
  4. How to be a programmer by Robert L. Read.
  5. Advice for computer science college students by Joel Spolsky