Language(s) for teaching programming

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:

    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.

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

About these ads
Trackbacks are closed, but you can post a comment.

Comments

  • Seth Tisue  On 2008-03-22 at 11:33

    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.

  • joelneely  On 2008-03-22 at 20:28

    @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.

  • Erin Stanfill  On 2008-04-03 at 18:24

    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?

  • Erin Stanfill  On 2008-04-03 at 20:29

    You know you want to do emacs! (=

    http://lifehacker.com/375789/best-first-programming-language-to-learn

  • joelneely  On 2008-04-04 at 07:21

    @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.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: