Finally, the highly anticipated essay on why computer programming sucks.
Temporary nature of knowledge capital
Let’s being by reviewing what I previously wrote about the four types of human capital. Computer programming is a job that’s heavily dependent on temporary knowledge capital. It’s temporary because the powers that be keep changing the languages and tools that programmers need to do their jobs. In nearly all other professions, knowledge capital increases as you grow older because you keep learning more about your field. But in computer programming, the old knowledge becomes completely obsolete and useless. No one cares if you know how to program in COBOL for example. It’s completely useless knowledge.
Even though I haven’t been working in computer programming all that long, I have already seen most of the technologies that I first began working with become relegated to the garbage pile. Visual Basic 3.0-6.0? Useless knowledge. I haven’t seen any vintage Visual Basic since 2002. And don’t confuse Visual Basic.NET with the classic Visual Basic. They are really completely different technologies.
So what advantage does a 60-year-old .NET programmer have over a 27-year-old .NET programmer when they both have, at most, 5 years of experience doing .NET programming? Absolutely none. I’d make the case that it’s better to hire the 27-year-old because he is still at the stage of his career where he enjoys the stuff and is therefore more motivated to learn and work harder, while the 60-year-old is surely bitter about the fact that he’s getting paid less than the younger programmers. No one wants a bitter employee.
This assumes that the 60-year-old programmer has even learned .NET programming. Every time a new language or technology comes out, the programmer faces a fork. In one direction he gets to work with the new technology, and in the other direction he continues working with the old technology for too long and therefore falls too far behind to catch up. The older you get, the easier it is to wind up going the wrong way when you reach one of these forks. Because as hard as it may be for a 22-year-old to imagine, as you get older your desire to completely relearn everything decreases, so you are likely to succumb to the temptation of staying with the familiar technology for too long.
Because of the temporary nature of the knowledge capital, computer programmers quickly reach a stage in their career when their old knowledge capital becomes worthless at the same rate as they acquire knew knowledge capital. Their total knowledge capital is no longer increasing, so neither does their salary increase. They have reached the dead end plateau of their career, and it happens after less than ten years in the field.
Other professional fields are not like this. I remember reading the classic 1933 edition of Securities Analysis by Benjamin Graham, and as I read it I was amazed by how useful and relevant the material was even though it was more than 65 years old.
Lawyers are still citing Blackstone’s Commentaries on the Laws of England which was completed in 1769. Now there’s an example of a profession where knowledge capital deteriorates at a very slow rate.
Computer programming is a low prestige profession. This is evidenced by the fact that people from affluent families rarely go into computer programming but instead will seek out the more prestigious professions such as law, finance, and medicine. Of course there are some exceptions. There was a programmer who worked for me whose father was a doctor. But more typical was another programmer who never finished college and whose favorite hobby was hunting.
And that brings us to the issue of education. Students at Ivy League universities are not majoring in computer programming. There is a prestigious school, the Massachusetts Institute of Technology, devoted to science and engineering, and while I’m sure that there are some students there who are majoring in “computer science,” the science that’s taught isn’t related to the dirty low-prestige job of creating e-commerce websites using ASP.NET. On the other hand, practical computer programming is a popular major at bogus for-profit schools like Devry “University” and the “University” of Phoenix.
Now some may ask, “Who cares if the prestige is low, as long as we’re getting paid good money?” This is a fair question. First of all, there are some practical social benefits to having others perceive your profession as being prestigious. As a Chinese immigrant at the University of Virginia wrote, “whatever your position is, as a CS person, you are socially classified as a geek. At my school, University of Virginia, being a rich frat boy and having a future in investment banking or law gets you a lot further status-wise even though you may not necessarily be paid more.”
But the prestige of the profession affects both the work environment and the future economic viability of the profession, as will be discussed below.
The foreignization of computer programming
I’m sorry about using a word that doesn’t exist in the dictionary, but foreignization best explains what’s happening in the computer programming industry.
First of all, there is the familiar outsourcing of jobs to foreign countries, mostly India. Because of this, the computer programming industry within the United States is an industry with a shrinking number of jobs, although as a worldwide phenomenon I’m sure computer programming will grow at a brisk rate. Would outsourcing of computer programming and other IT jobs be such a big trend if the industry were more prestigious? I think not. You don’t see lawyers being outsourced. In fact, by law, only members of the bar are allowed to practice law, so it would be illegal for foreigners to do American legal work.
The other half of foreignization is the near abandonment of the domestic IT market to foreigners. This is a trend that is accelerated by the issuance of special H1-B visas that allow extra computer programmers to come here and take jobs away from American programmers. Computer programming (along with nursing) has been specially targeted by our government for foreignization.
Foreignization creates a vicious circle effect with the low prestige of the profession. Because the profession has low prestige, employers balk at the idea of having to pay high salaries (while it seems perfectly appropriate if a lawyer or investment banker is making a lot of money). Thus the demand for more H1-B visas so that salaries can be decreased. In turn, Americans see an industry full of brown people speaking barely intelligible English, and this further lowers the industry’s prestige. Computer programming and IT in general is now seen as the foreigner’s industry and not a proper profession for upwardly mobile white Americans. [The Indian and Asian people I've known in the IT industry are nice people, and normally I don't pay attention to their different appearance, so this should not be taken as a racist dislike of non-white people. I am only accurately describing the fact that the typical white American thinks negatively of a profession that's predominately non-white. And I stand by my belief that people born in this country have more rights to the money being created here than foreigners. Asian countries feel the same way about foreigners. Asian countries are, typically, a lot less open to foreign worker immigrants than is the U.S.]
Because there is no reason to think that the trend of foreignization will reverse, this will ensure that the future of the industry will be lower salaries.
Project management sucks too
In order to escape a job where the future is bleak for older programmers due to the rapid depreciation of computer programming knowledge capital, computer programmers face the need to move up to management or likely wind up as underemployed fifty-year-olds, only suitable for lower paying IT jobs like “QA” because they no longer know how to use the latest and supposedly greatest programming tools.
It is often suggested that the most natural next move “up” is into project management. But the first problem with this situation is that project management sucks too. It doesn’t even deserve to have the word “management” in the title, because project management is akin to management as Naugahyde leather is to leather. Project planner and status reporter is the more correct title for this job. Once you take the word “manager” out of title, it loses a lot of its luster, doesn’t it? Everyone wants to be a manager, but few would want to be a project planner and I daresay no one would want to be a status reporter. Status reporting is generally the most hated activity of anyone who endeavors to do real work.
One can’t write about project management without mentioning the worst piece of software every written, Microsoft Project. Somehow, an entire project management industry has developed around this crappy program which no one can figure out how to use. (See my previous post about Microsoft Project Server and Battlestar Galactica.)
Formal project management is more of a pseudo-science than a real profession, because despite the increasing use of formal project management methods approved by the Project Management Institute (yes they have their own institute), there is no evidence that software is getting better or that fewer software projects fail today than did ten years ago when formal project management was in its infancy.
The growing popularity of project management has nothing to do with better software. It’s really more designed to please senior management (the real managers who control the purse strings). Real managers, who usually don’t understand anything about computer programming but who don’t like the idea that they have to pay high salaries to a bunch of people from foreign countries, love the reports presented by project managers, because the reports create the illusion that progress is happening and that the money being spent on the IT project is not being wasted.
Even if the computer programmer wishes to sell his soul and enter the pseudo-scientific field of project planning and status reporting, the transition is becoming more difficult. The trend is that project management is branching off into its own discipline with its own educational requirements and certification process. Thus the experienced computer programmer will usually find that employers aren’t interested in having an ex-computer programmer “manage” a project, but rather they seek someone with PMI certification and years of experience in project management.
This trend, in which people without computer programming experience manage computer programming projects, is a result of the low prestige of computer programming. People with high prestige jobs, like surgeons, would never allow themselves to be managed by non-surgeons. In a complicated medical procedure there will be a head surgeon overseeing the surgery, and not a project manager without any medical training. Lawyers have Model Rule 5.4 which makes it unethical for non-lawyers to manage lawyers.
Obviously, the problem with the computer programming industry is that it lacks a central organization to create barriers to entry and to lobby state and local legislatures.
The working conditions suck
This relates to the prestige thing again. When a company I worked for wanted to save money on rent, guess what department they decided to move to the low rent satellite office? You guessed it, the IT department.
If you look forward to one day having your own private office, then computer programming sure isn’t the way to go. At a law firm, each lawyer has his own private office. Computer programmers are cubicle employees, not considered important enough to be given nice workspaces.
Employers are even too cheap to invest in proper tools for the computer programmers. Take monitors, for example. Every computer programmer knows that modern development tools are easiest to use if you have a really big monitor, because you can see more lines of code at the same time, and because there are a bunch of ancillary windows which steal screen space from the main code window. My home monitor is a 21” 1600 x 1200 Samsung SyncMaster 214T, and it sure was worth the $900 or so that I paid for it. An employer interested in getting the most productivity out of its software developers would supply them with proper high quality monitors, but they don’t. In every job I ever worked, the computer programmers never had the best monitors.
If you walk over to the graphic arts department, you will see really big monitors. The graphics people could surely make do with smaller monitors, but even though they make less money than computer programmers, they have been able to convince higher level management that their work requires better hardware. When computer programmers request better hardware, they are often seen as whining geeks who just want to waste the company’s money on unnecessary high-tech toys.
Other professionals get proper tools to do their job. For example, lawyers are given access to Westlaw or Lexis, and a library of books. The amount of money per year per lawyer spent on research materials most surely exceeds the money per computer programmer per year spent on computer hardware. If lawyers were treated with the same disrespect as computer programmers, they would be told to stop whining about the lack of research materials and to go use the public law library.
So what's a good profession?
After spending so much effort explaning why computer programming sucks, I think it's only fair to suggest some better professions for any young people who might be reading this. Unfortunately, that's hard to do. The best professions, because they are so good to work in, have more people trying to enter than there is room for them. Thus you can graduate with a law degree and find that no one wants to admit you to any of the good legal career tracks.
I think that, if you can't get into a Top 14 law school or a top graduate business schol, then public accounting probably provides a better career path than computer programming. You need to start out as an auditor at a Big Four accounting firm, and the salary in the early part of your career won't be as high as in computer programming, but at least older accountants are valued for their experience and knowledge. It's a career where you can still be employed at forty or fifty.
If you are technically oriented, then you should consider a career in patent law. This requires you to get an engineering degree and then go to law school. Because such a tiny percentage of law school graduates are qualified to take the patent bar, you will be able to get jobs in intellectual property law which the other law school graduates are unqualified for.
I have written a major followup to this post: The death of the generalist software developer.