[plt-scheme] Teaching Scheme

From: Robby Findler (robby at eecs.northwestern.edu)
Date: Mon May 3 22:53:02 EDT 2010

"Turing" is the word you want there, not "turning".

And I hope I'm not being too much of a wet blanket, but I think this
conversation has long outlasted its usefulness. I'd be quite grateful
if you would take this to comp.lang.scheme or some other, more
suitable place.


On Mon, May 3, 2010 at 9:49 PM, Samuel Williams
<space.ship.traveller at gmail.com> wrote:
> Dear Karl,
> Thanks for your thoughtful reply.
> I think that it is certainly important to consider the algorithmic content of a program. However, its also important to keep in mind that people are often dealing with highly complex input and output requirements, which in many real world scenarios are the dominant concern of a program.
> I think what you've said is good, but it might be worthwhile pointing out that what constitutes a good programmer isn't always clear cut. However, in a certain sense, one can be a good programmer without knowing any language - or one can be a bad programmer and know all languages (poorly). Maybe it is useful to standardize the definition of what it means to be a good programmer, but I wonder if this is really possible.
> Ultimately languages are just tools - a means to an end - and they are all bound by turning completeness - some are just more expressive and/or concise than others when it comes to certain problem domains. They also facilitate different ways of thinking about a problem - and in the case of Scheme this might be a really important point.
> Ethics in computer science is something which is often not considered in computer science education. Thanks for providing that interesting link.
> Kind regards,
> Samuel
> On 4/05/2010, at 10:56 AM, Karl Winterling wrote:
>> As someone who learned (R5RS-centric) Scheme as a "first language"
>> (whatever that means), I think I can comment about why using I/O for
>> teaching is "evil." A REPL is a _user interface_ for people using a
>> specific programming language that isn't necessarily restricted to
>> debugging. With a REPL interface, you only really need primitive I/O
>> when, for example, you need to write an interface that reads or writes
>> data to files on disk or TCP sockets (it's probably a bad idea for
>> event-driven code to directly use primitive I/O).
>> Part of this means that you can write a procedure and use it
>> immediately without having to worry about setting up an input port.
>> While this may not work well in certain situations, I think it's the
>> best way to teach beginners. Based on my experience as a lab tutor in
>> an introductory course, people with no prior programming experience
>> have few problems with the idea that every expression has a value.
>> It's completely natural for the computer to tell you the value of an
>> expression you type in and beginners shouldn't have to expect anything
>> else. After this, it's easy to explain side effects with something
>> interactive like turtle graphics or the SICP picture language, though
>> you should still focus on using procedures to return values suitable
>> for printing on the screen or passing to a primitive drawing procedure
>> (it's still possible to treat pictures as values, though).
>> People who already know a language like C or Java often feel that the
>> course doesn't meet their expectations, especially when some of them
>> realize that knowing, say, C# doesn't make you a good programmer.
>> As for applications, there are many high-quality Scheme
>> implementations that can be easily extended to support new language
>> constructs and arbitrary libraries in any language that can "behave
>> like" C. However, this isn't something that beginners need to worry
>> about, but you should mention that sometimes we want to add a new
>> "primitive" to the language. There are several examples of people
>> using Scheme in industry, all of which emphasize Scheme's flexibility
>> for supporting different problem domains. For example, Square USA used
>> Scheme in CGI rendering: http://practical-scheme.net/docs/ILC2002.html
>> People have even used Scheme for more ethically questionable purposes:
>> http://philosecurity.org/2009/01/12/interview-with-an-adware-author
>> (which might give you a chance to talk about ethical issues in
>> programming and engineering).
>> Your students, however, should be the ones answering the question
>> "What can Scheme do?" once they have enough exposure to program design
>> and low-level details. Hype never lasts.
>> ---Karl
>> _________________________________________________
>>  For list-related administrative tasks:
>>  http://list.cs.brown.edu/mailman/listinfo/plt-scheme
> _________________________________________________
>  For list-related administrative tasks:
>  http://list.cs.brown.edu/mailman/listinfo/plt-scheme

Posted on the users mailing list.