30th Jan 2008 by Mark Turansky

The Perils of Joel Spolsky

Filed under Filed under Technology

The Perils of Java Schools? Joel Spolsky — of Joel On Software fame — continues to ding Java whenever the opportunity arises, which just so happens (again) to be a recent article on his blog about “Java schools” and undergraduate programs. I think he still holds MSFT stock in his portfolio, which may explain the constant FUD coming from his bully pulpit.

I like Joel. I enjoy his articles and insight. Normally, I agree with him or learn something, but sometimes….!

Joel’s original article bemoaned the state of Computer Science curriculum in today’s universities, but what gets me (and he may be trolling, really, just to promote his products) is the continuing attacks on Java as a language and platform despite the fact that his former employer is following the exact same roadmap in order to claim Java’s marketshare. This does not change his choice in platform, naturally. He’s MSFT all the way, with the inclusion of *nix by writing his own language called ‘wasabi’ to crank out PHP code from a vbscribt-looking language. They must be bored over there at Fog Creek.

The Physicist, the Architect, and NASCAR

Physicists can tell you with great accuracy why things fall, why bodies of water ebb and flow, what makes up stardust, and why weight distributed across various building materials would support more or less weight than other materials in myriad configurations. There are formulas to calculate these things to the nth degree.

Architects will say they need a floor to support X people and design their building accordingly. Structural engineers make it happen.

I’d argue that one is science while the other is applied science. One is research and learning, while the other is a pragmatic use of today’s knowledge.

Architects do not need advanced degrees in physics to design a building. They need to get the job done on time and on budget. Most businesses don’t need computer scientists who understand relational algebra at a deep level. They just need pragmatic application developers who understand that relational algebra exists and that it underlies how modern databases are built. Knowing about relational theory at a superficial level is sufficient to take advantage of it by applying the right level of normalization on a database design. Folks who build NASCAR cars don’t need to be able to design next generation engines, they just need to be able to put horsepower under the hood.

Today’s curriculum

Colleges today are changing their curriculum to match the demands of the business world. There is is a schism forming between computer science and application development (for lack of a better term). We see this here in a local university from the eyes of a professor who consults with our company. One is science and research, the other is applied science to achieve business goals. The two don’t necessarily align, but we only have a single “computer science” degree that most closely matches what businesses need today.

I don’t know if Joel would support learning software engineering best practices in a computer science curriculum. His excellent “Joel Test” for software organizations may not have any place in today’s comp sci classrooms, but it’s still an excellent test. How do we teach people the merits of version control systems, build and smoke tests, and planning and scheduling? How do we teach good design with an eye towards maintainability? How do we teach young programmers that the project is not done when the coding is finished and that non-functional requirements will lengthen the schedule considerably? How do we write code that simultaneously meets the oft conflicting requirements and schedule pressure?

Does pedigree matter?

My daughter and I watched Underdog this past weekend. She held a huge bowl of popcorn in her lap while enjoying a canine protagonist that looks suspiciously like our beagle. We popped the popcorn in our microwave. Percy Spencer was a self-taught engineer working for Raytheon when he discovered microwave radiation. He didn’t get a comp sci degree from Yale. He didn’t even go to a Java school. He learned on his own. A childhood friend of mine is blowing up buildings in Connecticut as the Director of Technology for an NBC owned television station. He’s building a next generation studio and control center for NBC. Before that, he was the technical manager of the Today Show. He went to school to learn how to operate a camera. You know, a Java school for TV.

What most of us do everyday in the trenches isn’t rocket science. It isn’t even computer science. It’s application development where ingenuity, passion, and creativity drive the best of us, not pieces of paper.

What's next? CommentsLeave a comment Digg it Save This Page

8 Responses to “The Perils of Joel Spolsky”

  1. Bubba Says:

    Mark,
    I couldn’t have said the Physicist/Architect metaphor any better myself….

    Bubba

  2. Steve Says:

    With C# 3.0 out, you can’t really compare Java to C#. Java is the new VB6 of the industry.

  3. André Says:

    You conclude by saying “what most of us do … isn’t even computer science.” You are right, and this is why what is taught in computer science’s curriculum in today’s universities (the target of Joel Spolsky’s “rant”) should be irrelevant to you … and the same for J.S.’s blog.

    I believe that, deep down, what is implied by your post, is that universities need to offer a totally new kind of degree, something that stands on its own, perhaps called “software architecture”.

    To say that computer science degrees need to be changed to match the demands of the business world (something that is unfortunately happening) is not, imo, the solution. Having a clearly different degree, based on a different premise, offered in parallel to computer science, is what is truly needed - as a complement to computer science, just like engineering physics complements physics.

  4. Jamie Penney Says:

    We have something like what you are talking about at our University - You can study Computer Science, which is theory heavy, or Software Engineering, which focuses on applying programming programming knowledge in actual projects. The last 2 years of the degree have a heavy focus on group projects. I’m pretty sure SE is offered around the world - not just in New Zealand, Although the University of Auckland is the only University in the country to offer the degree as far as I know.

  5. Rob Says:

    >>With C# 3.0 out, you can’t really compare Java to C#. Java is the new VB6 of the industry.

    Lets not forget that C# ripped most of it’s original language constructs from the Java language, and C# 3.0 adds in the whole anonymous types thing (VB6 VARIANT anyone?). If anything is more like VB6, it’s C#3.0. ;)

  6. Patrick Says:

    Rob please read what anonynous types and what VB6 VARIANT are before comparing the two… ;)

    Behind c# you have a person like Anders Hejlsberg (the father of Turbo Pascal and Delphi) and some of the “innovations” he put in c# 3.0 are really quite interesting! [innovations is quoted since some of the new funcs come straight from functional programming]

  7. Kris G. Says:

    Very nice post!
    I read Joel’s post as well couple of weeks ago, I study myself in one of so called ‘java universities’ and that’s fine for me. I belive you can still be computer scientist and learn java at the same time. I think it’s is the passion, continuous research and learning what makes us software scientists and not the tools we use to do the job. I just don’t get all the buzz about java and why its so bad. I like C, C++, Ruby but I love Java, I belive it is the best language to learn object orientation and if I look on this from this point of view I start to belive that teaching Java as primary language is actually right thing to do. In my opinion the problem is not about teachnig java but about not enough pressure on other CS subjects at the same time, learning Java by itself do not force learning lots of other things automaticaly like for eg. c does.

  8. Rob W Says:

    [Aside to C# 3.0 commenters: what post are you responding to?]

    Anyway, excellent post — I’m not sure either what the exact solution is, but probably more variety in degrees available; a CS degree can stay more strictly academically-oriented (and plumb the abstract side more deeply), while it would be quite useful to have degrees available that would cover some of the non-code aspects of software development like you mentioned, plus a solid base for coding and understanding software.

    As for the Java thing — I’ve noticed that in a few of Joel’s essays. He actually said that the idea of students learning Java as a first language makes him “actually physically disgusted”. Jeez. My first language in a compsci intro course was JavaScript, then in later classes we moved on to Java, C, scheme, and a mini assembly language at one point. It doesn’t make a difference what you started with, as long as you get the depth somewhere along the way.

    I tend to think it’s best to use languages in intro classes where it’s as easy as possible to get functional, useful programs written. Joel is pushing for forcing the beginners to struggle with malloc, pointers, cryptic core dumps, etc.. Why? As long as they have grasped the lower-level workings before they graduate, that addresses his only *actual* concern. There’s no reason left to force professors to *start* with those aspects.

Leave a Reply