Remedial Programming Classes?
I came across a disturbing factoid this morning: "U.S. students earlier this month made their worst showing in the 29-year history of the ACM International Collegiate Programming Contest."
By pure coincidence, I had a chat last week with a friend who is an adjunct professor at a well known university. For some reason the topic drifted towards discussing the relevancy of computer science curriculums.
It has been a long time since I finished my Masterâ€™s thesis, but even then I had qualms about the relevancy of my coursework. Many of the courses that I took in college were taught by brilliant men who were lousy teachers. My general feeling was that I was being taught by a bunch of well-meaning PhDâ€™s whose secondary objective was to get me to earn a PhD (the primary objective of my professors was always to get grant money for their own research projects). Presumably, once I earned a PhD, I could then go on to teach other students so that they could earn their own PhDs.
Iâ€™ve lost touch with academia, but my friend (the adjunct professor) tells me that many universities are actively shunning relevancy in their computer science curriculums (they don't want to be confused with vocational schools).
I was surprised to learn that my own undergraduate alma-mater now mandates Lisp (actually Scheme) as its Lingua Franca. Apparently this will insure that under-grads donâ€™t confuse learning a programming language with learning how to program. I grok their intent, but this approach conjures images of cap-and-gown clad men reciting Latin prose while smoking cigars and sipping brandy.
Unfortunately, I am functionally uni-lingual (Youâ€™ve doubtless heard the joke:â€If you speak 3 languages you are tri-lingual; If you speak 2 languages you are bi-lingual; If you speak 1 language, you are an Americanâ€). I can understand a bit of Spanish, but if I want to have a conversation I have to use English.
Perhaps if all of my college courses had all been taught in Latin (the root of western languages like Portuguese), I would now be multi-lingual; able to fluently converse in myriad tongues. Perhaps, but more likely I would be limited to basic communications (â€œI need thisâ€ â€œI want thatâ€ etc.) in eleven different languages.
Precise thought requires precise language. Nuance requires mastery of an extensive vocabulary. Nuance and precision are hallmarks of successful programmers.
So should my alma-mater dump Lisp and adopt Java? Java may just be a flash-in-the-pan fad (like COBOL and FORTRAN). Languages promote patterns of thought and preferred approaches to solving problemsâ€¦ Would Javaâ€™s Object Oriented approach taint young minds and sour them on Aspect Oriented Programming? Maybe AspectJ is the future? Maybe Ruby is a better choice? It appears that Lisp has Latinâ€™s advantage: it is a dead language***. The University doesnâ€™t have to pick a winner from the pack of contenders; they can pick a legacy language and be done with it.
I don't know if any of this is responsible for the decline in U.S. programming skills. It's great that other countries have made dramatic improvements.. but something's wrong back here in the U.S.A.
***Please note that I don't hate Lisp. My Masters project involved optimizing processor designs to execute Lisp.
To be fair, universities aren't advocating exclusive use of Scheme, they are using Scheme for introductory classes.
Here's a good link to one university's proposal for introducing Scheme before Java: The proposal is well thought out, but I have to highlight the following snippet: "The possible drawbacks include entry-point confusion, perceived irrelevance of the language, difficulty in moving between sequences, awkwardness in language transition, and diversity issues in upper-year courses"
Update: Norm Matloff has authored a rebuttal to the artice that first caught my attention: "Johnny can so program".