Programming: Love It or Leave It

In a recent Joel on Software forum post Thinking of Leaving the Industry, one programmer wonders if software development is the right career choice in the face of broad economic uncertainty:


This is a companion discussion topic for the original blog entry at: http://www.codinghorror.com/blog/2008/12/programming-love-it-or-leave-it.html

I still love programming – nothing is better than finding that ‘groove’ where you’re building up something simple yet sophisticated – but over the years I’ve found that a counter-balancing ‘frustration’ has been growing as well. We keep writing new stuff, different, but ever so rarely better, and I keep finding that the instabilities, and the awkward interfaces, and the overcomplicated behaviors, and all of the once existing but now vanished features have formed some type of wall that we seem unable to break through. We’ve built up lots of data, but overall we’ve made dreadfully slow progress, given the sheer number of people in this world that are hammering away at their keyboards.

I’d be far happier if our efforts were really contributing to something huge, rather than becoming short-term disposable code. It’s hard to see so much effort get wiped out every five to ten years and replaced with yet another group of people building similar things, in a similar way, with similar problems.

Given that, there are some days that I keep thinking it would be nice to switch to wood-working, or some other more hands-on occupation. At least if I sweat really hard to build a gorgeous desk or cabinet, it will last my lifetime, and there is no chance that it will get replaced by someone else’s wood 2.0 version.

Paul.

I have recently quit my secure and well paid corporate job to go back doing software development because I love software development. My corporate job as an IT Architect became more and more frustrating every day, got too abstract and I did not get the feeling of changing anything. With software development I get rewarded everytime I see people using my software. Software development allows me to do real and useful stuff and gives almost instant rewards. I strongly believe that the software industry is still a great place to be and any software developer who does the job with passion will have no problem to find decent and challenging work.

One of my principles is to be selective in what I am accepting as a job. I wont accept any quick job that brings in some quick money using a technology I don’t like. As a software developer I have the chance to attract the jobs I am interested in.

It has been so much fun since I quit my corporate job.

Part of it is that if you’re passionate about the field and live and breath it in both your on and off time, there is no longer a ‘closing up the computing station in a cupboard’ mentality. I equate this as to someone that can see a vast terrain and they have full vision, compared to less savvy folks that are feeling around and running blind. It isn’t arrogance but rather just a new reality, and it becomes more exaggerated the longer the separation exists. If I had to make a prediction it would be that role reversals are really inevitable here. With these economic downtimes we are hopefully witnessing the rolling out of a few million wheel chairs, figuratively speaking, with the surviving companies operating in intelligent, transparent, and well intentioned manners.

Jeff’s is very similar to the old you’re either with us or you’re against us mantra, with us this time being what Jeff considers to be a good programmer. Not every good developer will automatically share Jeff’s attitude, and Jeff seems to think that if someone doesn’t agree with you on certain things then they cannot be a good developer. That’s a rather myopic attitude.

Programming is all about solving problems, and a perfectly competent problem solver might want to leave software development because:

  • I love solving logical problems, I might get more satisfaction out of applying my skills to other problems (maybe science or logistics or business analytics or diplomacy?)

  • The advice I give might be ignored and the work I do might get destroyed in front of my eyes.

  • The job might require me to put in more hours than I am willing to do or place me under more stress than I am happy to deal with (these two vary from region to region)

  • I might one day want to move up the food chain, or find something which gives me more money. What are the options for a developer, apart from architect or dev team leader?

I can already hear some of you shouting if you’re good, as you claim to be, and you hate your job then find another job (probably including smug comment about how good your own job/office is) - generally you can usually find one where the work is more interesting, or less stressful, or where you have more clout or where you get more money, in your region, but it’s rare to find one that beats the old one on every criterion.

If I express doubts, does this mean I am unfit to do the job or that I am selfishly depriving someone more deserving of my job? This is a 40 hours a week of my time in return for money, not a religious crusade.

Pay is important, in The Netherlands the salary for developers isn’t really great so that is an important reason to quit programming.

What a load of elitist garbage.

As a recent graduate of a bachelor of computing (more a general degree rather than strictly programming) I have to agree. I never ever wanted to be a programmer, but I am obsessively interested in interface design and business cases and a bunch of other related things. Unfortunately a lot of people feel software development is programming, when it’s a whole bunch of other careers as well.

I don’t want to be a programmer, I’m only ever going to be average at it (mostly due to finding it tedious and boring by nature) and I’m very proud of that. I’m now pursueing an MBA (Master of Business Administration) because I’m still interested in making quality software. Just not coding it up myself, if that makes sense.

So I totally agree. There are a lot of those people being average at programming who should be marketing, or going into a company and changing it’s methodology, or working on the usability and visual design elements of software.

Just my 2 cents in passing from a mature aged recent university graduate.

You are absolutely right. During the christmas break I stopped working on my studies (computer science) for a few days and did some Project Euler (http://projecteuler.net/) riddles to learn a new programming language (Scala). I think people who do not enjoy riddles like that and at least wish they had time to work on them are in the wrong business :slight_smile:

Let the anti-Indian comments begin …oh wait they already did.

I would say, I know both sides of perspective concerning the current topic.

I had some time where I was frustrated to work as a software developer, because I was faced every day with this truth - what ever I can do creating great software, there is someone around destroying my efforts with bad decisions and management.

But then after a while, struggling with that situation, I come to the basic idea. Even if there is someone stupid around, I still do great software. Even if decisions making projects fail, my software works well and is good designed.

Thus my call to arms for all developers is: Focus on your job. At the end, if a project fails or succeed, you will be proud on your work, crafted with your skills.

And I fully agree, programming is one of the best jobs available. Because we can work under excellent conditions (in most cases). And we create something which can be used by someone else and which can help making live or the job of other people more easy.

The thing about programming is that it’s easy as hell once you relealise how most OO-languages are structured.

Then again, I can imagine that after 20 years of doing the same stuff over and over, you want a break.

I dunno, I like programming because it’s easy once you know where to find which piece of code. Most things you want have allready been written before you and are just waiting to be picked up.

When I work on something new, I always use the same structures I used on previous programs. Sometimes I even just copy-paste, since it’s all that needs to be done.

Programming, love it or leave it… or something more individual then that perhaps?

I’m writing software for more than 10 years (counting only my professional work as a programmer/developer), so this clearly must be some kind of love. :wink:

Hi Jeff,

While I think you make some good points in this post, I disagree with you on this point: if a programmer ever hints, even in passing, that they might possibly want to exit the field – they probably should. I have been programming for fun since I was 15 (first language was C/C++ for hacking my BBS software), and didn’t stop when I made the relatively obvious choice to go into it as a career. I really love to program, and I have since the exhilerating moment that I realized it wasn’t that difficult to understand and modify the computer code that underlied my favorite software.

That said, I have considered abandoning programming as a career in the past (possibly to go into a non-coding technical management role). Its not because I don’t enjoy programming, its because I also enjoy other things and I am sickened by all the bile on industry blogs and twitter that is given creedence by thought leaders in our industry, rather than cast aside and repudiated as it should be. Unfortunately, many of the leaders in our industry feel that everyone except them and their circle of friends (or the people that share their particular methodologies and/or technology preferences) are somehow incompetent. (I still have yet to meet this Mort fellow.) Each leader has their own little list of pet methodologies and/or technologies and/or books (be it TDD or the latest MSDN fad or Lean or NHibernate or the latest UX design fad or the insistence that every programmer must be an avid blogger) that they feel every competent programmer should know, and basically you’re a Mort if your list of skills is not a superset of their list. The only thing all of the leaders seem to agree on is that there is some sort of list that programmers worth their salt should live up to. The problem is that none of them live up to each other’s lists, so its hard to take any of them seriously.

Although I enjoy programming, I also enjoy hiking, socializing with my friends and family, mountain biking, playing with my dogs, lifting weights, cooking, canoeing and more. If I read every post on all of the must read industry blogs and read every must read software book and played with every new relevant technology, and contributed to OSS, in addition to working my day job, I would never get to do any of the other things I enjoy doing, and probably wouldn’t be married for long (and as much as I love programming, just programming all the time isn’t enough for me). At first blush, one is given the impression that the only two alternatives to this sort of all-encompasing career obsession is to either leave the software field or be the forever disregarded, mocked and insulted work-a-day programmer known as Mort. This sort of black-or-white fallacy is the impression that one is left with by reading posts like this.

The reality is that there is a whole spectrum of programmers, from really bad to really good and everything in between. Some programmers are experts in this, some are experts in that, and some seem to be experts in pretty much everything (usually the ones that are unmarried and don’t seem to have any non-geek friends or hobbies).
At the end of the day, I won’t leave the field because I love to program and I can’t think of anything else I enjoy as much that I could get paid as much to do. The right solution for all programmers is to recognize the nature of the spectrum, and pick the place on it that they feel most comfortable. I know a lot of developers that spend less time staying up to date than I do, and I still respect them and their opinions, and they are still able to do a great job delivering technological solutions to business problems. This is not directed at just you, but to all the software pundits: Please stop picking on the work-a-day programmers that make the business world function. Just because they don’t read your blog or use your methodology doesn’t mean they’re not effective at what they do. Give people some credit and exercise some professional courtesy.

Regards,
Pat Gannon

Jeff, what should I do if I love programming but constantly doubt my technical ability? I mostly work alone lately (and make some decent money doing it), so I don’t have full perspective.

My persistence over the years has led people around me to believe I am a good programmer, but I often wonder whether I would be naturally better at something else? However, I am in a very good position and am concerned I would give up all of this for something that isn’t as good.

I guess that’s a case of the grass is always greener on my side of the fence :slight_smile:

I agree. I work a few people that should not be programmers, but I also work with some brilliant programmers. So the trade off is usually the not so good programmers work need to be redone, but the good programmers work always learns me something new or just different from how I would have done it.

When it comes to remuneration, yes programmers are really getting paid well and I lived through the bubble burst in 2000 and I always had a job that paid well.

On the project failure rate, unfortunately a lot of my projects failed but I am glad to say that none of them failed because of bad code or not meeting requirements, was almost always bad management decisions or just plain over spending by management on luxuries for themselves etc., so cash flow would become and issue and the good programmers will leave seeing as they do not need to take pay cuts just because management could manage the cash flow correctly, so then it will all go downhill from there.

I’m also glad those people have moved on–or moved back–to their original industries. Most of them tended towards the VB side of things. Marketing majors, finance… a varied bunch, none of them with computer science or engineering degrees. Most didn’t even have a hobbyist’s background!

We work in a great industry. I’ve been doing it long enough now (~15 years) to have seen some of the good and bad and, trust me, there’s much more good than bad.

I’m currently half way through a Software Engineering degree and I’m still amazed at some of the people on the course. In the first year, the class size dropped from ~90 to 9. Even some of the other students utter comments like Programming is stupid, it’s too hard. I don’t think I’ve ever felt the urge to leave the programming world, only to make myself a better programmer. If Universities and employers just did an enthusiasm test for prospective students/employees they could probably weed out a whole segment of would-be-shouldn’t-be programmers.

Actually most programmers are bad programmers. No really, they are. The problem is that everyone can be a programmer. This isn’t true for other jobs. Not everyone can work as a lawyer or doctor for example. However nobody forbids you to work as a programmer, you don’t need a special license, there is no mandatory education either. If a company hires you as a coder, no matter if you ever had any education on this matter or not, you work as a coder; period. And this itself is not even bad. Some of the best coders on earth never had any education in computer science, still they are brilliant coders. However, many people had no education and are just horrible coders.

I’m forced to work in teams - not every project can be a one-man-project. I just got disappointed too many times, so I don’t really trust other team members. Right now there is exactly one person on my team I trust to write decent code. She still isn’t doing things the way I would do them, but I’ve seen some of her code and is pretty good; thus I have no fear to delegate a task to her and I know she will do a good job implementing it. Regarding the rest of the team, we usually split tasks into independent sub-tasks, each handled by a different programmer. Usually I prefer to not even see the code of the other programmers. I will just rely that their code worked as we said it should and if not, they shall please fix their own code. Whenever I have to read and fix other people’s code it only takes me a couple of minutes to get the point where I feel like hitting my head straight onto the desk. Can anyone write any less readable code?, Ever considered that RAM and CPU time are limited resources?, Wow, is there a more complicated way to solve this simple problem? I don’t think so; these are the usual thoughts going through my head. That’s why I don’t want other people playing around with my code on the team.

Often when I tell someone how they shall implement it, they start writing a horrible mess of something that slightly reminds one of code, then they get all desperate because it does not work and get mad at me for telling them how to implement in the first place. Usually it ends with me saying Come on, stop whining - I’ll do it. After half of the time they already spent on it and with about half as many code the task is done; exactly like I suggested it in the very beginning. I fail to see how somebody can write 1000 lines of code and spend 4 hours on the task if the implementation doesn’t even take 500 lines and can be completed in less than 2 hours.

I think the problem is, not everyone loves coding the way I do. I started programming in Basic when I was still in primary school, I learned x86 assembly only one year later (not enough to write any meaningful applications with it, but enough to understand how CPUs work), I learned Pascal, I learned Java, I learned C, I learned PHP, I learned Perl… just for the fun of it. I love my job, it is actually my hobby and my job at the same time. So I love my code. The lesson I had to learn is that not everyone is like this.

Doing something with love makes you doing it well. The saying something has been made with love (e.g. when baking a cake) is really a meaningful one. If I hire someone to remove all wall in my living room and replace it with a new one, he may not love doing that, he may hate doing it, but he does it, why? It’s his job, I pay him for doing it and he needs the money for a living. So he will do his job, he will try to make a decent job, but he won’t do it with love. You can see this by the result. It is not his living room, I’m sure if he does the same at home for himself, he will make a much better wall. If I do it myself, it is my living room, I want it to look perfect, I will do my best to perfectly align the bricks, I will make the plaster on it as smooth as possible (maybe polishing it with sand paper to make it perfectly smooth before painting it), etc.

This is the way how I code. I want to solve a problem with as little lines of code as possible, using as little RAM as possible, making it run as fast as possible on current CPUs, writing as readable code as possible. Coding is for me like art, the program is a painting. I love being a coder and thus I write all my code with love. I want my code to be beautiful and I want to be able to proud of my code (even if it isn’t my code later on - it is owned by my company). I’m sure I’m not the best coder on earth, others may be able to write faster code or more beautiful code - but it’s not important to be the best, it’s important to know that you did your best! Coding is not just a job I do because I need the money. If I couldn’t be a coder any longer and had to work in another business, I’d still write code at home and if it is just for myself, since it is my hobby and I won’t give it up for no money in this world. Or I’d start writing code for open source projects so other people could benefit from it.

As a closing word: I tried to participate in open source projects, but I can’t. I see the code and I see it has not been made with love. It is far from being good code. Actually I was horrified to see some code of Firefox. Firefox is the browser I love, I use it daily - but some code of it is so ugly. It is way too complicated (it could be much simpler, one third of the code), this also makes it very hard to read. And what horrified me even more, it wastes tons of CPU time for nothing. Some information is regathered hundreds of times a second, even if storing the information would only take 4 byte of memory (this is ridiculous little memory) and in case the information is outdated, the system will notify the application (so one could easily cache it and only update the cache if the system notifies Firefox that this information has changed). Same holds true for other parts where polling is used, even though polling is absolutely unnecessary. Seeing code like this brings up a strong desire to rewrite major parts of it, but I don’t feel like rewriting 2000 lines of code from ground up if I in fact only planned to fix a tiny bug I found - so I refrain from touching this code at all.

While all great developers I have met, love programming. I have also met some very poor programmers who love programming. Love of the art is not the sole determinent of a great developer but it certainly is a good indicator of a poor programmer. I could always spot those who were not passionate in my former workplaces. The typical developer has a whole library of programming books and magazines - many of which are easily found in their cubicle. The not-so-passionate had a desk that was indistinguishable from that of a non-programmer.

One treats programming as a profession which requires an ongoing learning process. The other treats programming as a job. Something to provide a paycheck. And that is not good for them or the profession.