I thought I would comment on a blog entry I read on “Why a career in computer programming sucks” since I’m in the process of looking for my first job as a software engineer. I pretty much agree with him, though I have a couple of comments.
Anybody who’s knows much about the field of software engineering knows that there are a lot of platforms, languages, and other tools out there to use. Generally somebody who wants to develop a product will choose a technology (for whatever arbitrary reasons) and stick with it for the product’s life cycle. This means that when they are looking to hire somebody to work on the project they’ll prefer somebody who has experience with that tool.
The author argues that programmers have “temporary knowledge capital” and that it is temporary because tools change often. This means the engineer has the choice of either learning another language or remaining with a language that grows more obsolete by the day. I’ve felt the pull of a familiar language keeping me from learning another and that feeling will no doubt get stronger as I get older. Nonetheless I don’t think it’s correct to say
“Actual coding is only 10% of the technical side of software development. The other 90% is knowing the the libraries and the idiosyncrasies of the tools”.
It’s my guess from what he says on his blog that he has spent a lot of time over his career learning many new technologies and that it has biased him to thinking that this is much of the work required toward being proficient in one language. The fundamental skills of coding, I would say, constitue 80% of the learning while learning a given language takes the remaining 20%. I can say this fairly accurately as a young developer who has learned the fundamentals of programming within the past decade and have more perspective on the process of learning coding as opposed to learning one language.
“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 disagree. A 60-year old programmer has a lot more general wisdom on when a technology or a feature is BS, what things can go wrong when developing a product, and the best structures and practices that can be applied to a given situation. This is the sort of experience that you can only get through a slow process of trying everything and seeing what floats. I certainly don’t have it yet, though I can understand it being easy to underestimate it’s value.
In general, regarding the ever shifting nature of computer engineering and the lack of prestige the geeks get the thing to remember is that general purpose computers are less than 60 years old. The author compares software engineering to law, finance, and medicine which have all been around for centuries and have all needed to stabilize to the standardized, safe, and prestigious fields that they are. I said I agreed (to an extent) with his point that a career in computer programming sucks, but I don’t believe that it will forever. In a couple of hundred years, if not hopefully in a couple of decades with the way the technology industry moves, languages will die, merge, and become compatible with each other ending in a state where the computer programmer can be like any other craftsman or engineer. So sure, it sucks now but I have a lot of hope.
Software engineering isn’t life any other craft or field of engineer, though. I remember my computer science teacher telling me in high school that programming is a multi-disciplinary field. That idea has always stayed with me, though I didn’t realize how true it was until recently. A general purpose computing machine can be wrangled to do any task. Teachers, artists, scientists, and others have taken to learning to coding in order to allow themselves to do more in their chosen profession. A geek who loves nothing more than to hack all day can do just that, but if they are good at programming they should know that the programs are meaningless unless there is a need to apply meaning to it. The geek should therefore expand their knowledge of another field. They should do this not for the sake of having something to fall back on, but because somebody who can, for example, understand both neuroscience and how to use a computer to study neuroscience better than anybody could before is worth more that a person who can only do one of the two.