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.