
Home
About Apple Career Experiences General Graphics Hardware History Humor Interface Networking OS Opinion Politics Programming Quotes Reviews Security Software Sound Thought Web

Cheap International Airfare Online
Wachovia online banking
Get Free Coupons Online
Finding the perfect discount hot tub
Payday Loans
Stock Trading Online
Stuffed Animals
Smart Investing Online
|
 |
Computer Programming What's it like?
By: David K. Every
|
Kind: Created: Size: |
Article 2003-01-01 15 KB |
|
|
 |
any people have asked me over the years about Software Engineering; what's it like and so on. They see the glamour of the job, believe it or not, without seeing the downsides.
There are many positives to the job; because it takes a lot of knowledge to do well, so there are few that will do it. And because it requires thought and continual learning and change, there are fewer that can do it well. So getting a job that's in demand and hard to fill, generally means reasonable salaries and relative security, compared to other jobs; there are often companies looking for people.
There are many downsides to the career path as well. I'll mention many of them not to discourage people, but so they can think about the job with their eyes wide open. I don't think this career has it worse than many other careers, which also come with their share of the problems; but I do think there are many problems that others don't know about.
                  
Most programmers go into the career path with visions of creating things. Software engineers often have an artist streak, along with a bigger streak to control and order the universe as some cathartic way to make up for all the pressures and injustices done to them as teenage nerds.
In typical fashion, the world doesn't choose to let them have that level of satisfaction. Most get stuck on legacy products. For each new product or project, there are 100 existing products that still need support, coding, and new features added. And the older products are usually bigger and have more people on the projects. If you do the math, you can guess where most of the programming jobs are.
Shit rolls downhill and newbies in any industry are the valleys. So new programmers get all the dirt jobs and projects that no one else wants. This means that they don't get to create new things; they inherit and get to fix other people's bad code. Not only that, they usually get to fix the old things that are so bad that the other programmers don't want to get near them. This just pours on the job satisfaction, and is the equivalent to morale that taking a classically trained artist, and making him paint the interior walls of public restrooms beige, all day long.
Most programmers I know never went into the job thinking, "I want to try to decode and fix other people's garbage all my life", yet that's what many do. Those few that are getting to create things, are not left alone to do their jobs and actually create, they are beholden to marketing and management who will "prioritize" what features they get to work on and when. This is like telling them, "take your 10-20 years of experience and knowledge and flush it down the toilet, and listen to me, because I once read a technology magazine or talked to a customer and think you should be doing this". Most managers or marketing people want to win; which isn't about making the best product or making money or what the programmers care about; it is usually about getting their way no matter how lame or impossible that is.
              
One of the toughest aspects of Software Engineering is that people don't really know what you do. They get that you program computers, but most don't even know what that really means. Many think that programming an accounting program, writing a device driver, or doing a game are all the same job; when these are radically different disciplines, each which can take many years to master, above and beyond the general knowledge. Many programmers have to be so deep down into one area of a 20 or 100 person project, that they don't even have a clue as to how their whole system works. This is like an airplane designer whose specialty is landing gear wheel bearings, he may or may not know anything about how the actual plane works.
Strangers or friends and family not understanding what you do, isn't that big a deal. Yes, it is annoying when they find out that you're a computer programmer, that they try to have you help them fix their home computer that the dog or kids urinated on, and then they installed 27 trojans, worms or viri that they got from the Internet, after just deleting the driver directory; and they want you to fix it. As if somehow doing computer repair or IT (support) is vaguely related to programming some satellite or whatever it is you do - but hey it is all technology and computers, right? However, while that is annoying, it doesn't affect your livelihood or stress level compared to the other things.
The real issues though are that most people in your company, including or even especially the decision makers, don't understand what you do. Think about that; about 95%+ of the stress in a programmers life is that people don't know what they do, or how they do it.
Most Human resource people that are hiring programmers, and filtering Resume's, don't understand what they're doing or what the people do. So they can't figure out that someone that's been doing something on one platform for many years can easily apply that knowledge to another platform. Nor do they understand that if a programmer has a decade of experience in a concept like OOD, then the syntax like C++ or Java is a pretty minor jump. They get bullet items on Resume's and if they match, great; if not, they just claim there are no qualified candidates. If you get your Resume around them, they claim that you've already submitted a Resume and there's a conflict, thus you can't be considered. Getting past inhuman-resources becomes a game, sort of like being thrown to the lions in Roman arenas was just a game.
Even when you get past the roadblocks to get a job, most Management or marketing in many organizations don't understand what programmers do, so they think of programmers like widgets and resources. If we fire these 10 programmers, and move these 3 over from another division, then they balance the resources better. They don't even begin to grasp the differences in expertise, or that you can't replace 10 device driver writers, with 3 Database programmers and get a reasonable outcome. They look at things like pay rate or location for who to hire and fire, and not abilities or disciplines. And the last thing in the world they want is some peon programmer trying to explain to them why their great idea is a bad one.
I've seen company after company make horrid management decisions, eliminate 80% of the core competency and knowledge in a company in a cost cutting measure, and then drive out the remaining 20% by trying to force round pegs into square holes; and blame the pegs for the poor fit. There's a joke that Dilbert (the comic strip) is life; but that's not completely true - Dilbert and Scott Adams aren't cynical enough for the real world. Seriously, if you can't read Dilbert, and picture yourself in that world and laughing at what's going on around you, then you should consider a different career path.
Managers often don't understand schedules; they were taught the Attila-the-hun management system and have a "black belt" in marketing and sales. So they think if they push harder, they'll get more out of engineers. They fail to realize that while they get more features in less time, they increase risks while decreasing documentation and quality; and quality and purity of design is what most engineers value their jobs about. But those failures are not managements' problem; engineers will get blamed for that scheduling snafu later. Management also doesn't understand how complex systems interoperate; or that there is such a thing as integration; you just plug it together and it works, and if it doesn't then that's because you're too stupid to plug it together. And every time a programmer says "No, that can't be done that way", it isn't because the engineer knows more than management about the specifics of their job, it is because engineers are just moody and temperamental prima donnas.
I can't stress this enough; a complete lack of understanding about engineering or what it is engineers are doing is not going to prevent management from making decisions and trying to micromanage the engineers themselves, and get mad at the engineers for not being able to do the impossible. Get over it.
Many can't get over the stupidity, and go job to job looking for utopia; or at least the fictitious job where complete incompetence is not the norm. Those looking for where the grass is greener are usually continually amazed that things can, and do, get worse from their previous jobs. I have people from many different companies whine about how their management sucks worse than anyone else's; then someone tells them stories about places they've worked or decisions that are made, and there's silence while they process that. Four programmers around a table can quickly devolve into a game of, "my management is more stupid than yours". The sad thing about human nature is that you cannot over-estimate how low it can go. Sadder still is this is in America, one of the most effective and productive nations in the world; many foreign countries have even more bureaucracy, hierarchy and stupidity.
              
The Peter Principle states that people rise to their "level of incompetence". Which means you succeed and rise until you fail, and then stay there indefinitely, being incompetent and making others miserable, but being unable to rise further. Engineering works like that too.
Imagine this; you are a good and competent engineer. This usually requires certain skills; the ability to focus to the point where you ignore the anarchy around you. This includes the ability to ignore managements' mandates, as following them is the sure road to failure. You probably also have the interpersonal skills and hygiene of a rabid wolverine, why waste useful synapses on such trivia that could be better used remembering variable names or archaic concepts about operator overloading and constructor precedence. (You have to have once smelled a wolverine, which is part of the skunk family, to fully appreciate that.) Since this person has demonstrated that their work is more important than their personal life, or life in general, and they've succeeded in-spite of all the attempts to be helped to death by management, they've proven they are unmanageable, therefor an obvious leader. They will either be fired or put in charge of a team of people and the next project; based on the scientific "eenie, meany, minie, moe system".
Take a minute and digest that. The skills to manage a team of people well are diametrically opposed to those of succeeding as a software engineer. Engineers need to focus on one thing in-spite of the chaos around them; managers need to defocus and pay attention to their surroundings. Engineers often like to control and micromanage a computer, Managers need to not try to control everything and learn how to delegate and how to motivate people, not just force them to do what they want like they are computers. Engineers are often completely insensitive to social norms and focusing on the task and got into computers because they are sick of humans, management is about being sensitive and empathetic and helping others to focus on their task, usually to the detriment of your own. So the recipe for a good engineer is the exact recipe for an arrogant and caustic control-freak of a manager or team lead. Thus there are a few, see very few, team leads or engineers that clawed their way up the ranks and have both sets of skills, and know when to use each; most are just people who followed the peter principle and are now an obstacle to everyone around them.
Of course not all managers are like that. The other common type of leader is the ex-engineer that wasn't very good at all, but realized that quickly, and made a name for themselves as being a yes-man brown-nosing sycophant that knows politics and finger-pointing better than the other asocial engineers, and so got to the top through conniving and treachery. These people are often destined for great things. Like any lesser minion of Satan, they've sold their souls and so they'll now torture those around them; trying to make everyone around them suffer through long drawn out tales about how when they were programming and used punch cards, how they single handedly saved IBM by recognizing that someone had put the cards in the wrong order, and so on. They'll also prove it by trying to help the real engineers by coding over their shoulder, while requiring long drawn out explanations about why something isn't done in this other way that can't possibly work.
Both lesser managers will often drive out the good managers, because the evil and incompetent managers quickly realize a threat; and if they can agree on only one thing, it is eliminating that threat, so that they can get back to their one true love - the cruel torture of damned souls beneath them.
         
I've read a few places that the average "lifespan" of a computer programmer is about 7 years. Now they were talking about career wise, but I wouldn't be surprised to hear of programmers driving into walls or jumping off tall buildings either. But what that 7 years mean is that programmers spend 4+ years of school to learn how to program, and at least that many years learning on their own, all to get a "career" that lasts about the same length of time as their learning. Imagine Doctors only being able to tolerate their job for 8 years, and you get the picture.
Now most programmers shift out of programming into other technical career; usually they go into technical management, technical sales, support, IT, a padded cell or prison, or somewhere technical but where they don't have to deal with the frustrations of coding 70 hours a week. Not because they don't like coding, but because they can't take what goes with it. A very few start up their own companies, where most go broke, but a very few escape with some successful product, until they are bought out, and all their wards are dragged back into the muck-pit of corporate America, and only a few escape to some isolated mountain top, or some shack in Montana where they mail pipe-bombs to everyone who works or teaches in technology areas.
The purpose of this little rant is not to bum people out, or scare people away from a career in programming or software. Many of those other paths that people can go into are built on the knowledge and experience they got the hard way through programming. Experience and wisdom is what you get when you don't get what you want; and programmers get a lot of that - so those few that escape with their sanity are better humans for it. And I've worked in enough industries and segments to know that other industries or jobs are little better. But at least if you go into programming knowing what it is like, you can be prepared. Or if you have a conversation with some programmer, instead of thinking they've got a cushy job with great pay, you can empathize a little or begin to grasp the stresses they might be living through; and thus avoid endangering your own life by asking them if they like their job, or if they could just look at a problem you're having on your computer. 
Format for Printing Mail
|
|
 |
 |