[plt-scheme] Scheme contradictions

From: mvanier (mvanier at cs.caltech.edu)
Date: Wed May 3 03:35:12 EDT 2006

A couple of other points on this often-discussed topic:

1) Scheme has historically been very fragmented, with multiple 
mutually-incompatible dialects.  In contrast, python, perl, ruby et. al. only 
have one dialect (and often only one implementation).  This causes a lot of 
confusion which repels people away from the language.

2) Lots of Schemes didn't really focus on practical getting-the-job-done kinds 
of issues, whereas obviously perl, python, ruby et. al. did and do.

I think PLT Scheme has done a good job addressing these issues (the former by 
simply providing a better Scheme implementation).  However, let's not forget

3) Many people take one look at Scheme's parentheses and prefix notation and run 
screaming the other way.

I don't think much can be done about this.  Scheme's syntax is a win in the 
sense that it makes macros possible (perl, python and ruby don't have macros). 
But if you've never heard of macros, you don't miss them, and all you see is a 
weird syntax that doesn't make sense to you.  And then, let's also not forget:

4) Many people are afraid of functional programming, because they never learned 
it in school and it seems weird.  Of course, Scheme doesn't force you to program 
functionally, but if all the code you see is written that way you at least have 
to understand FP.

All is not lost, though.  Ruby's pure-OO syntax is somewhat odder than python's 
hybrid imperative/OO syntax, which may mean that people are starting to get to 
the point where odd syntaxes don't totally terrify them.  Also, Ruby code blocks
tend to get used in a fairly functional-programming-ish manner.  Finally, Ruby's 
growth has largely been driven by its "killer app": Ruby on Rails.  Maybe we 
need Scheme on Rails...


Danny Yoo wrote:
>> Here now is the contradiction. A programming language called Scheme 
>> yet there seems little scheme as a term refering to a goal there. I 
>> look around and I see alot of people each with a different 
>> implimentation pretty much repeating the work of each other.
> Hi Glenn,
> But this is not a new problem.  One could also flip this on its head, 
> and say that Perl reinvents awk and sed, or Python reinvents Perl, or 
> Ruby reinvents Python and Perl.  I don't yet see what logical 
> "contradiction" you're refering to.  People like reinventing the wheel.
>> I see a language like Ruby created by one guy in Japan already 
>> eclipsing Scheme with 25 years head start.
> That's understating things.  Matz didn't write Ruby and all the support 
> libraries and frameworks by himself.  It's certainly not just one heroic 
> programmer working alone.
> You are comparing the popularity of languages, the mindshare that one 
> language has vs others.  There might be something to what you are 
> saying, though.  The Scheme language itself is simple enough for a 
> single programmer to reimplement.  (Perhaps not well, but one could do it.)
> But for someone to reimplement something like full Python or Ruby or 
> Perl, for example, it seems to require a tremendous team effort.  Look 
> at recent efforts at reimplementation, such as PyPy or Jython or JRuby: 
> it's not just solitary person working alone.  Perhaps people who by 
> necessity have to cooperate can eclipse a single person who is 
> coasting.  Perhaps a "Worse is Better" phenomena is going on.  I'm not 
> sure.
>> When it comes to learning the language it is very difficult outside of 
>> a classroom environment. There are SICP and HtDP but taken outside of 
>> a classroom setting they take a great deal of determination to get 
>> through.
> I totally agree with you here.  But there are a lot of worthwhile things 
> that require determination to learn.  Literacy is hard too; it's also 
> very difficult to learn how to read without the support of a community.
> Learning doesn't have to be in the classroom.  I think the key is to 
> foster communities of people who teach each other how to program, a-la a 
> writers' workshop approach.  We can look concretely at the tutoring 
> communities around Perl to see what those folks are doing.
>     http://learn.perl.org/
>     http://www.perlmonks.org/
> So perhaps the larger Scheme community might try to emulate that!  I 
> think that's what something like the Schematics Cookbook could lead 
> towards.
>     http://schemecookbook.org/
> But let's not say that all the other languages out there are inherently 
> easy to learn; that's a silliness perpetuated by book publishers who 
> love to use demeaning titles like "Programming for Utterly Hopeless 
> Morons". I do tutoring for Python, and I know that learning to program 
> well in Python --- in any language --- is a hard thing to do.
> You bring up Logo as an easy-to-learn language that deals with turtles. 
> You may be interested in "Computer Science, Logo Style":
>     http://www.cs.berkeley.edu/~bh/v1-toc2.html
> No turtles in sight.  There is actual intellectual content in Logo that 
> you may not be aware of, and that content is just as challenging to 
> master as in any other good language.  The point is that it may not be 
> the difficulty of the language you're fighting: it might actually be the 
> actual meaty (or gluteny, if you're vegetarian) concepts of programming.
>> Students will be able to walk away from the course with either an 
>> interactive website or a game instead of a series of fibonacci numbers.
> Hold.  Have you even looked at "How to Design Programs"?  Really read 
> though it: don't just look at the table of contents.
>     http://www.htdp.org/
> Take a critical look at it: don't just assume that all it talks about is 
> Fibonacci numbers, or that it even mentions them.  (In fact, I can't 
> even find Fibonacci numbers in the index, and my theory is that the 
> authors have anticipated your complaint and have deliberately omitted it 
> out of principle.)  And of the first examples in HtDP, some deal with 
> wages and theatre prices.  I can't think of anything more motivating.  
> *grin*
> Seriously, it really sounds like you're speaking without taking a 
> cursory look at HtDP.  Try working through it honestly: it's actually a 
> very good textbook.  You might also be interested in the paper "The 
> Structure and Interpretation of the Computer Science Curriculum" which 
> anticipates a lot of what you're saying:
> http://www.cs.brown.edu/~sk/Publications/Papers/Published/fffk-htdp-vs-sicp/ 
> The complaint you have is not one that's tied to Scheme: it's one tied 
> to a pedagogy that's independent of programming language.  Concretely, 
> one can apply the same pedagogy that concentrating on "irrelevant" 
> problems in any language:
>     http://mail.python.org/pipermail/tutor/2006-April/046304.html
> Sounds similar, right?  It has nothing to do with language: it has to do 
> with a particular teaching method.  I don't like Fibonacci either. *grin*
> Best of wishes!
> _________________________________________________
>  For list-related administrative tasks:
>  http://list.cs.brown.edu/mailman/listinfo/plt-scheme

Posted on the users mailing list.