Education’s Role in Programming Prowess
Software “engineering” is very different from every other field of engineering–it’s done almost freehand. In the relatively early days of software development, the gears began turning to make software development a licensed trade. Imagine a world where programmers are required by law to pass a certification exam in order to write software. It makes a certain degree of sense, I suppose; millions of lives are at the mercy of software every year in hospitals, airplanes, and traffic lights. So how is it that such a system is not in place?
The property of software engineering that sets it so far apart from other areas of engineering is the low barrier to entry. Within 19 years of their invention, personal computers resided in over 50% of American homes. Today that figure is much higher. Excellent software development tools are often free. This is not the case with, say, mechanical or civil engineering. The software to support those professions is prohibitively expensive for a hobbyist, and the actual execution of the craft (construction) is laughably far from the reach of an enthusiast.
Because the barrier to entry in software development is so low, hobbyists are everywhere, in varying degrees of mediocrity. A very few develop incredible skills with no professional training. Most, however, are complete incompetents claiming that their self-taught abilities are somehow more… 1337 than any formal Computer Science education.
With about five years’ professional experience under my belt, I’ve come to the following conclusions about the role of education in programming prowess:
Hobby experience is still experience
The ability for a programmer to quickly assess a problem, consider several options for implementation, and code up a solution is directly proportional to the number of hours they have spent programming in their life. Every failed (or marginally successful) attempt at solving a problem with code builds the author’s intuition for what will or will not work.
Hobby education is rarely still education
In the field of statistics, self-selected samples are considered useless as sources of data. Internet polls on the quality of a movie do not attract a random sample of viewers; they attract a sample of people who either adored or deplored the film enough to go looking for a place to rant.
Programmers seek education outside of formal curriculum only if it is immediately interesting to them. When I spent six to eight hours a day programming games, the study of formal grammars, recursive-descent parsers, and compilers never crossed my mind. If I had never attended university, I would never have learned a thing about writing interpreters and compilers. But now that I’m back working on games in my spare time, I put those skills to use quite frequently.
Formal education in computer science expands the skill base of software developers into vast new areas of knowledge they would never seek out themselves. If they retain this knowledge, it makes them experts in their field.
The best indicator of programming prowess: Hobby projects
Having worked with dozens of programmers in University and the professional realm, I’ve decided that the single most important indicator of proficiency is a wide range of interesting, challenging hobby projects.
It’s probable that I’m biased by my own delusions of grandeur. I love to write software, and I spend a fair bit of my spare time doing it. My current hobby projects include:
- Full-functionality graphing calculator for the PocketPC
- Better scripture study program for the PocketPC
- Professional-grade PHP editor (graphical debugger, etc.)
- Cheap PC knock-off of Geometry Wars for the X-Box 360
Most of my hobby projects die a miserable death somewhere between infancy and adolescence. A few, however, go on to be used professionally. I recently sold my first copy of Simple Versioning System, a source code control program written to integrate as tightly as possible with Microsoft’s free Visual Studio Express products. I use my PHP editor (PowerPHP) at work every day, and so does another programmer there.
Even if most hobby projects die in infancy, they add to the total number of hours spent programming in the developer’s life, which is the real metric I’m after. It’s pretty tough to measure total lifetime hours spent programming, but you can get a pretty good idea of the total by looking at the current set of doomed hobby projects under construction on the developer’s home PC.
November 13th, 2006 at 6:37 am
Excellent. One of the biggest problems I have as a recruiter is convincing programmers to get formally educated, or to do something more than be formally educated.
For instance, I constantly preach that people should get all the certifications they can. Micrsoft, Sun and Brainbench programming certifications can get you a job interview. Americans won’t do the work, but the Indians will, and they get hired instead of the Americans.
And getting someone to finish a CompSci degree is just as hard. It is difficult to convince someone making $50K that going back to 2 years of drudge work at school is a good idea in the long run. In India, they just do it because they know they will get absolutely nowhere without credentials.
December 3rd, 2006 at 4:53 pm
Heheh. I always judge programmers by how many production-quality (debugged, well-documented, user-friendly) programs they’ve written and published in their spare time. I have 0. =)