I’ve seen (and participated in) a number of discussions recently about the selection of a first programming language. I don’t think the choice is a trivial matter, and don’t necessarily think there’s a single right answer, depending on the overall goals of a curriculum. Here are some choice strategies I’ve seen discussed recently:
- Commercially-popular language
Pros:- students see a connection to the job market,
- prospective employers may like it,
- students may have had prior exposure (especially non-traditional students), and
- a wealth of related materials (books, web pages, etc.) is available.
Cons (especially if the curriculum doesn’t provide multi-language experience):
- risks biasing the student’s perception of programming,
- risks putting the student into the “knowledge half-life” problem, and
- risks the nasty choice, as language trends change, between churn in the curriculum or becoming less “relevant”.
- Academically-popular research language
Pros:- professors and grad students may like it, and
- some of these languages explore ideas that may be important by the time the students graduate.
Cons:
- similar to the “cons” list above(no pun intended!).
- Teaching-oriented language (remember Pascal?)
Pros:- resources (e.g. books such as Structure and Interpretation of Computer Programs – 2nd Edition (MIT Electrical Engineering and Computer Science)
or How to Design Programs: An Introduction to Programming and Computing
, and mature implementations),
- intended for teaching concepts (i.e. language/notation features), and
- often has good infrastructure (i.e. debuggers, class browsers, visualization, etc.).
Cons:
- can risk separation of “theory” and “practice”,
- teaching-oriented aspects may shield students from the “pain” of production programming, and
- prospective employers may strongly prefer “practical” language experience.
- resources (e.g. books such as Structure and Interpretation of Computer Programs – 2nd Edition (MIT Electrical Engineering and Computer Science)
Following the line of thinking from the previous post, I believe that a language can serve as a bride from one style of thinking and problem solving to another, if it is properly designed for that purpose. Going further, the book Concepts, Techniques, and Models of Computer Programming makes use of a multi-paradigm approach in which a kernel language is extended in various ways to expose the student/reader to a variety of styles of programming. I’m currently focusing my spare time on Scala, but I’m intrigued by Van Roy and Haridi’s use of Oz to explore the style “spokes” out from a simple “hub” of basic computation concepts.
Maybe I can get back to Mozart/Oz after I’ve mastered Scala. Of course, I’d have to make friends with emacs…
Comments
It makes sense to list “Students may have had prior exposure” as a pro, but I would argue it’s a con as well. If some students already know the language they’re put on an unequal footing with each other, which is a problem in intro courses, and also the students may have developed bad habits in that language that are hard to unlearn.
@Seth: I would go even further and say that there are a large number of issues I left out of the discussion. I was trying to focus narrowly on language issues, to the exclusion of classroom management, curriculum flow/refactoring, student diversity, vendor sponsorship, etc. Although we sometimes say, “All else being equal…” we know that in the real world it never is.
You know you want to be friends with emacs. (= In related news, did you know that there is an add-in for visual studio to make it act like vi?
You know you want to do emacs! (=
http://lifehacker.com/375789/best-first-programming-language-to-learn
@Erin: As they say, “Emacs is a fine operating system. but I prefer Unix/Linux!”
And thanks for the LifeHacker post! The comments were all over the map, as I’m beginning to think they should be. You’ve prompted me to think a little about my own experience in learning new languages, which I’ll post about shortly.