[plt-scheme] Teaching Scheme

From: Samuel Williams (space.ship.traveller at gmail.com)
Date: Mon May 3 22:49:10 EDT 2010

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,

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

Posted on the users mailing list.