I’ve been spouting my fondness of my job around here and elsewhere for quite some time. It’s no secret that I like my job. I like what I do and I enjoy doing it every day. Obviously some days are better than others, but overall I can’t complain too loudy.
A recent discussion about the Good Job Trap got Big G thinking about what his ideal job might be. Although he couldn’t nail it down to a single job, he has some requirements. And since I believe I have an ideal job, my job needs to meet those criteria:
1. I guess the biggest thing for me is I want to be able to get excited about whatever I’m doing.
While this is his #1 requirement, I will skip this for now because the rest of his criteria really tell the story about why programming is exciting…
2. I want the opportunity to be creative.
Having been trained formally as an artist and being a rather artistic fellow for much of my life, I know what that kind of creative is. Art is fun but and you can make anything you want and not have to worry too much about the outcome. This is where programming beats art; you do have to worry about the outcome. And because you have a limited set of tools, you have to be creative in how to solve your problems. You also have to be creative in how you build things for the people that will eventually be using your program.
It doesn’t matter if you can’t make things pretty yourself (see #4) because that is a designer’s job. Programmers need to solve problems technically so the final product is stable, reliable, and supportable.
3. I enjoy solving problems. There is something quite satisfying about knowing that you just came up with a great solution that isn’t simply a hack.
Programming is all about solving problems. Through creativity you solve problems. A customer comes to you and says, I want a program that tracks and organizes our inventory of widgets. How do you do that? They don’t know + you don’t know = Problem that only you can solve.
For me, there are two problems to every situation: design and function. First I have to figure out how the program will look and work for the people using the program. After I do that, I have to figure out how to make all it all work as designed. Granted, the design member of your team should do this, but I have no such resource.
Now, you will have your hacks here and there, they are unavoidable. It doesn’t matter how well you plan, execute, and test, there will be someone somewhere that uses your program in a way you could never anticipate and naturally, that way will cause a problem or break your program. Apply hack here to get it fixed now then go back with a branch and add in a stable solution that makes sense.
4. I want to be part of a team. It doesn’t have to be a big team, but what good is it to really enjoy what you’re doing if you can’t really share that?
In theory, a software team should be an A-Team with people that are specialized in the aspects required to make a product. At my job I don’t have such a luxury directly, but I am part of a team of developers. We’re not necessarily working on the same thing at the same time, but we all collaborate to discuss problems and solutions.
As far as sharing the joy is concerned, even when you are a team of one (like me), that doesn’t mean you can’t share your happy life at work with others. Just ask my wife! She hears about my great job all the time (and hates it).
5. Quality. Whatever I do, I want other people to be impressed with the results.
OK, this requirement is deceiving. First off, since programming involves technology and computers, 90% of your customers will be impressed with the results just because they think computerizing is some sort of mystic art. Their inability to make a toolbar reappear in Word means when you give them something they asked for that works, they will almost instantly be impressed.
That’s just one edge of the sword. The other edge is to not let this acceptability by the customers to make you lazy. People will accept crappy technology because they know that crappy technology is better than no technology. This doesn’t give you a licsence to half-ass your work.
Now, take all these things and they add up to criteria #1 – excitement. Everyday I am able to go into my office and know there will be a new problem that I have to solve using limited resources and a lot of creativity. That’s exciting. Then once you reach your goal it turns out like you expected and like your customer expected, there’s more excitement. Yay you!
However, despite the fact that programming meets all the needs of Big G’s ideal job, the reason the match up for me is because I want to do it. I am passionate about making good products that help people. But any and every job can be made to fit those five things, but if you don’t honestly want to do the job, it doesn’t matter how many boxes you check off in the list.