Retiring Python as a Teaching Language
When I took an introduction to Computer Science in college, it was taught in Racket. Over winter break, I then learned Python, and I was baffled -- why would any curriculum <i>not</i> start with Python? Python was easy, expressive, and allowed the user to get lots done with little effort. It was great at motivating programming by showing its use and power. It seemed like an ideal introductory language.<p>Over the last few years, however, I've back-tracked on this opinion: if you really intend to <i>teach</i>, not just <i>motivate</i>, then Python is a poor choice. A language like Racket is great for teaching because it lends itself to exploring so many core concepts: complexity of algorithms, functional programming techniques, recursion, data structures, etc.<p>A language like C (the next course I was to take in the introductory sequence) is also an excellent language because it forces the user to understand programming at the systems-level.<p>I don't really think Python is very good for illustrating either the theoretical or the systems-level CS concepts. It's a nice language for motivating programming and showing off how much you can do with little serious investment, but it doesn't really motivate learning Computer Science, i.e. learning Programming on a 'deeper' level.<p>Thus, I don't really think that learning Python offers solid programming <i>foundations</i>. Consequently, if you really aim to teach, not just to motivate, then use languages that bring the student closer to core CS concepts.