One of my motivations for wanting to learn Ruby (or relearn Smalltalk) was for my kids.
In my household, my wife owns the liberal arts upbringing of the kids (she's ABD in English Lit), and I own the math and logic upbringing (my BA was in math and my first pass at grad school was in math before I decided to "go commercial" and do this CS thing).
I have no intention of having any of my kids grow up to program for a living - this is just about making them more complete human beings. To that end, I want my kids to have sound intuition on things like logic, predicates, sets, and functions, including how they manifest in computers.
So, back to the question of which language to teach my kids.
Here's where my head is at this weekend.
Lisp
Pro: Minimum of syntactic mechanism.
Pro: I know it and feel comfortable with it.
Pro: Good synergy with what their daddy does for a living (remember the S-expr/XML relationship).
Pro: Instills the DIY ethic, which I'm a big believer in.
Con: I refuse to inflict Emacs on my kids, so I'm clueless as to what environment to use.
Con: Probably the least "practical" in terms of getting the kids to do stuff that might interest them. This may just be my limited imagination speaking.
ML
Pro: More structure than Lisp
Pro: I know it and feel comfortable with it.
Pro: I can use F# which fits nicely with my CLR-based home computing environment.
Con: Somewhat more syntax to get distract them from the semantics.
Smalltalk
Pro: Minimum of syntactic mechanism.
Pro: Good synergy with what their daddy does for a living (remember the messaging/SOAP relationship).
Pro: Instills the DIY ethic, which I'm a big believer in.
Pro: Doug Purdy works in Smalltalk and my kids love Doug.
Pro: The environment is obvious - Squeak.
Con: I'm super rusty - it's been 18 years since I've written a Smalltalk program.
Ruby
Pro: The environment is obvious - RIDE.
Pro: Of the four on this list, it's the language that has the most momentum and community growth.
Pro: Given that I haven't written any Ruby programs yet, there may be tons of amazing pros I don't know of yet.
Con: Given that I haven't written any Ruby programs yet, there may be tons of hideous cons I don't know of yet.
There are some conspicuous absences from this list. I don't care if any of my three kids ever grok the difference between an abstract class and an interface or between a pointer and a reference, so languages like C++, C#, Java, and VB.NET are out. Honestly, if the industry is still forcing programmers to ask these kinds of questions by the time the next generation of programmers comes to the table, I'll consider my generation to have really squandered an opportunity.
My plan is to learn Ruby and relearn Smalltalk to inform my decision. In the meantime, comments or flames (public or private) from the Peanut Gallery are most appreciated.
Posted
Feb 20 2005, 03:38 PM
by
don-box