An anonymous user wrote on January 12th, 2006 at 05:14 am |
Haskell or Python
I think it is great to start with a functional language. I think there is a lot of misperception about them out there -- a lot of veterans of non-functional languages think functional languages are "hard" just because they are "different".
I personally believe that functional languages come the closest to being intuitive that we have. It's easy for us humans to "think" in the terms that a functional language does. Sometimes difficult for imperative programmers, because they have to unlearn all the rigors they've been going through, but a new programmer won't have that problem.
Haskell has been particularly intriguing to me of late, with its very nice syntax, type inference, etc. I think its syntax would be more welcoming to a young programmer than Lisp or Scheme. It can also be compiled or interpreted, which is nice for experimentation.
Haskell even goes a step farther with laziness. I really cool feature to me, but perhaps you could explain it as, "You teach the computer how to do things, and what things mean, and then whenever it needs that knowledge, it'll remember."
For a non-FP language, I think Python is a good way to go. While Python is OO, and does have features that are neither clean nor simple, none of that has to become apparent right away. You can write very useful tools in Python without ever learning about OOP, and most of the rest without knowing much about OOP. If you say that "." means "do something to", that will get you most things.
Like FP, I don't think that OOP is fundamentally more difficult than non-OOP paradigms. *If OOP is done right*, then it stays out of your way until you need it. Java and C++ don't do it right, IMHO.
Unlike, say, Java, with Python, things that should be easy are, and don't require much complexity to accomplish.
I would never suggest Perl or Java for newbies of any sort. Perl has so many special cases that it would just be overwhelming for a newbie. And Java makes even the most simple tasks complicated. (Try to figure out how you read a line of input from the keyboard and you'll see what I mean.)
Finally, while you're teaching them about programming, make sure you teach them about how computers work. What does an operating system do, why do you run Linux, how do networks work, how do disks work, etc. Wouldn't hurt to talk a bit about free software philosophy either (why is Linux free)
Bottom line, though: I think your idea of using Scheme is excellent. I'm just pleased you weren't gravitating towards Basic or Java ;-)
-- John Goerzen
(
Read Comments)