Programmers are people who create computer programs. (I’ll skip the discussion whether it should be “programmer”, “developer”, “engineer”, “coder” or whatever. You know what I’m talking about). What makes programming different than most professions is that it’s way more diverse – you can do new things every day, because new technologies emerge all the time. Not only that, but programming is actually a creative job – given a couple of rules and foundations you can build whatever you like – something nobody else has built. Just like the poet starts with words, metric and rhyme rules and comes up with a poem. Or the composer starts with notes and the rules of harmony and comes up with a song. The good thing about programming is that there are always new things to start with and different rules to adhere to.

So, programming is a well-paid, creative profession that gives you the opportunity to do a lot of different things. Not exactly. Programming has another feature – it has to be practical, to serve a business purpose. That’s why many programmers tend to do the same thing over and over again – website after website, ERP customization after ERP customization. Then they change jobs to do a very similar task. Partly because they are already experienced with a given technology or process and other companies want them because of that experience, partly because most companies do the same – they build websites for clients, they build or customize ERPs, or they have their own online service that has to be supported/created, but which is essentially the same as what you previously did. So, in fact, you handle HTTP requests and access the database all day long, day after day, with a couple of scheduled jobs or indexing thrown in, using the same technology for years and years? Sadly, yes. So it’s not so creative now, is it? How come people don’t get bored? They do.

At that point, how can programmers make their work interesting, if what they do is writing very similar, mundane functionality all the time? They learn new technologies. If lucky, you can work on new projects and choose new technologies at work every year or so. If not so lucky, you can still write pet-projects at home, using the cutting-edge technologies, which later you can transfer to your workplace. There are new languages to be learnt, new frameworks to be explored and new storage engines to be used every day. Scala, Groovy, Go. NoSQL. Node.js. MapReduce. Hadoop. These are new paradigms that serve new purposes, and if you are a real programmer you should be fascinated and interested to at least read about them. And probably use some of them for a “proof of concept” at least. Having the ability to always explore something new is what makes the professional life of a programmer so much less boring. Even if at work you do the same thing, you can use your skills and make your own projects. And if they are good, you can open-source them so that other people use it, or they can become popular and you can eventually quit your job. And these are very realistic opportunities, which makes it even less boring.

But does it get boring? Yes, it does. For two reasons. The first one is that some programmers are just lazy and not that interested in anything else other than the paycheck. These are the ones, for whom programming is not a hobby, it’s just a mere profession. It’s their choice, so I’ll leave them aside. The other type are people like me, who like what they are doing, who stay up to date, like to learn new things all the time. People like me can get bored when at some point each new technology becomes too easy. When you are proficient in everything you use and you learn a new framework in six hours and a new language in two days. New concepts like MapReduce, the CAP-theorem, API design, become easily mastered, because you already have so much experience and have seen so many things. Each new step is now easy, there is no challenge anymore, so you get bored.

There are a couple of options from this point:

compensate the boredom of your professional life with something really interesting in your “real” life. But when you get from the programming world of infinite options, to a pretty limited real world, not many things seem challenging. I don’t say this is not a good option – by all means it is. It’s just not interesting from a programming point of view, but feel free to “get out in the real world”, if you are less bored there.

you seek to get promoted to management, that is – change the nature of your work and start using your expertise to direct the process in your company rather than program. But usually a great programmer doesn’t like not to program. You would at least like to be technically involved in the development process.

remain bored, get the paycheck. You are still a professional and there’s nothing wrong with this choice. And at some point you may forget that you are bored.

you start thinking of something new, something nobody else has done or thought of. A product, a framework, doesn’t matter. It occupies your creative thinking and all your current skills. Eventually you may end up with some great new technology or product. You may get bored after that, of course, but you can iterate this step. It can be done at home, at work, or if your idea requires a lot of time and dedication, you can do it as a research project in a university. I guess this is how the internet, Google, p2p, Linux, and many more great technologies are born.

Thanks to the people choosing the 4th option, professional life for the majority of developers remains interesting and intriguing. If you get to the point where you are bored by everything, please choose the 4th option. I haven’t yet fully reached that point, but I’ll certainly try to utilize all my programming skills to create something new and cool, rather than sitting quiet and getting my paycheck.