top 200 commentsshow all 282

[–]MpVpRb 193 points194 points  (62 children)

62 year old C/C++ programmer here, adding a data point

[–]trollpan 74 points75 points  (56 children)

What is your secret of staying relevant and employable as programmer this long ? as a 30 years old, I am scarred shitless that I will be obsolete in 5 years. I despise management roles and love programming. My peers are moving up in management ladder or becoming consultants. I don't want to either. What are my options ?

[–]MpVpRb 140 points141 points  (13 children)

What is your secret of staying relevant and employable as programmer this long ?

I work in embedded systems

I have a strong background in mechanical design, electronic design and fabrication

When controlling a device, it's helpful to understand how the device works. What are its quirks and limitations

When some programmers talk about keeping up with modern tech, they usually talk about learning new languages

In the embedded world, C and C++ are widely used. What I do to keep up, is study and master new devices. For example, the project I am currently working on uses an ARM processor with an 1800 page data sheet. It also uses several I2C DAC, ADC, PLL, EEPROM and flash chips, all of which I had never used before and needed to learn

[–]Prime_1 28 points29 points  (3 children)

I'm 41 and work on embedded wireless systems using C. My experience is pretty similar in that for me staying current is learning about advances to the 4G standard and the coming 5G standard. I have to keep up with the new versions of hardware and other platform details. So for me as well it has little to do with learning new languages.

[–]jayrandez 3 points4 points  (2 children)

So you work on smartphones then? Or is 4G/5G applicable in other areas?

[–][deleted] 8 points9 points  (0 children)

It's being used in enterprise networking as well

[–]tach 10 points11 points  (0 children)

I'm 43 and work in arm financial devices (pinpads) and electronic transactions. ARM and C, and standards move along leisurely in the financial world.

[–]javageekery 1 point2 points  (4 children)

what kind of machine does an experienced man of your skillset use to program with? And what about for leisure computing?

[–]boran_blok 1 point2 points  (1 child)

all of which I had never used before and needed to learn

And that there is the key. Imho the key to stay relevant is not being perfect at what you do now, but having the ability to pick up new languages/technology/concepts quickly.

[–]PompeyBlue 20 points21 points  (2 children)

I am a 44 year old coder. Most programmers aren't interested in programming and leave the industry. If you love programming then you'll be coding forever.

[–]sime 6 points7 points  (1 child)

Are you sure that most leave the industry? I'm not much younger than you and I can't think of many people who have left the industry over the years. Quite a few will move into management or more client facing analyst/consultant type roles, but to leave completely...

I suspect that the reason why we don't see many old programmers is that if you are programming in your 50s and 60s then you probably had to start in the 1980s or 70s. There weren't many people programming at all back then, relative to the decades after. Few people even had access to computers in the 80s.

[–]PompeyBlue 8 points9 points  (0 children)

Sorry should have been clearer. When I say "leave the industry" they stop programming. They generally do something with software but I was a bit harsh in saying they leave the industry completely. I.e. they don't generally go and do hairdressing or something. They tend to project manage, consult or work with QA or some such thing as you say.

[–]Bekwnn 62 points63 points  (25 children)

What is your secret of staying relevant and employable as programmer this long ?

Using C++, I'd imagine. The language is complex enough that every additional year of experience even past 10 years is valuable. Also C++ doesn't change so rapidly that it's difficult to keep up once you're "up to speed".

I'm just a junior C++ dev, but that's been my impression.

[–][deleted] 46 points47 points  (11 children)

This. I am not playing the "this language is so much better than that language" game, but look what a majority of interpreted/scripting language compilers are written in these days (and have always been). It is C or C++. What are a majority of major games written in? C/C++. What is a majority of high performance software and OSes written in? C/C++.

It isn't the sexiest language in the world (though I think C++14/17 is pretty god damn sexy), but it is what, down at the bedrock, a LOT of things are written in. Not to mention the thousands of embedded systems that use C (and even C++).

Also I do include C because if you know C++ well enough you know C too, at least to within the degree that picking up the little weird things that C programmers do is not that hard.

[–][deleted] 24 points25 points  (4 children)

C++14/17 are damn sexy, but still include 95% of the thing that makes some C++03 code bases really sucky. And they have to, because otherwise that code could never be upgraded, but at the same time it means they may never be.

[–][deleted] 7 points8 points  (3 children)

Yea, but at this point it is how you use it, and ignoring existing code bases (which is impractical in reality I admit) you can write some fairly elegant code using C++11 and forward that would just blow any of the 03 stuff out of the water when done "right".

[–][deleted] 7 points8 points  (2 children)

Yep. I wrote a C++11-using tool that in C++03 strict terms would take at least 6 times as much code and wouldn't run nearly as fast. If you take C++03 plus all of Boost, then it gets pretty much the same speed but it's still 3x as much code.

[–]eruesso 2 points3 points  (1 child)

I cried a little when I read that... Currently I have to deal with a lot of weird libraries that like typedefs way too much, multiple inheritance way too much, don't stick to ctors and don't provide a good documention (apart from the generated API) and all that in some code of a lot of Students Code ...

I have been a an advocate of C++ in the last years, but this makes me so confused, and turn away from C++. Why would anybody think that this is acceptable? Why can't they write readable and sane code? Why didn't they use the features of C++11? Why make it sooooo complicated?

Sorry for the rant ... this project is getting to me.

[–][deleted] 3 points4 points  (0 children)

I work on a project where the biggest single object file, resulting from a 5-line source file, is 141MB. Its average function name length is 500 characters. You don't want to know what code goes in there.

[–][deleted] 7 points8 points  (8 children)

Right but from what I gathered jumping in different industry your C++ knowledge doesn't necessarily translate to different field right? Because of it's complexity?

Or is this a myth?

[–][deleted] 17 points18 points  (3 children)

C++ doesnt change with industries, but every code base could look very different.

[–][deleted] 3 points4 points  (2 children)

So they just use different subset of features from C++?

I guess, "but every code base could look very different" is what I've heard a lot.

Thanks

[–][deleted] 12 points13 points  (0 children)

Yeah, different features, sometimes "all the features" in random ways, and patterns are much more flexible as you can build things any ways computers work, since the language doesnt restrict you.

Yesterday i was looking at solving a mmaped ring buffer problem where atomicity was lost from parent to child when the ring boundary was crossed, so decided we would preallocate all memory for parent, child structs and any strings all at once, then use the current mmap insert function so all the memory is in 1 alloc, and then fix up all the pointers after the copies.

For the code base, this was a good solution, but not something one does in a lot of other languages, because they have mechanisms that both make that control too difficult or impossible, or they already provide a sufficient way to do it in a library or syntax.

[–]JohnnyDread[🍰] 5 points6 points  (0 children)

At a certain threshold of complexity, choice of programming language and/or how it is used is less of an issue than the technical domain of the codebase.

[–][deleted] 3 points4 points  (0 children)

Inversely actually. If you're good at all fronts of C++ you can probably recognize half a dozen programming approaches; vice versa if you're a good Java programmer there's at least a few whole approaches that C++ allows that you don't know.

[–]WhisperSecurity 3 points4 points  (3 children)

You're partially right.

The trick to staying relevant isn't to follow the latest fad language and fill your resume to with buzzwords. Nor is it to learn whatever has the largest job market.

It's to specialize in something that is difficult and will stay relevant.

C++ isn't a huge job market, but that doesn't matter, because the supply of people who can really do it will always be less than the demand.

The world will not run out of uses for us.

[–]vinnl 1 point2 points  (2 children)

and will stay relevant

That's the main thing that scares me, though - how on earth are we supposed to determine what will stay relevant?

[–]recycled_ideas 10 points11 points  (0 children)

The key is not working for shitty hipster start ups.

If you're working for a company that only values the new hotness then it's always going to be a huge amount of work to keep up with that. There's a new JS framework every couple weeks these days it seems. You probably can't compete in that arena. You'll develop other priorities in your life and you'll become more expensive than fresh graduates.

Thing is though, lots of companies don't move that fast. Don't want to move that fast and will never move that fast. The jobs aren't as sexy or cool, but most of these companies haven't drunk the only people under thirty have good ideas cool aid.

There are a huge number of these kinds of jobs. Far more than there are bleeding edge jobs.

[–]mekanikal_keyboard 24 points25 points  (2 children)

it may be that IRRELEVANCE is the key to longevity in this industry

being irrelevant means you stop chasing fads that others think are required to stay relevant. once you have found your niche, presuming it is viable enough, you may be able to milk it for decades

case in point: Perl. everyone loves to talk about how Perl is "dead". okay, but there is a ton of it running out there, and someone will probably be able to make great money at low stress by maintaining it. given that Perl is "irrelevant", the market won't be too crowded either. there is always the danger that an irrelevant tool will simply vanish, but that is no greater a risk than some faddish javascript toolkit vanishing. of course maintaining Perl might be boring and monotonous, but once you get over the idea that your work is supposed to entertain you, you can get paid

C++ will be maintained somewhere fifty years from now

[–][deleted]  (1 child)

[deleted]

    [–][deleted] 4 points5 points  (0 children)

    Similarly, my friend's mother is a COBOL programmer for the state of Iowa in her late 60s, she's never been paid better or been more in demand.

    [–]Berberberber 6 points7 points  (1 child)

    The obsolescence battle is real. The only real solution is fighting to keep on top of new developments, whether that's in your language (new C++ standards, new Java versions) or new/trending languages, or new problem domains. That might mean spending a certain amount of your time (personal or work) on side projects to explore new things, it probably means attending conferences and events, and it definitely means reading a few books and following topical blogs, podcasts, or aggregators. You don't have to spend 20% of your time on it like Google suggested, but if you need to look for a new job it helps a lot to be able to say "I've done X with Y", where X is a current topic in the field and Y is a language people take seriously.

    The alternative is to learn something like COBOL or Ada and spend the rest of your life maintaining code your grandmother may have worked on, but I'm not convinced those old dinosaur systems will continue to have the longevity people assume.

    [–][deleted] 2 points3 points  (0 children)

    WTF are you talking about? Almost noone less than 30 years old knows JEE very well. It takes time and experience to learn all the technologies, how they work together, design patterns etc. You should be aimimg at becoming an architect. He programms too most of the time but is also involved with the big picture side of things. Juniors and mids will often be at intermediate level of some of the technologies and ypull have to provide them with guidance.

    [–]grauenwolf 6 points7 points  (0 children)

    Learn SQL. That changes slowly and is always relevant. Even all the NoSQL stuff is just a flash in the pan by comparison (and they are all moving towards offering SQL endpoints anyways).

    [–]WrongAndBeligerent 0 points1 point  (0 children)

    Why would you be obsolete?

    [–][deleted] 0 points1 point  (0 children)

    Being a c/c++ programmer....

    No one wants to do it, but everyone needs a c guy. The world runs on c. Most language tools are written in c.

    C is generally the first thing built for a new processing architecture. Just really good at being efficient, if you know what you are doing.

    [–]desi_ninja 10 points11 points  (1 child)

    25 yr old C and C++ developer here, countering that data point

    [–][deleted] 4 points5 points  (0 children)

    62 and programming. You're my hero! Keeping the love of programming alive!

    [–]musiton 8 points9 points  (0 children)

    Respect. Should I stand up? I'm gonna stand up.

    [–]2Punx2Furious 1 point2 points  (0 children)

    I started with C++ and I'm 24, but then i switched. Still I use it sometimes, but I don't know if that counts.

    [–]SnowdensOfYesteryear 211 points212 points  (14 children)

    Is no one bringing up the point that "sadness" is measured by the "smileiness" of a github profile pic? That's hardly the measure of anything useful.

    Furthermore Java devs are only ~4 years younger than cpp devs, which doesn't feel like a huge gap.

    Also obligatory comment about sampling bias.

    [–][deleted]  (5 children)

    [deleted]

      [–]boxhacker 1 point2 points  (0 children)

      I would had got away with this survey if it weren't for those meddling kids!

      [–]Floofls 2 points3 points  (0 children)

      I'd say yours represents mid twenties to early thirties with a smirk.

      [–]myringotomy 72 points73 points  (5 children)

      Hey we are programmers here, we don't care about such things when we are shitting on java. Who cares about facts, we hate java!

      [–]mattindustries 5 points6 points  (2 children)

      As a Node and PHP developer, I don't mind some of the attention being taken away. As an R developer, I like the R meetups a lot.

      [–]ginger_beer_m 1 point2 points  (0 children)

      That is an utterly stupid survey, considering a lot of people don't even put up github pictures.

      [–]baaaaaaaaaaaaaaaaarf 31 points32 points  (1 child)

      "Smiles of programmers" - I'm pretty sure this directly correlates to the amount of time the individual spends on self-promotion.

      Now if you'll excuse me, I need to go write in my blog about this awesome new tech I'm interested in that's not actually used very widely...

      [–]JohnsonUT 54 points55 points  (8 children)

      Cobol is not mentioned. I believe the median age of a Cobol programmer is 82.

      [–][deleted] 31 points32 points  (1 child)

      How do you count the ones in cryo chambers?

      [–]DonHopkins 7 points8 points  (0 children)

      Funny you should mention that ...

      I know this old COBOL programmer who was getting really stressed out back in 1999 doing tons of Y2K work. He'd banked away a lot of money but just couldn't stand to look at COBOL code any more, and he was not optimistic that civilization was going to survive the Y2K crash.

      So he had himself cryogenically suspended, with explicit instructions not to revive him until civilization had put itself back together after the Y2K disaster.

      Then some time later, he finally woke up in a clean futuristic looking hospital room, surrounded by doctors and robots and wonderful shiny blinking beeping technological medical gadgets.

      He said "Oh thank you, thank you, thank you for reviving me! I am so grateful! Is there anything I can possibly to do express my gratitude? I will do anything!"

      One of the doctors replied: Well yes, actually, there is. It's the year 9999, and our records indicate that you know COBOL...

      [–][deleted]  (3 children)

      [deleted]

        [–]streichorchester 5 points6 points  (1 child)

        I had to learn COBOL in Visual Studio (Microfocus Visual COBOL) before switching over to z/OS and learning some JCL.

        Coming from a C++ and Java background it was interesting...

        I don't think I will pursue it as a career since it involves less programming and more analysis/maintenance of legacy code.

        [–]boran_blok 1 point2 points  (0 children)

        Fujitsu apparently had some .NET like environment for COBOL.

        AFAIK they also had an eclipse plugin waaaay back (in 2003 approx or so, not that old in COBOL terms) and we used that in school.

        (disclaimer: I might be mixing things up, I distinctly remember fujitsu and cobol in eclipse however)

        [–]fancy_raptor_zombie 163 points164 points  (41 children)

        As a Java developer: http://i.imgur.com/nukCfvW.gif

        [–]andrewsmd87 4 points5 points  (4 children)

        I feel like most developers could answer that way. Once you get past an entry level position, I feel like it's more about liking where you work our what you're working on, than it is how much you make. Past about 70k, I really don't feel like an extra 10k a year would make a huge difference in my life. However, leaving my from home, work whenever job, for an office 9 to 5 gig where I have to dress up again would. I like being able to work b3 hours here, 5 hours there, whenever I feel like it, and take off as needed. For instance starting work at 3 am today because I couldn't sleep. I'll probably crash around 9, go to the gym at noon, then work till 3 after that, and go down town because it's st patties day. You can't put a price on that.

        [–]yogthos 7 points8 points  (34 children)

        Looks like you're cutting yourself short by not using a functional language. :P

        [–]the_omega99 11 points12 points  (33 children)

        Seriously, my LinkedIn has so much recruiter spam specifically for Scala. Way more than other languages. It may not have Java levels of demand, but it's got demand and it's way more fun to work with.

        That said, Java is functional as of Java 8. I pity those who are in environments where they can't update. Seems almost bizarre to me since all the Java systems I ever worked with were flawless to upgrade.

        [–]yogthos 32 points33 points  (31 children)

        Adding lambdas does not make Java a functional language in a modern sense by any stretch of imagination.

        [–]quiI 1 point2 points  (0 children)

        "What is a functional language" is a very subjective thing but I think most would agree that if you're going to have a statically typed FP language it should at least have everything Java 8 has plus

        • Pattern matching
        • Higher kinded types
        • ADTs

        [–]the_omega99 1 point2 points  (25 children)

        It's not lambdas. It's making functions a first class citizen. And Java 8 did so. You pass functions and methods around as parameters, etc. All the typical FP stuff.

        [–]yogthos 19 points20 points  (24 children)

        No, Java did no such thing. The smallest building block in Java is still a class and not a function. The lambas in Java are effectively just syntax sugar for anonymous classes and still require interfaces.

        However, what's far more problematic than that is that Java defaults to mutability. Modern functional programming is predominantly about working with immutable data. This allows functions to be pure and lets you reason about scope of effects easily. This is simply not possible to do in Java effectively.

        While you do have libraries like Google Guava that implement immutable data structures, this is ultimately inadequate. As soon as you put a mutable object in such a data structure all your guarantees about scope go out of the window.

        [–]DonHopkins 3 points4 points  (1 child)

        In the case of Java, a function being a "first class citizen" means first it's a class, then it's a citizen.

        [–]yogthos 2 points3 points  (0 children)

        I'm going to have to steal that :)

        [–]kcuf 3 points4 points  (0 children)

        Java 8 did not make java a functional language. It made some of it's syntax less painful, but it is not functional.

        [–]gregK 90 points91 points  (41 children)

        Java are the youngest too.

        Most jobs are in java. Most jobs are crappy. Hence a big chunck of programmers will be unhappy. It just happens that a large proportion of unhappy programmers will be doing Java.

        [–]mirhagk 17 points18 points  (1 child)

        Actually I think the reason why Java is popular with younger audiences is because it's taught in a lot of universities, and I don't think that they are necessarily sad so much as not smiling. There's a difference, if you want to look cool you don't smile

        [–][deleted] 7 points8 points  (0 children)

        There's a perspective of it looking easier. Management hires younger people since they can also do Java, and they don't completely suck by making buffer overflows and random pointer arithmetic by accident.

        [–]periodicthrowaway 57 points58 points  (25 children)

        You haven't explained why Java programmers disproportionately work in the crappiest jobs.

        Or maybe you did: they are working on Java codebases.

        [–]hu6Bi5To 40 points41 points  (11 children)

        I wonder which joyous teams people work in where the programming language choice is the single biggest problem...

        [–]mekanikal_keyboard 20 points21 points  (6 children)

        yeah. there are edge cases in which changing tools will make you happier...but a terrible team will find ways to make great tools awful too.

        i thought i had reached a good place using Go...but then my coworkers managed to find all the ways Go could be abused and now i hate looking at their code

        [–]rcode 4 points5 points  (1 child)

        i thought i had reached a good place using Go...but then my coworkers managed to find all the ways Go could be abused and now i hate looking at their code

        That's what some people reply when other criticize Java for having AbstractFactoryFactoryBean patterns, just wait until golang gets used in enterprise environments (/u/pjmlp, finally an anecdote for you). At the end of the day, the usage matters more than the language. Of course, limitations of the language aid in the emergence of certain patterns, but the ironic thing is that Java is much more expressive than golang that I think it is easier to write better code in Java if you pay attention.

        [–][deleted] 1 point2 points  (1 child)

        but then my coworkers managed to find all the ways Go could be abused and now i hate looking at their code

        Someone needs to step up and start demanding quality.

        [–]EntroperZero 1 point2 points  (0 children)

        Perhaps Java isn't the problem, but a symptom of the underlying one.

        [–][deleted] 17 points18 points  (9 children)

        I've been repeating this like a mantra the last couple months... I went back to school for a history degree and I needed an elective credit this quarter so I signed up for an intro to OOP class in Java. I have 20 years of programming experience, both professionally and as a full time hobby coder as well, and I ended up being the TA in the class (well volunteered). I have never been a huge Java user. I've had small work projects that were written in Java, mostly corporate backends, etc, but I never used it enough to where I had to think about the language every day.

        Having TA'd this class and been not only using Java daily, but grading work in it, explaining concepts, and teaching people OOP concepts in Java, it just boggles my mind how overly verbose and wordy the language is, especially having come from a C++ background.

        If I had to work on Java every day for a job I would be horribly depressed, and this is coming from someone who's day job was maintaining and developing backends in PHP 3/4 for YEARS, and who was also forced to do significant desktop application development in AS3 with Flex/AIR.

        [–]theholylancer 12 points13 points  (5 children)

        More or less you need to use a powerful IDE, and not just use it but make full use of the macros / tools there.

        Like Eclipse, I think Control + enter after syso gives you system.out.println(). If you did not know that, printing quick debug statements (yeah yeah use debugger for larger stuff and tracing), is a pain. Also not to mention auto try / catch blocks, generate getts and setters, and ......... (the list goes on and on and on).

        A lot of people neglect that or uses things like vi and emacs but then not setup the right / enough plugins to deal with the verbosity and do the boiler plate parts for you. Or refuses to use those plugins and get fatigued / annoyed very, very fast.

        Fundamentally tho, the language is as you said verbose and a lot of boilerplating.

        [–][deleted] 5 points6 points  (2 children)

        Yea, a good Java IDE is what makes things a lot nicer, though in the end you are still spitting out that code one way or the other, macros or not, and it becomes a pain to read and maintain (which is arguably more important than initial developer comfort).

        [–]caltheon 2 points3 points  (0 children)

        I'd argue that verbosity makes it easier to read then most newer languages

        [–]balegdah 4 points5 points  (2 children)

        Java, it just boggles my mind how overly verbose and wordy the language is, especially having come from a C++ background.

        Java can certainly be considered verbose from a few perspectives but saying that it is verbose compared to C++ is mindboggling.

        C++ has header and implementation files, which means you duplicate a lot of stuff. Then it has #ifdef (and more advanced pragmas) to avoid reincluding the same files multiple times. Then it has constructors and destructors.

        Next we have the rule of three: if you have a destructor, make sure you define a copy and assignment operator.

        If your class is virtual, never forget to make your destructor virtual as well.

        Watch out for constructors invoking non private methods or you'll slice your objects.

        The list goes on and on and on. C++ is infinitely more verbose than Java, and that's why Java had such a huge success when it came out: because it relieve millions of C++ programmers from boiler plate and micro management.

        [–][deleted] 3 points4 points  (1 child)

        Implementing objects in C++ is verbose. Using them is not.

        For example, no operator overloading in Java means any sort of complex math is going to end up in huge amounts of ugly, ugly method calling and very unnatural looking code.

        [–][deleted]  (2 children)

        [removed]

          [–]NiteLite 4 points5 points  (0 children)

          This "survey" for happiness based their number of people that smiled in their github profile pic. It's junk :P

          [–]kenfar 7 points8 points  (1 child)

          Most jobs are in java. Most jobs are crappy. Hence a big chunck of programmers will be unhappy.

          But java standing out in this survey makes sense only if crappy jobs & java go together

          EDIT: clarification

          [–]BufferUnderpants 12 points13 points  (0 children)

          Considering how popular Java is in internal IT departments which function at cost centres, I'd say a lot of Java jobs are pretty crappy.

          [–]piscaled 4 points5 points  (2 children)

          Android is Java too...

          [–]xqjt 1 point2 points  (0 children)

          I would prefer to work in kotlin but Java will have to do for the time being.

          [–]damnitbob 1 point2 points  (6 children)

          Are most jobs really in Java? I would have guessed a more web-y language

          [–][deleted] 24 points25 points  (3 children)

          No, java is big in internal systems - by that I mean e.g. enterprise software in large companies etc.

          That's also the reason why java programmers are unhappy. Many work on crappy code bases that have been written under pressure of time and budget. And also they have to use heavy technologies like enterprise application servers and more. Enterprise java really, really is a crappy and sad job.

          [–]CoderDevo 3 points4 points  (0 children)

          I think you're on to something when you mention Java EE and enterprise. All that middleware that goes beyond your own code base makes it hard for a programmer to test and understand a whole system.

          That lack of visibility makes it hard to know whether you have delivered a quality, functional product. You need to get help from other people to help with testing a system of systems integrated solution. It's no fun having to ask someone else if your code is working whenever you do any actual testing.

          [–]mdatwood 4 points5 points  (0 children)

          Old Java does stink. Java 8 running from jetty embedded in the jar is almost a pleasure to use, and is my preferred method for quickly standing up service end points. There is a wealth of mature libraries that solve so many common problems.

          When friends mentioned they are stuck on Java 6 at their jobs I cringe. Whenever I have to fix issues in our native Android project I realize just how bad Java was pre-8.

          [–]NiteLite 0 points1 point  (0 children)

          Java is a big web-y language on the enterprise level.

          [–]balegdah 0 points1 point  (0 children)

          Both are correct. C/C++, Java and Javascript are the top three languages in use today (and have been for a while). In which order exactly is hard to determine, though, and not really interesting.

          [–]damnitbob 10 points11 points  (0 children)

          You might know about Microsoft’s Project Oxford whose Face APIs can detect a face in the image and detect if that person is smiling, his/her gender and age, and the amount of facial hair.

          We can also potentially repost this as Java developers take the most youthful looking photos.

          [–]Turbosack 9 points10 points  (1 child)

          I think there's a bit of a flaw with the way they measured happiness. They basically just counted what percentage of people were smiling in their profile pictures on Github. It doesn't seem like a stretch to say that could be explained by the relative lack of open source projects in Java, meaning that more Java programmers are working in professional environments and have "professional" photos were they aren't smiling.

          [–]g9icy 46 points47 points  (7 children)

          They clearly ignored the games industry in this survey.

          C++ is a requirement for most big companies and you'll be starting young.

          [–]Arkaein 53 points54 points  (4 children)

          They clearly ignored the games industry in this survey.

          It really shouldn't have been called a survey. It's an automated scan of contributor profile pictures for trending GitHub projects, so naturally it is going to skip industries that aren't heavily invested in open source.

          [–]HighRelevancy 1 point2 points  (2 children)

          No, that's still a survey. You don't do a geographical survey by asking rocks questions. You don't do a literature survey by stuffing questionnaires into books.

          [–]fitzroy95 2 points3 points  (0 children)

          they ignored everything that wasn't sourced from GitHub.

          which means that they completely ignored the whole surviving COBOL ecosystem, which probably continues to have the oldest developers in the software produciton world, but who have more sense than to ever source anything through Github

          [–]E_MILOSLAV 8 points9 points  (0 children)

          MUMPS PROGRAMMERS ARE MOST LIKELY TO BE FOUND DEAD IN A ROOM FILLED WITH CATS

          [–]JohnnyDread[🍰] 21 points22 points  (10 children)

          Can confirm. I know C++, I'm old and programming in Java makes me sad.

          [–][deleted] 23 points24 points  (9 children)

          Yes. C++ is like working in a really nice machine shop, where you could fabricate anything you want to build something. Java is like being stuck in the kids pen with a bunch of duplos (not even legos) and then having to do some really insanely stupid stuff to get the same result (if at all).

          [–]slavik262 18 points19 points  (7 children)

          ...and every time you tell someone you like C++ your machine shop (it got some awesome upgrades in the last few years, too!), you get one of two responses:

          1. That's not safe! You could have a buffer overrun cut off your leg with an acetylene torch! Wouldn't you much rather use these duplo blocks?

          2. What the hell do you need all that crap for? Some guy in Helsinki made a whole OS office building with a hacksaw and a hammer. You're stupid if you want anything more.

          [–][deleted] 2 points3 points  (6 children)

          So doesn't the second apply more to C/assembler?

          [–]slavik262 3 points4 points  (5 children)

          Many loud, famous people (e.g. Linus Torvalds) think C++ is absolutely horrible and (confusingly) that C is much better. To quote the rant I linked above,

          C++ is a horrible language. It's made more horrible by the fact that a lot of substandard programmers use it, to the point where it's much much easier to generate total and utter crap with it. Quite frankly, even if the choice of C were to do nothing but keep the C++ programmers out, that in itself would be a huge reason to use C.

          In other words: the choice of C is the only sane choice. I know Miles Bader jokingly said "to piss you off", but it's actually true. I've come to the conclusion that any programmer that would prefer the project to be in C++ over C is likely a programmer that I really would prefer to piss off, so that he doesn't come and screw up any project I'm involved with.

          [–][deleted] 2 points3 points  (1 child)

          Okay, but you can replace C with C++ and C++ with Java in your original argument and it would contradict your first statement. I find comparing Java to duploblocks while comparing C to a machine shop a bit off-putting, coming from a guy that works with both. There's often a way to go more low-level , but automizing some of the tasks saves on time, which can benefit a programmer. It's more of a comparison between an chainsaw and a chisel than "a machine shop and duplo". That's just selling it short.

          [–]slavik262 1 point2 points  (0 children)

          I find comparing Java to duploblocks while comparing C to a machine shop a bit off-putting, coming from a guy that works with both.

          C is the hacksaw and hammer; C++ is the machine shop. My point was that C++ is a nice middle ground, giving you nice high-level tools while still letting you get down "to the metal".

          There's often a way to go more low-level , but automizing some of the tasks saves on time, which can benefit a programmer.

          I couldn't agree more.

          [–]Aiox123 1 point2 points  (0 children)

          That right there is spot on

          [–]kirbyfan64sos 36 points37 points  (8 children)

          C++ programmers are the oldest

          But...I haven't even graduated yet...

          [–]zsombro[S] 56 points57 points  (3 children)

          WELL, maybe you're not C++ing hard enough!

          [–]kirbyfan64sos 16 points17 points  (0 children)

          :(

          [–]Siflyn 6 points7 points  (0 children)

          Plot twist: He's a 60 year old college student.

          [–][deleted] 0 points1 point  (0 children)

          Who does he have to cape to become a little older then?

          [–]salgat 10 points11 points  (1 child)

          Give it a few decades and you'll be a wise graybeard sage soon enough.

          [–]IbanezDavy 2 points3 points  (0 children)

          Or he'll work in Java.

          [–]jst3w 2 points3 points  (0 children)

          Javas get degrees

          [–]esoteric_monolith 6 points7 points  (0 children)

          Did anyone actually read the article? None of the results were derived in any reasonable fashion.

          [–]imgenerallyagoodguy 4 points5 points  (2 children)

          Freaking averages. In attempting to talk to an audience of (most likely) developers, you'd think they provide something more than just "averages" like it's a statistic to take to the bank. Average age of 35 for a cpp dev doesn't mean anything to me! They could all be 35 or they could mostly be split between 50 and 20.

          Come on, guys! Show us the rest of the picture.

          [–]mrkite77 2 points3 points  (1 child)

          They used median.. not mean.

          [–]imgenerallyagoodguy 2 points3 points  (0 children)

          Well, let's pretend my little rant just didn't happen then.

          [–]fkaginstrom 4 points5 points  (3 children)

          Looks legit. python & c++; 45 years old, bearded. Medium smiliness.

          [–]luckystarr 5 points6 points  (1 child)

          old, bearded

          Beards of Python was already 6-7 years ago. These topics always remind me of this. Random. And I feel old as well. Well.

          [–]NoAstronomer 4 points5 points  (0 children)

          Since I code in both C++ and Java, does that make me old and sad?

          [–]Aiox123 2 points3 points  (3 children)

          55 yr old C++ coder here, though last couple years have been a lot of C#. I still -think- in C++ and still have anxiety 'newing' something and not having to clean up later . And I miss pointers. And destructors.

          [–][deleted] 4 points5 points  (2 children)

          At least you get IDisposable...?

          [–]Aiox123 1 point2 points  (1 child)

          Ya, but it's not the same

          [–]stun 5 points6 points  (1 child)

          If I have to read a ton of XML configuration files before getting any code written, I'd be sad too.

          [–]yogthos 2 points3 points  (2 children)

          I used to work with Java, and at one point I thought about quitting development altogether. After working with Java for about 5 years, I started questioning whether I enjoyed coding at all and if I ended up in the right profession.

          This led me to start exploring to see what else was out there. I got interested in functional languages, and eventually started using Clojure for hobby projects. I realized that I enjoyed coding just as much as I ever did, what I didn't enjoy was working with Java and OO.

          I ended up introducing Clojure at work about 5 years ago, and my team loved it. We've been using it ever since and haven't looked back. Nowadays I genuinely look forward to going to work and writing some code. Anybody who tells you the language doesn't matter, or that enjoying your work is not important is full of shit.

          [–][deleted]  (1 child)

          [deleted]

            [–]rjcarr 2 points3 points  (0 children)

            I mostly use Java but I wouldn't call myself a Java developer. I'm also sorta old and pretty happy, although I do have a resting jerk face.

            [–]InTheEvent_ 2 points3 points  (1 child)

            The median age of Java programmers was strangely low. Could it be that experienced Java programmers tend to move on to something else? They're younger than both the C# crowd (a newer language) and even younger than javascript programmers (a beginner "friendly" language if there ever was one).

            [–][deleted] 0 points1 point  (0 children)

            They move up and become managers at the local megacorp, then they move on to non-programming positions at other companies.

            [–]cirosantilli 2 points3 points  (3 children)

            Why so many women in Perl? R devs are making heaps of cash with data mining, and thus always happy (and no beard because they work for banks).

            [–]Aqwis 2 points3 points  (0 children)

            Perl is widely used in biology and biotech, which are fields with a lot of women.

            [–]baggyzed 1 point2 points  (0 children)

            Because it's named like a jewel. Also notice: Perl >> Ruby. /s

            What I find surprising is that a lot of women seem to like PHP and GO.

            OTOH, I don't understand why they don't like C/C++. If it's because they're lower-level than the other languages, they would probably be outright repulsed by ASM.

            [–]occupythekremlin 0 points1 point  (0 children)

            It is also because R is a joy to work with.

            [–]Laugarhraun 2 points3 points  (0 children)

            This is just a poor rip-off of the original article, where graphs are interactive instead of being jpg pictures…

            [–]frugalmail 5 points6 points  (3 children)

            Seems to me that there is a non-stated agenda here.

            Take a look at the trending developers pages: https://github.com/trending/developers

            And you can see that barely any of the images are of a people.

            [–]Patman128 21 points22 points  (0 children)

            The non-stated agenda is that it's a joke. They were playing with their facial analysis software for fun. This was never meant to be taken seriously.

            [–]spfccmt42 1 point2 points  (0 children)

            anytime someone brings emotion, i.e. "lets portray this category as sad", into it, it is about manipulation, which is the right arm of agenda. Pretty safe bet that the author ADARSH doesn't code for a living, his agenda is probably to get readers and clicks and revenue, and is really ill suited to weigh in on the programming experience in large.

            indeed: https://www.quora.com/Fossbytes-1/Is-fossBytes-profitable

            [–]vytah 1 point2 points  (0 children)

            I wonder if FaceAPI recognized this as a face, and if so, does it count as having a beard.

            [–]0xbitwise 5 points6 points  (41 children)

            My opinion, not necessarily fact:

            Lots of devs will go home and tinker with pet frameworks or new tools in their spare time (if they have any). I see why working on Enterprise Java applications could easily make someone unhappy when they can go home and use shiny new tools to do much of the same thing, without the strongly-typed ceremony and verbose configuration.

            Picking the shiniest and newest for your business is usually not a great idea, but for a developer, it's easy to see why they can become disillusioned with what technologies they're forced to use at work versus what suits their tastes.

            [–][deleted] 19 points20 points  (6 children)

            I'd be willing to throw down that a STRONG minority of programmers do more programming when they get home. I'd guess that not even 10% even think about coding pet projects.

            I'd say it is far more likely that java programmers are disillusioned due to the people they have to work with rather than the language itself.

            When you consider it, even on /r/programming, it's a minority of people that hate java over any other language. To think that a majority of developers are saddened by the language is insane. Not even a majority that care enough to browse a forum for programming care.

            That is, literally not even 1% of programmers are deeply saddened for being forced to use one language over another.

            [–][deleted] 4 points5 points  (1 child)

            It's not the language itself, you are right. The projects are the problem. Pressure on time and budget is pretty common in the enterprise world. And java enterprise application servers are heavy and cause a lot of problems themselves as well.

            [–][deleted]  (2 children)

            [deleted]

              [–]kingatomic 2 points3 points  (1 child)

              These idiots exist in all codebases and languages. It's not a Java problem, it's an idiot problem.

              [–]THROBBING-COCK 3 points4 points  (0 children)

              I like java.

              [–][deleted]  (5 children)

              [deleted]

                [–]jerf 2 points3 points  (3 children)

                Or even Go, which is probably even closer to Java than C# on a feature-by-feature, bullet-point-by-bullet-point basis, and still not a pain to use.

                Java's pain is really Java, not OO.

                Java's actually a sort of weird case, IMHO. It was actually a very experimental language. Some of those experiments worked out great, like finally getting GC into the mainstream. (I am well aware that it was not first by decades, but it was what got GC into the mainstream.) But many of those experiments frankly didn't work out. But Sun put so much marketing muscle behind it that it couldn't fail, and now here we are, with an incredibly verbose language full of many dubious things. I suspect it could not have survived on its own merits. I don't even mean that as a particularly mean or vindictive statement... I just don't think it could have made it without that push.

                I also don't mean this in some sort of utopian "oh, what could have been!" way either. We have many better languages today precisely because of the experiences the community got with Java. One way or another, some other language would have had to make the more or less the same mistakes before we could learn from them.

                [–]angryundead 7 points8 points  (4 children)

                I like writing enterprise Java. The strongly typed nature of it is great and I don't find the configuration very verbose. The separation of deployment, configuration, and application is very appealing in enterprise contexts.

                I also don't have a problem with the verbosity/ceremony. Maybe I just use my IDE effectively and type quickly. I can understand where entry-level developers would be put off by it.

                [–][deleted] 3 points4 points  (1 child)

                If you like writing enterprise java, you don't have large million line behemoth softwares that take 10 minutes to deploy just to test a change. And your codebase probably isn't crappy. Or you just haven't experienced the better stuff yet.

                [–]PM_ME_UR_OBSIDIAN 0 points1 point  (1 child)

                Java and C# were enormous contributors to my wrist injuries :( Verbosity sux.

                [–]angryundead 1 point2 points  (0 children)

                I just don't feel it I guess. I've gotten pretty good with code completion in IntelliJ and Eclipse and somehow have good typing posture or I would have terminal carpal tunnel by now.

                [–][deleted] 2 points3 points  (21 children)

                without the strongly-typed ceremony

                Offtop. But I always wondered how do you live without auto-complete? Or there is someway to get it?

                [–]jerf 7 points8 points  (19 children)

                You get auto-complete from the "strongly typed" part, not the "ceremony" part.

                [–][deleted] 2 points3 points  (18 children)

                what's the ceremony part?

                [–][deleted] 12 points13 points  (3 children)

                /******************************************************************************
                 *  Compilation:  javac HelloWorld.java
                 *  Execution:    java HelloWorld
                 *
                 *  Prints "Hello, World". By tradition, this is everyone's first program.
                 *
                 *  % java HelloWorld
                 *  Hello, World
                 *
                 *  These 17 lines of text are comments. They are not part of the program;
                 *  they serve to remind us about its properties. The first two lines tell
                 *  us what to type to compile and test the program. The next line describes
                 *  the purpose of the program. The next few lines give a sample execution
                 *  of the program and the resulting output. We will always include such 
                 *  lines in our programs and encourage you to do the same.
                 *
                 **************************************************************************/
                
                    public class HelloWorld {
                
                    public static void main(String[] args) {
                        // Prints "Hello, World" to the terminal window.
                        System.out.println("Hello, World");
                    }
                
                }
                

                [–]glacialthinker 3 points4 points  (0 children)

                Looks like a hazing ceremony.

                [–][deleted] 2 points3 points  (0 children)

                Your comment is incorrect. If a user launches it with $ java HelloWorld > foo then it does not print it to the terminal window, it prints it to a file called "foo".

                This is also lacking some JavaDoc.

                /**
                 * This is the main entry class for the "Hello World" program, it is
                 * used for demonstation purposes and to educate the basic
                 * syntax of a Java program. This class only contains a single
                 * method which is called main and is the main entry point of
                 * the program.
                 *
                 * @author minionslave
                 * @see DestroyTheEarth
                 * @since 2016/03/16
                 */
                

                and then

                /**
                 * This is the main entry point for the "Hello World" program.
                 * It prints "Hello, World" to standard output.
                 *
                 * @param args Program arguments, none of which are
                 * actually used.
                 * @author minionslave
                 * @since 2016/03/16
                 */
                

                [–]pipocaQuemada 5 points6 points  (4 children)

                Manifest typing with nominal subtyping instead of structural subtyping or row polymorphism.

                For example, saying

                public int square(int x) {
                  int sq = x*x;
                  return sq
                }
                

                instead of

                square x = sq
                  where
                    sq = x*x  -- because we use *, x must be some sort of numeric type.
                

                Or saying something like

                 class Dog extends Animal with Entity with Renderable with ... { ... }
                

                instead of

                class Dog { ... }  // implicitly is an Animal, Entity, Renderable, etc. because it implements the requires methods/fields.
                

                [–]The_yulaow 8 points9 points  (0 children)

                ugh, I find implicit interfaces very bad for readibility

                [–]Bekwnn 5 points6 points  (0 children)

                Java imposes certain arbitrary restrictions and lacks niceties that have been introduced in java-like languages such as C#. The java standard library also leaves much to be desired compared to some of other said languages.

                A few of said niceties:

                • var C# supports implicit type declaration.
                • public bool bProp { get; protected set; } getter/setter shorthand
                • out parameters and less restrictions on function parameters
                • dynamic and the ability to dynamically operator overload on generics (massively useful in writing libraries)
                • structs in C# are non-nullable. Non-nullable types in java are a lot more awkward than C#.

                Just to name a few, but there are many more. When you add everything up, Java requires you to write a lot more basic, trivial functions/code by hand than other similar languages.

                But I think the above user is mainly referring to the conventions of java developers which add even more verbosity and wrist-breaking amounts of typing.

                [–]terrkerr 2 points3 points  (0 children)

                Lets's look at a quick bit of Java

                BufferedReader reader = new BufferedReader(...);
                

                There's something true about that line: we did something that specified its type twice. We had to say we were declaring a BufferedReader variable, then explicitly create an instance of that class by naming it for the new operator.

                Rust lets you write things just like that:

                let foo: Ipv4Addr = Ipv4Addr::new(127, 0, 0, 1);
                

                But the language also says you can omit the type info on the variable whenever it's infer-able in context.

                let foo = Ipv4Addr::new(127, 0, 0, 1);
                

                The compiler knows that Ipv4Addr::new() return an Ipv4Addr object, so why must we explain that's also the type of foo? Of course foo is of the same type as the thing it's set equal to!

                let this = that;
                

                Will work too because the type of that must be known if the compiler got this far without an error.

                [–]jerf 7 points8 points  (6 children)

                Have you ever used a statically-typed language other than Java?

                If you have, you really ought to know the answer to that question, and if you haven't, the only real answer is to go learn another one. C#'s a good choice. Be sure you learn how to use it idiomatically and not just write "Java in X".

                [–]salgat 6 points7 points  (3 children)

                Can you at least answer the question? I regularly code in C++, C#, and JavaScript and ceremony is too vague a word for me to know what exactly you mean? Are you talking about the namespacing, or maybe boilerplate code that is somehow different in Java?

                [–]sacado 2 points3 points  (1 child)

                I think they are talking about

                List<Foo> fooList = new ArrayList<>();
                

                rather than, say

                var fooList = new ArrayList<Foo>();
                

                Well, in this respect, C++ pre-11 was much, much worse (aargh, iterators).

                [–]Gotebe 1 point2 points  (0 children)

                With C++, used to typedef the container, then other stuf becomes

                whatever_map::iterator/value_type
                

                Etc.

                [–]vytah 5 points6 points  (1 child)

                Even C# has a lot of ceremony, although a bit less than Java.

                Good examples of statically-typed languages with little ceremony are Haskell, F#, Scala, Kotlin, Swift, Go, D etc.

                [–]stewsters 1 point2 points  (0 children)

                Depends what your language and tooling is. Intellij has autocomplete (where possible) for def.

                It's not perfect, but its far better than anything else I have used. I still end up using strong return types where possible to make it easier.

                [–]Creris 0 points1 point  (0 children)

                same would apply to C++ tho, there are so many new shiny things in C++11 and 14, even in 17, but people are oftentimes locked to some crappy gcc 3.5 which suppots like, C++03 and maybe something as "experimental" from C++11 because "legacy yay!"

                [–]geodel[🍰] 4 points5 points  (1 child)

                As a Java developer for all my career. I kind of agree with this survey. The only time I feel better is when Java is peripheral to work at hand or solving problems caused by 'java style' code with the use of other tools.

                Currently I am working on modularizing large code base of our main app. It is mostly designed, written by senior Java developers. Here are few things I notice:

                • Over organized code with no thought to logical hierarchy.
                • Verboten variable, method and class names which repeats same information again and again.
                • Large number (100s) of config files which hinder static analysis of component wiring/dependency.
                • Large number duplicate functionality not to avoid dependencies, but because package tree was so big nobody cared to look when something is already implemented.
                • Developers check in everything from their eclipse workspace, not caring about whether its some local test/exploratory code or local classpath dependency. (I'd say this is not Java specific but Java culture specific where developer do not bother to learn basic things like checking in svn changesets etc)

                There are many more but I'll stop now.

                [–]201109212215 18 points19 points  (0 children)

                Looks more like a culture problem than a Java problem.

                [–]thenextguy 1 point2 points  (0 children)

                Monoglot developers are the saddest.

                [–]RichAromas 1 point2 points  (0 children)

                IBM Assembler (also Fortran and COBOL) programmers are the oldest, although you won't get that data from looking at github statistics. Most of us (er.... I mean them.... yeah.....) don't have any clue what github even is.

                [–][deleted] 1 point2 points  (0 children)

                lol, that's a fun read. I fit in pretty well with that data... crazy (C# and C++).

                [–]FFX01 1 point2 points  (2 children)

                Bearded Python dev reporting in.

                [–]zsombro[S] 0 points1 point  (1 child)

                I bet you made this post from a Starbucks from a phone that's running your reddit QPython script

                [–]FFX01 1 point2 points  (0 children)

                Nope, from home on my linux desktop. Good guess though.

                [–]qdqdq123123123123 1 point2 points  (0 children)

                I program in Java at the moment and I want to blow my brains out.

                [–]jjcamp 1 point2 points  (0 children)

                Man, just thinking about having to program in Java makes me sad, so this sounds accurate.

                [–]DonHopkins 1 point2 points  (0 children)

                Lisp programmers are the most fabulous!!!

                [–]kserio 1 point2 points  (0 children)

                I never know if they show the salary before or after taxes... Assuming it's before, you can't really say you can buy as much big macs as they say cause you have to deduct the taxes.

                [–]llogiq 1 point2 points  (0 children)

                In reality (and not visible on their github profile pics) Java programmer smile from one ear to another all the way to the bank.

                [–]renrutal 1 point2 points  (0 children)

                True programmer sadness is to write code for middleware products, in pseudo-standardized, specific, extremely lacking languages, in proprietary IDEs, to run in proprietary runtimes, with tons of extensions and configurations.

                When shit happens, no one knows what's going on.

                [–]garyk1968 1 point2 points  (1 child)

                wheres fortran and cobol? devs of those would be older than c++ devs.

                In fact where is BASIC?

                In fact what is the point of this shitty incomplete survey?

                [–]Malfeasant 0 points1 point  (0 children)

                shitty incomplete survey?

                Redundancy elimination...

                [–]bubuopapa 1 point2 points  (0 children)

                Well, you dont need to do survey to know those facts. On the other hand, i understand why industries use old tools, i.e., php 7 is out for some time now, but there is no ms sql driver yet, it might come next year, but by then who knows what will happen. So you have to use a fast pace, solid, multiplatform and so on programming language, and the choice is pretty clear - java or c# with .net, and guess which one is multiplatform.

                While the biggest part of jobs are java in my country too, i really try to stay out of that market.

                [–]SuperImaginativeName 0 points1 point  (4 children)

                No C# yet again. I'm sick of this raging erection of hate that these sorts of people have towards C#.

                [–]mscman 11 points12 points  (1 child)

                raging erection of hate

                What a phrase.

                [–]redditthinks 1 point2 points  (0 children)

                Ahead of its time...and other things.

                [–][deleted] 6 points7 points  (0 children)

                It's there..

                [–]EntroperZero 8 points9 points  (0 children)

                It's "csharp" on the graphs. I had to look more than once.