[plt-scheme] Teaching Scheme
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