The May 12 whyjava blog post Reasons for Incompetent Software Developers in India caught my attention. This post, which rightfully earned a Top Links position on DZone, is explicitly aimed at highlighting reasons why some Indian developers are less competent, but what I couldn't help think as I read his reasons is how they have applied to some of the less competent developers I have witnessed working in the United States. In this post, I look at the five reasons outlined in that post from a "western" perspective; some things aren't all that different because we're all humans.
The Importance of Wanting to Develop Code
I have long felt that it is important to really want to develop code to be successful in our industry. The reason for this is that most developers I know do really love what they do and most of us are better and do better at things we enjoy doing. Developers who tolerate but don't really have a passion for development are often at a significant disadvantage. There are many reasons for this, some of which are the nature of a passionate developer: more enthusiastic, more creative, more energetic, more involved, more willing to learn and improve at the craft, and on and on and on.
The author of the post Reasons for Incompetent Software Developers in India points out that many developers in India are "developer[s] by chance not by choice." I think there is some truth to this in the United States, but it is less of an issue now than it was in the mid- to late-1990s. In that time frame, the economic side of the software development community was very similar to what India seems to be experiencing: many projects and clients would take their chances on anyone willing to sling code because demand for software skills and labor exceeded supply. As demand has relaxed, the supply has as well. We've lost some good software developers to this, but a large percentage of those who don't really care much about software development have been affected by this.
It is human nature to follow the money. Many people don't care what the job is as long as it pays well. This may be fine for certain occupations, but it is a big disadvantage in software development.
Problems with the Education of Software Developers
When I read the post's author's primary complaint of higher education in software development in India as "importance is given to marks than to practical learning, students just cram the things and get score but practically they know nothing," the first thing I thought of is that he could have replaced "India" in that sentence with the name of any nation and it still would have been accurate. This seems to be another symptom of human nature: we do what is rewarded. Grades ("marks") are what help us get that first job, so priority one for most of us in college is to get the best grades we can get to land that first job. Of course, actually learning something is of benefit in keeping the job, but we're often (and not surprisingly) more worried about getting the job than keeping it. After all, you don't have to worry about keeping a job you never got in the first place.
Bjarne Stroustrup's article What Should We Teach New Software Developers? Why? (Communications of the ACM) provides a particularly credentialed opinion (in-depth industry experience combined with academic experience) on how computer science education needs to be improved even in the United States. I wrote more about this article in my post Must-Read Software Development Resources for 2009.
The Importance of Continuing Education
One of the stated reasons for the existence of some incompetent developers in India is "developers don’t keep themselves updated." This too applies everywhere and is closely related to the passion I discussed earlier. Most of us want the professionals who impact our lives (doctors, attorneys, real estate agents, dentists, civil engineers, architects, etc.) to stay current in their field and offer cutting-edge service. Users of software are no different than us and want the same from us. It's easier to invest the time and effort to learn more if we have a passion for what we do and if we truly want to master our craft.
Many developers do read blogs and articles and books, do attend conferences, do experiment or learn a new framework or language or library, and so forth, but many do not. Why don't more developers continually learn? There are many blog posts on this subject, but the explanation often boils down to we, as humans, having other interests and sometimes those interests completely dominate the desire or even ability to learn new things outside of the regular work week. The best situation, of course, is to learn new things on the job, but this can also lead to dysfunctional behaviors such as resume-driven development and Not Invented Here syndrome where the real motivation is to learn something new even when not necessary or desirable for the client.
Management is Where It's At?
The first three reasons listed for the existence of some incompetent developers in India were reasons that could be used to explain incompetent developers anywhere, including the United States. The fourth one did surprise me at first. The blog author wrote, "Everybody wants to become a manager." This is certainly not my experience with the majority of software developers in the United States. Many developers do end up in management through coercion (it's the only way to receive compensation past a certain level or to be allowed to make certain types of decisions), but most of the ones I know would stay in development jobs (especially low-level technical lead and architect positions) if the money, prestige, and career advancement were the same.
There are exceptions to any generalization, but I have noticed that, in general, the developers most in a hurry to move to management are those who lack any passion for development. This is sensible: why limit oneself's career growth or compensation for a job that holds no particular appeal over the job that tends to pay more or allows for faster career growth? The best developers generally seem to love development so much that they are willing to not "advance" up the ladder as quickly as they might because they are in no hurry to leave development. I earned an MBA several years ago thinking that I would one day need it. Instead, I've tried to carefully craft my career to allow me to focus on development and design as much as possible with minimal managerial duties as distractions. I truly enjoy being a technical lead and a mentor, but the Microsoft Project stuff and bean counting are not very appealing to me. It is likely that I'll end up in management roles again in the future, but I'm in no particular hurry.
There are exceptions to this, but they still take me by surprise. In a recent blog post, Bruce Eckel (of Thinking in C++ and Thinking in Java fame) stated "My interests have been shifting ... away from software development and towards business." This was surprising at first, but not so surprising when I considered a blog he wrote not too long ago called "Software Development Has Stalled."
It seems to me that software development is a little unique in this regard. In most industries, it is commonplace to want to rise as rapidly in the ranks as possible. Software developers want to rise technically and received recognition and accolades and better compensation, but the desire to "climb the ladder" doesn't seem as embedded in our brains as it is in the minds of others in other industries. I have even had managers (not developers) ask me why I want to stay in a full-time development position rather than move onto management. These individuals cannot understand this. So, again, what was described in that post about Indian software development may not be quite as true in the United States for software development, but it is certainly very true for the typical United States professional position.
I think we all benefit when software development managers have been successful software developers. It's my experience, however, at least in the United States, that many of the best developers I have worked with cannot picture themselves doing anything else but architecting, designing, and building software applications. In fact, as a beneficiary of many good software development managers (I hope to blog on the importance of good development managers in the future), I think it's very important to have qualified people in those roles and they are often important roles; it's just that the best developers often have no interest in those roles.
Giving Back: Open Source/Community Contributions
The fifth and final point of the post explaining the reason for some incompetent software developers in India is "No contribution to opensource community" and the post's author states, "I don’t know any of my friends or friends of friends including me who has contributed to opensource community." If one means actually contributing code to viable open source projects, I don't think the majority of developers in the United States do that either. However, if one means contributing to open source via writing blogs posts and articles, writing bug/enhancement requests, giving presentations, etc., then I think there is a much higher rate of open source contributions in the United States than direct code contributions. Even with the more widely arching definition of "contributing to open source," I think it's very safe to say more developers never or rarely contribute to open source than do contribute to open source.
Human nature yet again explains this phenomenon. Open source is, in some respects, a problem of the commons: we all stand to benefit from it, but it can be tempting to let others do all the work while we realize the same benefit without any contribution. With this in mind, I am always impressed with the time and effort people invest in creating, improving, and teaching open source products. The only explanation I have is that other human characteristics (personal pride, love of challenge, sense of accomplishment, satisfaction from helping others, etc.) come to play and override selfish interests enough to lead to these various types of open source contributions.
While the blog post Reasons for Incompetent Developers in India focuses on possible explanations for a certain percentage of incompetent developers in India, the underlying causes are not unique to Indians, but are part of our human nature. The degree that these are manifest may be different between two areas because of various forces at work (economy, labor supply, etc.), but the underlying principles are part of our shared human nature.
Even the existence of the post is a demonstration of contemporary human thinking. Only an Indian software developer could write the things that were written in this blog post on Indian software development without far more controversy. There are many reasons for this, but it is certainly far more difficult to argue with someone "on the inside" who has practical experience with what he or she is writing about. We seemingly can say derogatory things about our own nationality, culture, gender, race, or other demographic, but it is generally deemed unacceptable to say that about another demographic. It kind of reminds me of the concept of "You better not mess with my brother; that's my job."
I don't know much about the state of software development in India, but I have no reason to doubt that what this blog post author wrote is accurate for a certain percentage of Indian developers because I have seen many of the same explanations nicely fit the few truly incompetent developers that I have worked with (and I've never worked in India).