I'm a hacker and proud of it. What I know about programming is mostly self-taught. Back in the 1980s, I cut my teeth on Basic before moving on to Pascal, machine language, C, and even such obscure languages as Forth. For me, the joy of programming was in exploration and experimentation. The computer was a world where I was free to tinker to my heart's content, and the knowledge I gained was its own reward.
There's a whole generation just like me, but today the world of programming is arguably even more accessible. Novices might start by working with HTML and JavaScript before moving on to PHP, or maybe by writing Visual Basic macros for their spreadsheets and eventually graduating to full-scale application development. Introductory tools abound, such as Microsoft's Small Basic, and never in history has more quality application source code been available for students to learn from. Computing may be big business today, but the hacker spirit is still alive and well.
[ Dive into the perils of the "hacker ethic" in InfoWorld's "stupid hacker tricks" stories. ]
Still, I have to ask: Is that really a good thing? If every modern American schoolchild knows more about PCs and computing than their parents ever could, why does Vineet Nayar, CEO of the Indian IT outsourcing vendor HTC Technologies, claim that most U.S. college grads are "unemployable"? Are Americans really falling behind in technical know-how? Or could it be that in our willingness to embrace the hacker ideal, we're producing programmers who are unprepared for real-world work?
How America fell in love with hackers
By and large, the founders of the PC revolution are all hackers. Neither Steve Jobs nor Steve Wozniak was a college graduate when the pair co-founded Apple. Bill Gates didn't graduate until 2007.
It's easy to see why these figures, among others, captured the American public imagination. Americans love a rags-to-riches story; they love to hear about plucky outsiders who rise up from insignificance to become great leaders and captains of industry. The story of the early days of the personal computer age read like a capsule summary of the American Dream.
Little wonder, then, that somewhere along the line, computer programming became synonymous with hacking in the American public consciousness. If you spent long days in front of the computer, doing things that were incomprehensible to everyday people, presumably you were destined for greatness. You could be the next Bill Gates! Whatever you were doing, 10 years from now we'd probably be reading about you in the newspaper. Your mom might worry about you, but she was proud of you -- even if she didn't understand the first thing about what you were doing.
Of course this is silly. Real captains of industry are few and far between, and not every programmer is destined to become a celebrity -- far from it. But the idea that any coder will inevitably, through some incomprehensible sleight of hand, transform a love of computing into untold riches is actually worse than silly -- it's also insidious, because it puts the focus on all the wrong things.
Where American developers go wrong
According to HTC's Nayar, the American graduates he's encountered are all obsessed with making big salaries. In countries like India, China, Brazil, and South Africa, on the other hand -- where students have no such expectation -- grads are much more likely to have devoted themselves to learning such "boring" details as development process, business methodologies such as Six Sigma and ITIL, and understanding a broad range of development tools -- things that too often go missing from American graduates' résumés.
In other words, the American graduate expects to be recognized as a superstar and treated as such, while a graduate from a developing nation will be more oriented toward working within a team. Both are focused on success, but each defines success in different terms.
And the problem goes even deeper than that. American-style hackers don't just make for bad team members; they also make for bad programmers, albeit for reasons new grads seldom anticipate. "Cowboy coders" might be technically proficient, but their code is less likely to be maintainable in the long term, and they're less likely to conform to organizational development processes and coding standards. As a result, quality assurance -- including testing, debugging, code reviews, and refactoring -- are likely to suffer.
American software development managers often complain that Indian programmers are too literal-minded, and that they lack the intuition and entrepreneurship characteristic of American programmers. But to listen to Nayar tell it, American programmers have swung the pendulum too far in the other direction. Can it be that we're too in love with the hacker ideal of the 1980s to produce programmers who are truly prepared for today's real-life business environment?
Is it time for developer education reform?
Part of the problem may lie in the way that computer programmers are educated in American universities. If you want to develop software, you'll be directed toward a degree in computer science. But as anyone who as obtained an advanced degree in computer science can tell you, computer science could easily be described as a branch of mathematics. At its more advanced levels, it's a far cry from the practical, hands-on training that programmers need to succeed in business environments.
Maybe what's needed is a new kind of computer engineering degree to complement the computer science track: one that's targeted toward the student who is more interested in succeeding in industry than exploring computing theory. Programmers often have titles like "software engineer" and "software architect," but the training they receive is a far cry from the rigorous certification that real-world engineers and architects must undergo. (In some countries, "engineer" and "architect" are even legally protected titles; computer programmers aren't allowed to use them.) A true software engineer would undergo intensive training not just in software development essentials, but in processes, methodologies, business strategy, and effective communications -- all the areas that Nayar finds lacking in today's students.
Don't get me wrong; I'm still proud of being a hacker, and I believe that young students with the hacker spirit will always be able to excel in computing professions. But the hacker ethic alone isn't enough to succeed in today's economy. Rather than clinging to big-fish stories from the 1980s, where fluency with computers meant instant success, we should be teaching young hackers to temper their enthusiasm with discipline. In short, it's time for the software development profession to grow up. Hacking is fine, but teamwork and good collaboration skills will be the keys to tomorrow's successes. Until our education system provides a foundation in these areas, they're letting our young developers down.