« CRAP: At the Whiteboard | Main | Who Knew? »
JavaSchools, Scheme, and Sin
Joel Spolsky has a great essay on the perils of JavaSchools, those CS programs that adopt Java (or .Net, to be fair) because it is easy for students to learn. In it, he sings the praises of learning Scheme and being exposed to functional programming.
Without understanding functional programming, you can’t invent MapReduce, the algorithm that makes Google so massively scalable. The terms Map and Reduce come from Lisp and functional programming. MapReduce is, in retrospect, obvious to anyone who remembers from their 6.001-equivalent programming class that purely functional programs have no side effects and are thus trivially parallelizable. The very fact that Google invented MapReduce, and Microsoft didn’t, says something about why Microsoft is still playing catch up trying to get basic search features to work, while Google has moved on to the next problem: building Skynet^H^H^H^H^H^H the world’s largest massively parallel supercomputer. I don’t think Microsoft completely understands just how far behind they are on that wave.From The Perils of JavaSchools - Joel on Software
Referenced Wed Feb 08 2006 10:53:20 GMT-0700 (MST)
In another article Sriram Krishnan says that “Lisp is sin:”
I was on vacation a couple of weeks ago at my parents’ house in Chennai. My dad and I share a love for James Bond movies so my dad had bought a set of DVDs containing all the Bond movies in existence. I can’t help but strike a politically incorrect analogy - Lisp is like the villainesses present in the Bond movies. It seduces you with its sheer beauty and its allure is irresistible. A fleeting encounter plays on your mind for a long,long time. However, it may not be the best choice if you’re looking for a long term commitment. But in the short term, it sure is fun! In that way, Lisp is…sin.From Sriram Krishnan : Lisp is sin
Referenced Wed Feb 08 2006 10:55:40 GMT-0700 (MST)
Sriram is tempted by LISP, but put off by some of it’s raw “hacker power.”
At BYU, we teach Scheme in the Concepts of Programming Languages class. There’s a continual struggle to maintain Scheme in that class. I never apologize to the students for teaching Scheme—I think anyone who calls themselves a Computer Scientist ought to have done some programming in it. Beyond that, however, it’s the best vehicle I know for allowing me to challenge student’s notions about what programming languages are and how they should work.
Posted by windley on February 8, 2006 10:49 AM



Comment from Tyler Larson at February 8, 2006 2:04 PM
From Joel:
"Instead what I'd like to claim is that Java is not, generally, a hard enough programming language that it can be used to discriminate between great programmers and mediocre programmers."
Though the point is true, it's also an absurd way to set a curriculum. School should be about teaching important skills, not about telling you that you're too dumb to learn. C/C++ should be taught, as should assembly. But you shouldn't START with C, much like in flight training shouldn't start with IFR--and not just because it takes longer to learn that way.
CS graduates prefer to use Java because it's the best language they've learned--schools spend all their time on languages that teach concepts, and consequently never teach any languages that are useful. Every language they've learned (including Lisp and C) is critically deficient in at least one area. Lisp is really the functional counterpart to assembly. Teaching it is important in order to establish a firm foundation; however, it becomes more of a syntactic impediment than a help once the project exceeds a single printed page in size.
Python has consistently been touted as an "ideal" teaching language. Eric Raymond wrote a very insightful piece on what's so wonderful about it:
http://www.linuxjournal.com/article/3882
It's also worth pointing out that Python has built-in support for functional programming and advanced set operations. It shouldn't be any surprise that Python is Google's favorite.