Thursday, December 11, 2008

Which Programming Paradigm

Once again this age old question comes up on Slashdot with a focus on the question of which paradigm should be learned, imperative, OOP, or functional.  The usual discussions of various languages ensues.

There was also this discussion of programming languages (“for Linux”).

Here's a book!  In one of the posts, this book (which is said to be used for the introductory programming class at MIT) is linked to:   Structure and Interpretation of Computer Programs by Albelson, Sussman and Sussman, MIT Press, 1996.  The entire text is on-line.

My Humble Opinion

Oh, you want to know what I think?

I think the order should be:
  1. Imperative language
  2. OOP
  3. I'm not even sure about functional yet, but it should probably be learned at some point.

I would add the principles of structured programming into the process of learning procedural programming using the imperative language.

What language do I currently think should be taught as a first programming language?

What order did I learn in?

Please note this caveat:  I'm not suggesting this as an order that should be followed now.  The years over which I learned these languages span from the mid 1970s to the present and this order is strongly linked to the history of the development of programming and languages.

Focusing on mainly the languages that mattered somehow, and skipping those that I dabbled in some.
  2. BASIC (almost immediately after)
  3. Pascal (structured programming)
  4. Modula-2  (modules!)
  5. C   (and the world of UNIX)
  6. Objective-C  (my first OOPL)
  7. Perl   (more real work than in any other language)
  8. Smalltalk (OO purity)
  9. Python  (The same slot as Perl)

I learned BASIC on the CDC Cyber mainframe computer and in later years used it on micro computers.  (Remember when they were called micro computers?  Hah.  I wonder when that term went out of use?  Probably around the time the so-called micros became more powerful than the mainframes&hellip).

What about LISP?  Well, I learned it around the same time that I learned Pascal, but never did a whole that was useful with it.