Throughout my career as a software engineer and all around code monkey, I have been both denounced and applauded as a “hacker”. In my current position, it is part of my duties to “think like a hacker”. Clearly there is a lot of confusion surrounding the term hacker. Wikipedia has these definitions.
Since the definition of hacker isn’t the actual topic of this post we’ll just leave it at that. What I really wanted to rant write about was inspired by this article by Neil McAllister in his Infoworld Fatal Exception blog entitled Does the ‘hacker ethic’ help or harm today’s developers? wherein he writes the following.
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?
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.
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?
Having worked over the years with a number of outsourcing vendors (including HTC) I find Mr. Nayar’s comments quite amusing. Without dismissing his points entirely, it’s kind of hard to read “American graduates are all obsessed with making big salaries. In countries like India, China, Brazil, and South Africa, on the other hand, students have no such expectation” as anything other than “American graduates refuse to be exploited as the peasants they are“. But there are some valid points. Many American, Western European and Australian software developers particularly recent graduates are likely to get positions with smaller startup companies. These companies value innovation and speed of delivery above all. In their world there is no long run. Yet. They have to get something dazzling out right now. Therefore those are the things that developers are rewarded for: quickly producing amazing stuff. And the reward is usually that they get to keep working at a cool place. If you aren’t a hacker you’re a slacker in this world.
Now fast forward (or rewind depending on your point of view) to developers in large corporations that have products on the 10+ versions and development processes that have been evolving for 20+ years. You know, the guys that defined Six Sigma and ITIL. It’s a much different world there. Due to heavyweight processes and the burden of history and politics these shops tend to put out higher quality, more conservative products far less often than their smaller, more agile but less stable brethren. “Cowboy coders” don’t do too well in this kind of environment.
But it’s easy to see why Mr. Nayar holds his opinions, given the sort of development projects that are typically outsourced. Smaller companies usually outsource maintenance of that dazzling and rapidly developed (read “quick and dirty”) code. Larger companies usually outsource long term maintenance or conversion of legacy code. Arguably tasks that really shouldn’t be done at all, but almost invariably work that will be discarded as soon as it’s practical. In other words nothing critical or complex.
I’m certainly not implying that the developers who work for the outsourcing vendors are incompetent, it’s just the nature of outsourcing development. Essentially what you have is a contract that states “we will do precisely this coding for precisely that amount of compensation“. It’s the “precisely this coding” part that is the devil’s abode. It has been my experience that outsourcers will do exactly what you specify. No more, no less. If you are even the slightest bit vague or make assumptions about existing knowledge or skills there will be much unpleasantness often leading to project failure. Your project that is. The outsourcer still gets paid.
Another experience I’ve had with off-shore outsourcing induces hilarity with respect to Mr. Nayar’s Utopian view of software development team spirit in emerging markets. I was working for a large corporation that had outsourced the maintenance of a legacy system to an off-shore organization (in Bangalore if you must know) while I was busy working on replacing that system (a system that supported ITIL change management if you must know). I trained six (count em – 6) different project leads over the course of six months to do this maintenance because almost as soon as each was trained they took another position with another outsourcing vendor for higher pay. Finally gave up on the outsourcing before anything was ever really accomplished. Other than providing training to some smart folks that allowed them to get better gigs. To paraphrase Curt Cobain, it certainly smells like team spirit to me.
But back to Neil’s question, 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?
I would submit that unless you are a hacker you won’t be prepared for today’s real-life business environment. Yes even in large organization. Did I mention that I work for a large corporation and it is precisely this hacker ethic, thinking outside the box, trying to understand how everything works and most importantly how everything can be broken and exploited, that is a large part of my job as Advisory Software Engineer. But it is also true that if you are strictly a hacker, you limit your abilities as a software engineer. Note again that my education is in Electrical Engineering (as opposed to Computer Science) and that I’m certified in ITIL fundamentals (among other things). The point is that this isn’t an either-or proposition. You must be both a competent engineer and a hacker. If you rely strictly on your education to inform your development, you will be doing on-the-job-retirement real fast. You need that hacker ethic to drive you to try crazy stuff, stuff that average developers don’t think of. And you will need that hacker ethic to figure out how that new technology really works, as opposed to how it’s advertised to work. Whether you are in Denver, Bangalore, Beijing, Sao Paulo or Capetown. Then if you work for some doofus like Mr. Nayar, you can always walk across the street and get something better once you get enough experience. On his dime. And how sweet is that.