Brian Behlendorf's Blog

Brian BehlendorfBrian is known as a primary developer of the Apache web server but also as a thought leader in the open source world and a Young Global Leader. Brian founded CollabNet in 1999 together with Tim O'Reilly. Brian's blog is all about trends in software development, open source and collaborative software development.

This blog will soon move to a real blogging server.

Posted October 14, 2006

I am a member of Generation PC. I was 11 in 1984 when Apple released its first Macintosh, but by then I was already using Logo on my public elementary school's Apple II computers to draw sunsets and do word games. I had also spent many hours typing BASIC programs from Byte magazine into my TRS-80; mostly simple games, but sometimes programs that drew abstract pictures or a randomized seating chart for my 4th grade homeroom. Hacking was play - and the software's source code could always be changed, and nothing was so complicated that it couldn't be taken apart or improved. But programming as a career?

Forget about it - watching my dad the COBOL programmer pore over green-and-white printouts and tending to big machines in cold rooms made it seem less exciting than accounting.

That sense of play didn't return until I hit college and used the Internet for the first time. And just as the early Apple II and TRS-80 were spartan environments, so too was the Internet. No piece of Internet software was so complicated that it couldn't be understood. Reading the SMTP protocol specification took 20 minutes. Understanding DNS and TCP/IP took a couple of hours. Simple systems meant that the learning curve was a diagonal line: the more you learned, the more you could do, and it didn't take much to get started. Pretty soon I was skipping classes to spend time reading IETF mailing lists and writing HTML by hand for fun and profit. Out of having fun, and seeing how that fun could be applied to a set of real marketable skills, a career was born.

But today, something feels different. Has that sense of "hackability" been lost? Today everything related to software is much more complicated, the product of three decades of commercial R&D and accumulated cruft and legacy. When a kid's first experience with computers is surfing MySpace, writing a term paper in Word, and playing World of Warcraft... are any of those systems "hackable"? HTML used to be easy to write - now unless you know HTML and CSS inside out, you have to use an authoring environment. It used to take 5 lines in Perl to marshall CGI environment variables into a hash table; now you gotta include CGI.pm to deal with multipart POST submissions, or you're using a sophisticated Java application server, and you still have to deal with crazy cookie/SSL interactions and cross-site-scripting attack vectors.

I believe these complexities threaten the soul of programming, and with it, software development as a desireable profession. The precipitous drop in registrations for computer science courses at U.S. universities is well known. It can't only be due to a fear that all the software jobs are going to India and China - an unproven fear, as anyone trying to hire engineers in the U.S. today can tell you. I think it's also due to the intimidating complexity that much of the software world presents to end users, especially kids: don't touch, don't hack, don't modify beyond these couple of preferences we provide you. Beat the boss, get to 60th level, but don't look at source code, as that would be cheating.

There are some promising counter-examples. Ruby on Rails, which makes writing database-backed web sites easy. Drupal, software for community-building, which is easy to install and extend. For all its warts, Flash has opened up interactive programming to a huge number of people who before would never have called themselves programmers. Every web browser still includes a "View Page Source" option, so learning HTML, CSS, and Javascript by observation is still possible.

Programming is both a science and an art. Of all the sciences, it provides the most immediate feedback from experimentation. Of all the arts, it provides the greatest potential for societal utility. Stimulating young minds down a career in software engineering is important and should be easy - but only if a mastery of technologies is within their reach