[PLUG] Teaching My Son To Program

Phil Tomson ptkwt at aracnet.com
Thu Sep 25 12:49:02 UTC 2003


On Thu, 25 Sep 2003, Kyle Hayes wrote:

> On Thursday 25 September 2003 10:15, Wil Cooley wrote:
> 
> I think Smalltalk is a great language to learn for a very important reason:
> 
> It was designed for children initially.
> 
> - OO is in the core.  This leads to an extremely simple syntax and ease of 
> understanding.    Everything is an object.  Even the virtual machine is 
> exposed as is GC, the memory subsystem etc.  
> 
> - Children were regularly exposed to it and taught to use it to see how well 
> and how fast they could learn it.  Various things in the language were 
> changed based on these experiments.  This is not to say that Smalltalk is a 
> toy language, just that it is really easy to grasp and learn and has been 
> designed to be so.
> 
> - Anthropomorphic projection is one of the key aspects of the way children 
> think (and most adults).  We all tend to assume that everything around us has 
> desires and feelings.  "My car didn't want to start this morning."  With a 
> pure OO language, this natural psychological tendancy fits the system very 
> well.
> 
> Smalltalk is one of the many things that came out of the Dynabook project(s) 
> that Alan Kay has been working on in various ways for decades.  Squeak is 
> what Kay and some of the other Smalltalk core people have been working on for 
> a while.
> 
> That said, once you've used a good Smalltalk, programming in other languages 
> seems cumbersome and frustrating, at best.  Of the languages I've looked at 
> so far, only Ruby comes fairly close to Smalltalk (and it may be better than 
> Smalltalk for just hacking together something that works).
> 
> So teaching your child Smalltalk may result in a precocious programmer, but 
> also in one who detests C/C++/Java/Perl/C#/Python... :-)  I've known long 
> time Smalltalk programmers who see little difference between programming in C 
> and programming in assembly.  "Why would I focus on moving bits when I can 
> focus on solving the problem?"  I'd assume that long time Lisp programmers 
> feel much the same way.

Yes, this is the risk: By teaching him SmallTalk first, he might be put 
off by any of the industrially popular languages  He encounters later.  I 
say this half in jest, but only half ;-)  On the otherhand, you may not 
want him to grow up to be a programmer anyway given the current and future 
instability of that profession.  But even if he doesn't end up being a 
programmer by profession, it's still good to know how to program. 


> 
> Scheme is also a good learning language, but it might be a bit more abstract 
> to deal with.
> 
> As I said above, Ruby seems something like the slightly odd offspring of Perl 
> and Smalltalk.  Everything is an object, but it has a fairly rich syntax.  It 
> has objects, classes, methods, regex syntax, closures, yadda yadda yadda.  If 
> anything, it's problem is that, like Perl, it is pretty rich.  It is also 
> fairly young and doesn't have the cohesive and consistent libraries found in 
> CPAN or Smalltalk. Personally, I like what I see a lot, but what I see is 
> mostly potential at this point.

Well, I would contend that Ruby's builtin libraries are very cohesive and 
consistent and for me that's part of the draw.  Now if you're talking 
about things like web progamming libraries, yes, there are lots of 
libraries and the community has not yet settled on which are the 'winners'
For some that might be a bit frustrating, but it also means that there is 
great opportunity to create soemthing that will become the next 
(useful|popular|elegant) web programming library.

I recall seeing a presentation at RubyConf2002 where a console app for 
making train reservations was converted to a web app by only changing two 
lines of code.  It even handled the back button correctly by making use of
continuations - very impressive.

> 
> I would definitely focus on the agile languages.  I'm old enough that I first 
> learned to program in C. I feel this constrained my programming thought 
> process to some extent.  I believe that, like natual languages, your thought 
> processes are somewhat colored by what you first learn.

Indeed.  Static typing only gets in the way when you're learning (and 
later on you learn that it only gets in the way period).  You're better 
off learning any of (Ruby|SmallTalk|Python) first instead of statically 
typed languages like (C|Java).

It's interesting that colleges and Univeristies have 'sold out' to 
commercial interests by teaching C,C# or Java as first languages.  Instead 
of trying to teach concepts first they're going for syntax first.  If you 
learn the concepts well, syntax is irrelevant; you can pick up any 
language

Phil





More information about the PLUG mailing list