Introductory Computer Programming Education
May 2007 (perspective of a Ph.D. student)
This article presents my opinions on some problems with how computer programming is currently taught and what types of courses I feel are good for teaching programming to advanced high school and early college students. This is not a proposal for a complete undergraduate Computer Science curriculum, only for introductory courses that teach programming and some rudimentary Computer Science concepts.
I'm not an education expert by any means; these opinions are just drawn from my own personal learning and programming experiences.
Problems with how computer programming is currently being taught
My proposed introductory computer programming curriculum
Here are the courses that I would teach in an introductory programming curriculum; hopefully these courses can eliminate some of the problems I've described in the previous section.
Programming languages to never teach to beginners
Several other technical bloggers have written about the topic of what to teach students in an introductory programming curriculum, and there are many varied viewpoints.
A reputable hacker, Eric S. Raymond, shares my views on the Python -> Java -> C order of teaching programming to beginners, as described in a section of How To Become A Hacker.
Lots of high school and college educators now favor an all-Java curriculum (the high school AP Computer Science curriculum moved from C++ to Java a few years ago). In contrast, Joel Spolsky is 'old school' and favors the Back to Basics approach of starting low-level with C and then progressing to more theoretical Computer Science concepts with Scheme. Although I support teaching both C and Scheme, I think that they should come only after teaching so-called 'easier' languages such as Python and Java, because my #1 priority is to get students to be motivated to write interesting and useful programs, not to have them struggle to understand the intricate arcane details of pointers (taught using C) or recursion (taught using Scheme).
Thanks to Robert Ikeda for his input into this topic and for listening to my rants late one evening when I should have been working on research.