%w{Scheme Python Rage Love Apathy}

Posted: 27 March 2009 in Uncategorized
Tags: , , , ,

John Cook just brought up the changeover from Scheme to Python in MIT’s beginning CS classes. I was exposed to Scheme very early in my programming career during my ill-fated quarter at the University of Chicago.  For some reason I can’t remember (it was 14 years ago), I registered late and couldn’t get into entry level CS classes.  So I enrolled in an AI class (against the advice of my undergrad advisor) without really knowing how to program. This was old school AI, not machine learning, so it wasn’t the maths that got me. The first programming assignment threw me completely for a loop — I had never seen Scheme before and didn’t know a thing about it. My world up to point that had consisted of Pascal and BASIC, with a smattering of assembly.  The logic behind the AI stuff made sense, but the logistics of getting Scheme to do what I wanted escaped me and I dropped the class.  Turns out that advisor was worth listening to!

Whenever something like this happens, you will see three groups of commenters emerge.  First are the I-don’t-care’s.  Actually, you don’t see them since they don’t give a crap.  The next are the fanboys.  They love the new language and are glad that MIT has discarded a dinosaur in favor of the language of Heaven.  And finally you have the sticks in the mud who lament the death of computer science because a whole generation will grow up retarded thanks to not learning programming just the way they did.  Obviously, these are exaggerated — I say it to shock the mind.

Cognitive psychology would have me believe that by drawing stark lines and exaggerating the situation, I will actually cause people to align themselves more closely with the stereotypes I laid out.  The logical alternative would be to view it as a joke, take a step back, and examine your own reaction.  Why do people get so worked up about this?  Why do I get so worked up about people getting so worked up?  :P

Maybe I’m getting crotchety in my old age.

Comments
  1. Rob V says:

    Perhaps it’s because I have no strong feelings for either language yet (did scheme in a few classes, debugged a couple python scripts since then), but I’m mostly just impressed that those two languages are even in the running for beginner classes. I didn’t realize anyone did anything besides java and c (and maybe, maybe lisp) for beginner classes. I would have much preferred scheme or python over java, given I already knew c/c++ passably at the time.

    • Jason Adams says:

      It sounds like I was pretty much in the same boat as you in my beginning CS classes. I left U Chicago and it wasn’t until several years later that I returned to school and by then I knew C/C++ but had to use Java in the intro classes. I definitely would have preferred just about any alternative.

      • Rob V. says:

        It worked out ok in the end because it was ONLY the beginner classes that did Java. The rest of the professors stuck with Lisp and occasionally C++ with things like Scheme mixed in for fun/exposure. I think exposure to a non-imperative language (or at least one with non-imperative aspects/influence) early on is crucial for differentiating the programmers from the rest. Later on at a different university, I TA’d a class that used Mozart/Oz to study different programming paradigms. Unfortunately, the culture at that university was less theoretical and more “pragmatic” and so most of the students had never ventured out of the Java/C++ world and really didn’t know what to do with a such a different programming world-view.

  2. DrNI@AM says:

    Well, it all depends on what you want your computer science students to be able to do. In Europe and especially in Germany, we’re in the process of switching to an European version of a Bachelor+Master system, and I think it is stupid to teach Scheme to people who are supposed to work in a company after only 3 years of studying. After all, 3 years are barely enough to get yourself going in a less esoteric language such as C++ or Java.
    However, if you want to produce scientists, not skilled workers, Scheme may be alright. But so may be Prolog or anything else…

    • Jason Adams says:

      So it pretty much boils down to being a matter of what sort of computer science graduates you want to produce. Scientists should be exposed to a variety of languages, whereas engineers might be fine with just the most popular languages in industry. Some schools will produce one variety, some another, and some a combination. The school I went to had more of an engineering focus and it was difficult for me to get any exposure to programming languages outside of C/Java. I would say most students I graduated with did not.

      • Luis Espinal says:

        Well, I’d like to add to that – and hopefully I don’t get off the tangent.

        I’d say that there should not be such a dichotomy between CS schools that are engineering or scientific inclined. For the scientific inclined, they should be also exposed to what’s being done in the industry out there. There are folks out there churning papers year-round (and getting grant money$) on topics like, I dunno, formal methods for making web applications (really), but can’t tell you the fundamentals of developing in say, .NET or Spring.

        OTH, you have engineers who live and die with Java, .NET or C++… and try to use that same hammer for every type of nail, incapable of seeing where other languages and tools might apply. After all, we do enterprise systems that are mash ups of Java, shell/perl scripts, with rsync moving stuff (like uploaded spreadsheets) between servers for processing, and database jobs running nightly. I’ve seen “engineers” trying to use one language to replace all those… with disastrous consequences.

        Or what’s worse, engineers that are only Java or .NET craftmen… with no clue about resource management. Since they never had to deal with that (as you would with Pascal, Ada, C or C++), thinking about memory management and resource de-alocation is never a thought. I’ve landed some good job opportunities fixing code that never closes database connections or who trash their GC with hordes of temp objects.

        Both sides of this deformed coin are unacceptable IMO.

        I’d think Scheme (or Haskell or F#) would be a wonderful requirement for individuals that are half-way their CS studies, with something like Basic, Pascal or Java or C# (no GUI stuff) as a single, one-time introductory language.

        In between those, there should be a concentrated battery of lessons on :

        - C (all the way to pointers to functions and inline assembly),
        - C++ (making sure to use templates and cover multiple inheritance),
        - Some sort survey of object-oriented/multi-paradigm programming languages covering multiple inheritance, explicit memory/resource management, functions as arguments, classes vs types, traits, mixings, closures, parallelism, etc.

        That’d would give a solid basis for people to perform well in more advanced topics (either theoretical or pragmatic/pedal-to-the-metal.) Plus, any school should provide to its students (in their last year) a selection of classes teaching what is being used in the real world. My old alma mater, for example, has senior courses on .NET as well as Web/Enterprise development using Spring+Hibernate (and I’m sure those two courses will morph according to the changes in the industry.)

        Scientists should have some practical, hands-on grasp of what people use to make a living and conduct businesses with. And engineers should not be such one-language ponies. You’d see that the best scientists and the best engineers/craftmen are those who move towards the middle.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s