Wednesday, July 30, 2008

JavaSchools: the other side of the story

Recently, I have read a number of essays lamenting the rise of Java and its popularity among novice developers. Joel Spolsky has been especially critical of "JavaSchools" that teach their entire curriculum in Java and the fact that the students they graduate have no aptitude or skills to deal with pointers and recursion. I assert that this is not such a bad thing, and there are excellent reasons why more and more schools are moving to this type of curriculum.

The average student at the average college who gets an average job at Big Company is probably going to be creating an average (web) application for average users. Let's call this the 95% case. This application by the "95% student" is very likely be using the Java Stack (or .NET stack, which can be picked up in about 10 minutes by a Java guru). The skills he learned in college will have prepared him very adequately for this job. He will earn a decent salary, work for Big Company for many years, live in the suburbs, buy a big screen tv, and generally be a happy and productive member of society.

Now let's take the remaining 5% of students who can be classified as the "elite" hackers. These are the students who will be motivated to do one or more of the following:

- hack the UNIX kernel
- aim to develop a better search engine "because Google is too slow"
- get a Phd. researching wireless ad-hoc networks between unmanned rocket ships

They may be annoyed for about five minutes that they don't possess the pointer and recursion knowledge out of the box to accomplish the above, but do you think this is going to stop them for long? They will rush out and sign up for elective classes (yes, those still exist) to teach them the skills that they need and immediately start to test and hone their skills by contributing to open source projects.

As much as elite hackers hate to admit it, software development doesn't have to be a gift bestowed upon a lucky few. In fact, many of the "95% students" described above probably don't have the need or desire to become a pointer arithmetic guru, nor do they have the ability to hold a stack of 20 function calls in their head. There are some students who would drop out of the major if forced to learn these skills. While this may help increase the average arrogance level of software developers, it does nothing to fill the thousands of job openings for Java developers. Universities are duty-bound to prepare all students for life after school, and by providing elective classes in pointer arithmetic for the "5% student" and ensuring that the average student interested in software development isn't forced out by some misguided sense that all developers must have the skills of a Linus Torvalds, they are doing just that.

Just as there are laments that learning pure Java development in college is lowering the quality of Computer Science graduates, there must have been a similar reaction from assembly language programmers when schools started dropping assembly from their curriculum. I would love to see a blog post from an angry assembly programmer in the 80s who saw kids coming out of college who were C and Fortran gurus but didn't know what a register was! At the time, more and more people who didn't have the interest or the aptitude to talk directly to the hardware were able to get into application programming, and that helped kick off the PC revolution.

Today, more people who otherwise wouldn't be developing software can because of the abstraction provided by languages like Java. As the creativity of more and more people are pulled in to the fold, more and more interesting applications that serve obscure niches are being created. This can only be good for software quality as a whole. With the advent of WYSIWYG tools and IDEs like Eclipse and Visual Studio, UI designers are now putting together whole pieces of systems, leaving the developers to focus on more interesting task of making the system work correctly and performantly. The skills that are needed to do the really hard stuff like writing OS's will still be learned by the elite hackers while application development will be opened up to a whole new audience.

5 comments:

Claude said...

I couldn't agree more. My 2nd or 3rd year of college, I spent about 200 hours writing a lisp interpreter *in* lisp that would take *lisp* code and transform it into a useless assembly language defined by the professor. I learned some interesting things but nothing that I've ever used at work. In retrospect, it would have been great if we'd done it in ruby, python or javascript (java doesn't have the 'eval' functionality required for the incestuous interpreter we had to build)

Mark A. Graybill said...

My experience is that the elite are self-educating. A favorite pastime of the elite is decrying the state of the average student and the curriculum. I should know, that's what I did through college. I walked into every class with a chip on my shoulder (usually an obscure processor that you had to program in assembly because there weren't any better tools for it. ;)

Now I have a better appreciation for what the standard curriculum does. Just getting the result of producing a productive average programmer, as you describe, is difficult enough and laudable enough in itself. The purpose of undergraduate studies isn't to produce super-hackers. Besides, if they did produce that many super-hackers there wouldn't be enough work for all of them. Then the lament would be all the poor super-hackers coming out of college and the best job they can find is writing PHP for some corporation's web pages.

Greg said...

It's not about the elite. It's about the educating the rank and file having some idea of the extent of things they don't know. The people who _won't_ find out about the rest of programming world (or even its existence!) if they aren't specifically made aware of it during their education. It doesn't matter whether they'll ever use those skills directly, they'll be far better programmers for knowing what's out there and where to look if they need something beyond their experience.

Michael B said...

Greg, I'm afraid that is 100% the fault of the teacher and not the curriculum. Making people aware of something and teaching basics is quite far apart. For anything to be able to be part of the curriculum it needs to have credit assigned to it. For anything to have credit assigned to it, there must be the possibility to assert that the student has learned/mastered anything.

Unless your willing to accept(you shouldn't) tests that are basicly memory tests, you need to cover more material then time would permit. You can only squeeze in so much in those few years.

It's up to the teachers to give pointers as they teach the other subjects.

vthakr said...

Yes, I agree with your description of the 95% programmers, the problem is that you are describing the MIS majors, not the CS majors. That is why we have two different fields in the first place. If you want to write business software, do a major in MIS or perhaps a Software Engineering major, if your school offers it. On the other hand, if you want to study Artificial Intelligence, Complexity Theory, Automata Theory, etc., etc., then major in Computer Science. I hate it when people keep trying to push CS into a Software Development curriculum. I've now taken classes at three schools, two were glorified Java schools and the other was a more traditional program. I hated the Java schools because everyone treated CS as a very long course in programming. If you want to learn how to program, teach yourself, its not hard. At the traditional school, on the other hand, I was surrounded by what I would refer to as scholars, in other words, students who got into CS because they were more interested in the academic purity of the topic and the rigor than they were in learning to write a program in Java.