Respect that you managed to hang on for so long, I'm pretty sure I'm going to stop doing programming for a living when I hit the 20 year mark to prevent becoming busted, cynical and jaded before I get old. Maybe because I want to stop or maybe because the market forces me, I don't like the way its evolving right now.

I've been programming 19 years. I might have a few useful words:

- In work, people should aim for a balance between what they enjoy and what the world wants.- If you don't like programming, try to get out of it. If you need the money or whatever, at least invest in some other piece of personal growth. Take a class, start a family...- I hate much of programming. 90% of it is hard, boring, crap work dealing with legacy code bases on issues that I don't care about, and most of the world doesn't care about.- Some new technologies are genuinely fun! Like JDK8 or Scala or Haskell or even a nice build tool like Gradle is really cool. Going from a lifetime of Microsoft Windows to Linux and realizing, wow, cmd.exe sucks and zsh is such a better product! Or going from a lifetime of Microsoft Word and Excel to going wow: Markdown or LaTeX are just better tools for authoring documents and Google Docs or R does everything that Excel did better by a hundred fold! Learning and using these tools is fun!- Some programming is actually fun. Taking an old product and making it better, designing something and writing it, and seeing it come together is gratifying.- I choose a career of programming with my heart set on video games. Now, I find other areas of the world much more interesting than video games. I still like the programmer talk around it though. And I would potentially write a video game if it were part of some other ambition. The game would just be a means to an end though.- As an adult I developed a passion for learning academic subjects like higher math, signal processing, philosophy, and various engineering disciplines.- Older people often have developed a useful specialty that holds a lot of value in this world. If you just do basic general programming stuff and get old, that's an unhappy path, but that's how every career track works. Tons of age 50+ programmers who are at the peak of their game and are extremely valuable and have really exciting and desirable careers. There are also a lot of people who wash out or just move on to something else, and that's how almost all careers work.

I'm pleased to have helped spawn a relevant off-topic chat on this subject

Firstly a little background which might explain my stance. I'm 41, have two lovely girls aged 5 and 3 and a lovely wife. I've been programming since the age of 7, did a BSc Honours degree in Comp Sci at 18, and at 21 jumped straight into the industry, mostly programming in 4GLs and SQL until something useful came along in 1998 or so (Java). When I was in my youth I used to dabble in games programming for the Vic 20, C64, Atari ST and Amiga, but then I got a job as a "real" programmer and was showered with money and forgot all about games programming. My occasional peek at the games industry confirmed my suspicions: overworked, paid far less than me, no job stability whatsoever, and totally, utterly undervalued, with even less job satisfaction than normal programmers get. I became a contractor in 1997 or so and remained so until 2009.

The younger members in here may not be aware (yet) that computer programming for a living is actually one of the least satisfying careers you can have. No wait! Hear me out. I've had a remarkable career in computer programming. I've literally had more money than I knew what to do with. The results of my work live on and several of my most prestigious projects are still live today 15 years later - for example the BBC's election programme results systems, or the APTN slate caption systems. I've had the fortune of trying out all sorts of different languages and platforms in all sorts of different industries.

And yet, it turns out computer programming like this is deeply, ultimately dissatisfying. The initial joy you experienced all those years ago when you made your first program do something, when you got that sprite to whiz across the screen, that doesn't really last. Eventually you will discover that although there are lots and lots of interesting things you can do with computers, if you've got an actual job programming for da Man, he doesn't want you to do those things. Mostly his concerns are about getting numbers typed into boxes that go in to a database. And so that is what you will do. You may be handsomely rewarded for it if you pick a skill which is flavour of the month, which is what I did. If you are unusually lucky you might get a job in a slightly more exciting industry where maybe they make flight simulators and your job will be to code the artificial horizon indicator or make the red lights glow in the cockpit. Or whatever. It all amounts to very much the same thing: someone else is telling you what you have to do, and for a while you'll be quite happy solving the problems they present to you.

Unfortunately the buzz does not last. After not too long you will come to realise that you are "solving" the same problems over and over again. It gets to a point where you don't really even have to think about what you're doing any more. The Man likes this, and promotes you to senior programmer or team leader, and pays you twice as much (though indeed you may be doing rather more than twice the work, but that's another story). And on top of it all you eventually start to realise that no-one ever says thank you when it's working. Your victories are microscopic, largely unnoticed, and fleeting; quickly forgotten. But when you make a mistake... when you get it wrong... you are the subject of everyone's ire. And you will f**k up. There's a joke about programming for a living, which is that we're basically paid to fix our own mistakes all day long. That is cuttingly close to the truth. Programming is a game of attrition. In the real world there is constant pressure from three factors (I think, famously coined by NASA as "faster, better, cheaper"), and you can only pick two of those factors to improve, always at the expense of a third. As the budget is always fixed or shrinking, usually it comes to an argument between faster and better, and deadlines are deadlines... you can see which factor usually gets punted down into the lowest priority. And so you f**k up, and are doomed to spend your days fixing your own code, or more miserably, someone else's code. And let me tell you right now that fixing someone else's code written in some rarely-used and esoteric domain specific language is rarely enjoyable. But I digress.

There then comes a fork in most people's careers at this stage, and it depends on your personality. You will likely branch into one of the following categories:

1. Plod on for the rest of your life. Then one day some kids from #3 below manage to gain enough momentum that you are suddenly outdated and everything is done in a new way which you don't know. Except it's still the same f**king problem. You're not solving anything new, you're just being forced to do it in a new way, and really, probably for no really good reason.

2. The Peter Principle. You will see the ending of #1 coming and think, "I can't be bothered with reinventing the wheel every 2 years" and you'll find yourself angling for promotion into middle management.

3. You will tinker and fiddle and find some little thing that makes solving one of the problems you've solved 100 times already solvable with a bit less typing. Hopefully it will have some sort of esoteric syntax almost but not quite unlike some existing language which everyone is using already. If you're lucky you'll convince everyone else in your department that it's great and you'll all switch to it until #3 inevitably repeats itself. Then one day you discover that the world at large doesn't move quite so quickly as you and they're all still using the original language which carried on evolving slowly in the background. When your nice safe job is suddenly axed you find yourself either with a niche skill in unexpectedly high demand (unlikely but possible!) or having to hurriedly backtrack and find out what all the plodders have been doing all this time and how it's changed since you last looked and throw yourself at the mercy of a job market where everyone else is doing exactly the same thing as you.

4. You flee and do:4a. take up farming sheep or some similarly radical different career path. Few return.4b. you use the vast wealth of knowledge and skills you currently have and try to squeeze what value you can from them without falling back into traps 1, 2, and 3.

And with that all said, guess which path I took.

Well, actually, I've done all four. I plodded on for a good while, cleverly kept in my place by positively filthy amounts of money. How does $1000/day sound to you? It sounds good, doesn't it? Why would you ever leave? I switched 4GLs a couple of times, and switched RDBMSes many times, and alighted upon Java which was back then precisely the situation described in #3 but with the good outcome rather than the bad one. I ended up as CTO in a software company for a few years. And finally ... I fled and took option 4b, but that wasn't until 2009.

So I've got all these programming skills, and specific skill in Java since version 1.1, and SQL, and a reasonable smattering of OpenGL. What to do.. what to do. So I start a games company, which seems like the ideal use for these skills, though Java is a bit of a pain at this stage (2001 ish, no OpenGL to speak of and still kinda shittily slow, and the machines of the era aren't much cop either). It took me 8 years of making games to get reasonably successful at it - successful enough to stop contracting anyway.

The situation I now find myself in is this:

I earn far less now but my actual earnings are now limited only by myself, rather than how much the market thinks I'm worth.I really enjoy my work. I get so many emails and comments from people about how great the stuff is that I do, I can't conceive of going back to working for The Man again.What I do is make computer games for a living. That is, I actually make games. Not engines. I don't fiddle around with fancy new tech unless it solves an actual problem I've got. Anything other than getting the game finished and released is just wanking about. It won't earn me any more money. The only thing that earns me money is finished games that are released before I go bankrupt.

So, I don't have a lot of time for learning new things to solve the same old problems. I don't have a lot of time for debugging. Fixing broken things is time I could have spent putting more effort into the actual game product. So I hate it when stuff doesn't work. Increasingly I find that programming is basically the bottleneck to realising a game concept. If I could just shout at the computer and it wrote the code for me, I'd quite like that. I like to make games more than I like programming. Programming gets in the way! And every time I am forced to learn a new trick to solve an old problem again, I resent it, because it's wasting my time.

I like learning stuff, don't get me wrong. But I am focused on learning stuff that I need to learn because it moves me significantly closer to my primary goal which is finished games released on time. And it should come as no surprise to you that if there are many, many things that I could be learning that move me varying distances closer to that goal I will prioritise them such that the one that gets me closest for the least effort comes first.

Learning new programming languages, right now, is probably the very, very bottom of the list, because I can think of many other things I could be doing instead.

Small piece of anecdotal evidence: when I was starting out as an indie game developer, I encountered many other n00bs like myself, but I set myself apart in one important distinction. They would jump on every new tech that came along*. Flash! JavaScript and HTML5! No wait! HaXe! No wait! Monkey! No! Unity! Objective-C! er... Haskell! Maybe not. What sets me apart from 99% of those people is that I'm still here, still making games, and earning money doing it, because I just got on with using what I already knew and applying it.

Uh, reading this through I realise that may look a little cynical (we Brits are famous for extreme cynicism) and I may have made some people go and sit in a corner to cry, but take heart: I've had a great time, made loads of money, and I couldn't be happier with what I'm doing.

If you really want a bleak but unfortunately scathingly realistic view of the career of programming go and read Dominic Connor's posts on the Register about the pimping industry and his past career.

They would jump on every new tech that came along*. Flash! JavaScript and HTML5! No wait! HaXe! No wait! Monkey! No! Unity! Objective-C! er... Haskell!

...I am so guilty of that. I started out with Java, and ended up finding myself wanting to learn and improve myself in Flash, Haxe, Unity, HTML5, etc. I can say now that it is indeed a pitfall of having too many technologies available.

It hurts me to talk about it but princec rights.Work of a programmer is not as interesting as it may seem at first glance

You're doing the same things every day – solve the same problem PRIMITIVE every day - almost no self growth or technology improvement, even if you learn something new and will use it year or two, and then you look for a new job you're surprised to see that even though you grew up and learned new technologies, but the rest world have not changed over this years, as they deal with the same problems as couple years ago.

The problem is not new technology, but the fact that they have little business needs

Businesses need a solution to his problems, rather than new technology, staff development, or something else

He needed a solution to his small constant problems and he does not care how they will solve the problems, which must be solved as fast as possible, cheaper, about the quality afterthought unfortunately.

Here's the truth : programming is not the final product - it's just a tool for the production of the final product , all users and customers do not care what language the program is written, and what technologies are used there.

The most scare and disappoint you may know is how business works – this knowledge destroy all you happy illusion.

If you are unusually lucky you might get a job in a slightly more exciting industry where maybe they make flight simulators and your job will be to code the artificial horizon indicator or make the red lights glow in the cockpit. Or whatever. It all amounts to very much the same thing: someone else is telling you what you have to do, and for a while you'll be quite happy solving the problems they present to you.

Holy cow. My day job is at a place that makes flight control GUIs, and you've just described it almost completely accurately. Existential crisis, activate!

3. You will tinker and fiddle and find some little thing that makes solving one of the problems you've solved 100 times already solvable with a bit less typing. Hopefully it will have some sort of esoteric syntax almost but not quite unlike some existing language which everyone is using already. If you're lucky you'll convince everyone else in your department that it's great and you'll all switch to it until #3 inevitably repeats itself. Then one day you discover that the world at large doesn't move quite so quickly as you and they're all still using the original language which carried on evolving slowly in the background. When your nice safe job is suddenly axed you find yourself either with a niche skill in unexpectedly high demand (unlikely but possible!) or having to hurriedly backtrack and find out what all the plodders have been doing all this time and how it's changed since you last looked and throw yourself at the mercy of a job market where everyone else is doing exactly the same thing as you.

I pretty much indentify with the kind of person you describe here.But please, don't forget that those people are the reason you're not writing assembly anymore.I think these kind people are even the reason we have computers today.

I also agree that Java was an improvment. A technology which made it easier to program comparing to C++. Now look at those C++ coders. Often they say: "Why Java? It's useless!". In the end you know that the Java guys were right (Sitting in a java forum I think everybody will agree with this ).The same thing happens with Scala and Java. But now Java is standing on the other side :/

Very, very useful technologies are born simply because those people invented them: Types and functions in general (C), Object Orientation (C++), Generics (= Type parameters) in Java (Btw, they were brought to java by Martin Odersky, inventor of Scala).(These are examples for useful technologies that are used a lot today, they were not invented there (e.g. Types and functions were already present earlier in other programming languages))

Newer programming languages have the feature to not have null (the alternative solution being something called 'Option' in Java 8, 'Option' in Scala, 'Maybe' in Haskell).Do you know the Billion Dollar Mistake?

Please don't forget where we would be without those programmers.

I, personally, don't want you to switch to another technology or another programming language, at least not that much.

As many others already found out, there are mostly two types of programmers:1. The 'Get things done' guy:He doesn't like or enjoy programming that much. He mostly likes seeing the end result.One day he had learned programming with some kind of tool (e.g. Java) and he doesn't like switching because that would involve changing the way of thinking, rewriting a lot of code and in the end isn't very productive.That's okay. He is basically right. If he would change, he wouldn't produce as much products.

2. The 'Get nothing done, but get it done right' guy (also: 'Tinkerer'):He loves programming and loves learning new things. At first he tried to be productive but saw that he wasn't productive enough, so he changed the way he was doing things and started all over, being much less productive in the end.Thus he doesn't produce the primary product he aimed for, but something else that would actually help him archieve that aim. He might someday notice that archieving what he thought was his primary aim is not really what he really likes to do, but it's the new technologies he is interested about.

We need both types of programmers, because we wouldn't be very productive without the first type and we wouldn't be very productive without the second type (because those actually boost the productivity of the first type by producing new technologies, imagine writing C code).

The way we improve in technology, and why I think it works having programmers of type 1 doing their thing and at the same time improving in programming technologies (Assembly -> Fortran -> C -> C++ -> Java, etc.), is that newcomers nowadays learn Java as first language, not C and therefore are used to working in it. Tomorrow someone might be learning Scala, Clojure, Haskell, Scheme, Idris or whatever as first language and be used to working with it and therefore stay with it and make it's user base become bigger. That's how I think the world changes it's programming technologies. I might be wrong, I'm still young, but how and why would Java be used today instead of C? And why should Java be used tomorrow instead of another language?

Did you actually know that John von Neumann has punished one of his students for writing an Assembler in machine code?

There is nothing wrong with wanting to stay with one technology.There is nothing wrong with trying to convince someone to try out something else, but just don't be too extreme.

I wrote much more than I intended to, in the first place (just like everyone else... except Roquen ), I'm looking forward to criticism

I do love learning stuff... just that these days I've not got the luxury of time to spend on academia any more. I fall between types 1 and 2. Programming is who I am. I'm not especially gifted at it, just doggedly persistent.

One paradox I face ended up being a battle between my day job and programming games for fun.

When you're working for the man in a typical development job, it can be hard to find the time and more importantly the energy to work on your game.

Now I'm doing professional services--less programming and more training, installation, and troubleshooting and lots of face time with the customer. It's boring because it's the same thing over and over again and most of my value is knowledge in a niche product. However because I travel a lot (getting really annoying now) and don't have a social life I've had more free time to pursue game development.

I've made more progress in the last few years than I did 15 years prior to this job but now I'm dissatisfied with my day job and am mostly here for the money. Cas' path speaks to me as I'm deciding between points 1-4 now.

- Lots of programming is fun. The salaried job reality is often not as good as you would think. There are some definite high points, but a lot of the reality of the day to day is very stifling, hard, demanding, really really boring work. There is regular frustration in going years without ever getting to try one of your own ideas and spending vast amounts of your life fixing the obscure details of someone else's ideas and tools and code.

- Most professional careers have similar dynamics. The common reality is somewhat miserable and most people wash out. But there are many super stars with amazing success stories. There are lots of well known famous programmers who have enjoyed amazingly respected and exciting careers like Odersky or John Carmack. More importantly, there is a lot of room between the wash outs and the celebrities for great programmers who aren't famous or outrageously special, but are just really good at a particular niche and enjoy amazing long lived desirable careers.

- Look at almost any professional track, such as the lawyer track. Most lawyers hate their jobs and the reality for the common lawyer is really terrible. But the top end lawyers often have the most desirable positions in society. Frequently, the mega CEO types or mega politician types, such as Obama, come from master lawyer backgrounds. I suspect programming actually offers a better middle ground between the super successes and the common wash outs.

- Medicine is regarded as the evergreen safety field where even a basic nurse or doctor has a good job. There generally is neverending demand for nurse and general practioner type work, but I've heard that really isn't that desirable a career. The successful specialists have really enviable careers that are mega highly paid and respected, but the basic general practitioners work much harder and in general don't have an unusually amazing career.

- Creating video games is one of those semi-fantasy entertainment vocations like movie director or actor or novelist or musician: if you have an unusual skill or love for the work, that's great and no one wants to kill a beautiful dream, but empirically, the career outcomes tend to be poor, and it's often best kept as a hobby and a side interest.

- Programming Fads: We've all seen a ton of programming fads come and go, and it's easy to snicker at the many that turned out to be lame ducks with the benefit of hindsight. However, there have been some realy important developments that weren't just dumb fads. Java had some very important major improvements over C++. Now Scala (and Haskell and others) have some over Java. As matheus23 points out, there are legitmate design improvements over "null": Java "Optional" or Scala "Option" or Haskell "Maybe" really is a better solution. Java 8 adds map/filter/fold/flatMap which were previously only available in add on libraries: these features are really important for regular code. Scala goes further with dozens of syntax improvements and refinements and you can make the case for Haskell or Clojure or others as well.

- My story: I am 38 with two daughters. I've been programming full time since 19. I've been a key player in one mega hit startup company, and I've always been regarded as a super programmer at every job I'm at, but most of jobs were less remarkable. I started with an interest in video games but I never actually got to do that; today I still love programming and the thrill of creating something hasn't diminished, but I'm more excited about non-programming stuff. For the past ten years or so, I've been seriously pursuing skills and classes in a science/biotech direction which has much more deep purpose to me than programming or games, and I have a few more years before it can bear fruit, and I may be too old to switch or a total failure, but I am enjoying the ride

to princec: If your happy with your life as it is, there is no reason to change. But I think it's a mistake to overlook the innovations of something like Scala and dismiss it as yet another trend or just another toolset to do the same stuff.

You're doing the same things every day – solve the same problem PRIMITIVE every day - almost no self growth or technology improvement, even if you learn something new and will use it year or two, and then you look for a new job you're surprised to see that even though you grew up and learned new technologies, but the rest world have not changed over this years, as they deal with the same problems as couple years ago.

There is some truth to this, but it's a very negative slant. Programmers aren't solving the same problems. Computers aren't even used in the same way. Computers used to be just fancy calculators, now they are often fancy communication devices, or the brains of large companies. And sure, lots of job, are miserable, and don't let you grow much, but that's every field. You have to be creative and find a way. And there is opportunity. And there are lots of happy stories of people who don't get washed out of the field.

Man I reply in a thread and it becomes the base of some kind of heavy thread on life's up and downs. Not fair!

I'll fill in the blanks of the WHY I want to stop at 20 years: because I don't want to be doing the same thing my entire life and as princec has already so accurately stated, that is a big risk you run when in this business. I'm already starting to feel that, each job I take is basically a repeat of the previous one; the only thing that changes in that picture is me, I get more experience, more ego and thus I get things done faster and better because I make it so. But its the same things I get done faster and better. Because I develop in that way, I'm starting to artificially be pushed away from actual programming and more into people management. I'm not sure I really like that development, but I'll see where it goes.

No I want to keep doing this professionally for a good while longer and see how far I can take it and then its time to go do something completely different than IT. At that point programming is going to become my hobby again and not my job. Because give up programming? HELL NO.

Or perhaps I'll do stick around and become an indie game programmer. Who knows, I'll see what that market is like when the time comes...

(On a serious note: It's a sad story. And I hope this won't happen to me... Maybe you guys would better like to code something that you think means more of a change for the world, something that actually matters, not just boring database-ui-stuff?)

Funny thing happened to me this week... so there I am, master of my own destiny, living the dream making computer games... and I find myself writing SQL stored procedures all week and wrangling numbers into a database for it. Life has these odd turns. I'm quite enjoying it though, makes a change from shaders and sprite engines.

It is like any job, it becomes repetitive and mundane after a while. Your brain works very hard to make sure everything in your life becomes this way, in order to be better prepared for when more exciting things happen. It is the major cause of procrastination, and possibly a huge cause of boredom. Most of us know that feeling that we have when we go to class and even though we are excited to go to it some days, it slowly begins to be less and less fun and more tedious as it goes along. If anything, doing a job for that long invokes the same feelings.

I can completely relate with princec's post, because, it is true. We are all working hard to not become part of the mold and branch out to be something different. "The man" is like that goo stuck on our back pulling us into the huge boring blob behind us. We keep struggling to escape and still find ourselves being sucked right back in.

As for me, that post is rather enlightening hearing it from a fairly successful indie developer. It actually makes a lot of sense that it'd be hard to keep relevant as this field always changes rapidly and makes you obsolete quick. (So many of my friends and colleagues are stuck on #3 it hurts. I think I'm somewhere between #1 and #4b...)

It is hard for me to be discouraged by this.

I hear the same things from people of every profession. It drains, it gets boring, and they want something new. I think the only reason we are told to pursue our dreams is because that is where we will find the least resistance to the blob. The effects of being in a mundane job are not going to take effect until way later in your dream career.

Uh, reading this through I realise that may look a little cynical (we Brits are famous for extreme cynicism) and I may have made some people go and sit in a corner to cry, but take heart: I've had a great time, made loads of money, and I couldn't be happier with what I'm doing.

Hurrm... I found your little speech actually quite inspiring. I wonder what that says about my cynicism, haha.

The situation for graduates here in the UK is just hilarious. Unless you're a graduate. We have historically had some kind of "shortage", so "industry" tells us, of "IT staff". It turns out that "IT staff" are people who can grovel under desks to plug in ethernet cables, or lift the 2 tonne HP laserjet off the desk and take it away to the place that laser printers go when they go to die, or who knows how to watch a crawling bar as Windows installs on a recently virus-infected desktop work machine. It transpires that actual software engineers and programmers are extremely plentiful and there are nowhere near as many jobs in programming as has been made out.

Don't ever forget this. As a programmer you are an easily replaceable part in a large machine.

Do you guys regret or are depressed for being programmers in a company?

it seems like it.

Not I. It's been a good career so far and solving problems while programming brings me quite a bit of satisfaction.

Luckily it can be quite well compensated too. The only thing I would have done differently is something I would tell my younger self: "Congratulations on graduating! Work hard and enjoy the ride but also save a lot of dough to ensure you have options when you turn 40 because it won't be as exciting then".

java-gaming.org is not responsible for the content posted by its members, including references to external websites,
and other references that may or may not have a relation with our primarily
gaming and game production oriented community.
inquiries and complaints can be sent via email to the info‑account of the
company managing the website of java‑gaming.org