I don't get this at all. I've been at this over 20 years and the only times I get "angry" (or more realistically, frustrated), is when the powers that be are adamant that the team spend months building a feature that no one wants or has no justification or is the feature we removed two years ago or there is no vision for what we are collectively trying to do. Digging a hole and filling it back in each day is very frustrating and can lead to anger.
Programmers do get a dopamine high for solving things, creating things. But for me, this isn't about how genius we are but about making someone's life easier or better or providing real value to the company or customers. Right now, I'm spending most of my time adding features to a web portal/console with the sole intention to reduce tech support and enable scaling. There is nothing hard or genius about it. It is about understanding the real issues and making tools to solve problems. And when I succeed at that, I do get a rush. Yeah, me.
Years ago, I worked at a company that had a computer vision based software product. The internal object structure was a nightmare. (Whoever wrote it initially had obvious just read their first OO programming book and decided to abstract all the things!). Each customer project had a configuration file that described all the tests and objects and connections. There were some that took over 45 minutes to load! With a little (2 days) profiling, I could see the biggest time waster. So, I add a map<object,name> to simplify the object connection process. Nothing magic or genius but it reduced the load time to 7 minutes! Not all valuable computer science work needs to be creating a new technique for neural networks. 90% of all things we need computers for is a simple UI and CRUD to a data store. It doesn't have to be genius if done in a way that adds value, then it is worthy of pride, not anger.
>I don't get this at all. I've been at this over 20 years and the only times I get "angry" (or more realistically, frustrated), is when the powers that be are adamant that the team spend months building a feature that no one wants or has no justification or is the feature we removed two years ago or there is no vision for what we are collectively trying to do.
Constantly amazed at how often this has happened to me. The worst is the fake "agile" terminology when you're doing the opposite. MVPs that are neither minimal nor viable nor a product. Two week sprints that stick to the Gantt chart we made 6 months ago no matter what the customers/target audience tell us. Spending more time talking about the work we've done and plan to do than actually doing any.
The empire-building as well drives me nuts. We need more people! Don't know what projects they will specifically do, communication and collaboration overhead is already slowing the pace down to a crawl, but we need more people. That way I can say I "led" a large team of engineers on LinkedIn. Wish these people obsessed with "leading" people could all be replaced by people obsessed with leading products.
Always amazed me that I could make $8 an hour serving pizza in high school,, but clearly delivering economic value to people, then find so many people in the world who can raise so much money money or headcount and pay me ten times as much so I can deliver absolutely no value to anyone.
I know we were talking about how most stuff doesn't make us angry though :)
I think I was always above-average intelligence (top 20%) but I don't think I'm close to a genius. Sure, people pay me money to do things and of course many of them could do it themselves if they learned how, that much is obvious to me. I pay a lawyer money but I'm pretty sure I could have become a lawyer, it's not an insult to their intelligence, we all specialized, that's how economics works.
I think a lot of programmers get angry because they're young and poorly socialized, my past included. Getting motivated to improve that which can be improved is good. Looking out for yourself and not being a doormat to the sociopaths that VC and management tends to attract is good. Doing the above without getting angry about what is usually trivial in the big picture is best.
> The universe is so structured that most programmers find themselves solving problems of exactly that complexity which it is just barely within their competency to solve. In other words they feel as if they’re solving quite difficult problems a lot of the time. Hence they feel very smart.
I don't know about other's here, but this is the opposite of my experience. I feel under-employed because I'm constantly solving problems which are way below my competency. (That's not to say that I'm smart; just that the kind of work most people have to work on is insanely easy, and many probably feel 'above it'.)
When I get angry it's almost always because I'm bored out of my skull, and need to take a break to do something creative or intellectually surprising. The original post seems to pin anger on jealousy and not boredom. And at any rate, whether or not you are angry because you are jealous or because you are bored, the solution is to take a break.
> In fact, sometimes they may get the feeling that someone who doesn’t program at all, could readily do it if they were bothered, but since they can get other people to do it for them, consider the whole thing a little trivial.
This is arrogant. There are a lot of people that can avoid programming, but a majority of these people wouldn't find it trivially easy. It's a skill set which actually takes quite a long time to build up, and having good people managing skills isn't likely to help.
All I can really say after reading this, is: generalising other people's psychology, choice of work, and perceptions about their work isn't a good way of understanding them or working with them. The fact that this person decided to make a blog post of it as if it was a clever way of understanding 90% of programmers is just an embarrassing reflection of themselves.
> I feel under-employed because I'm constantly solving problems which are way below my competency. (That's not to say that I'm smart; just that the kind of work most people have to work on is insanely easy, and many probably feel 'above it'.)
This leads to injecting tool complexity. The JS world is a good example where it seems sometimes people are bored so they inject tool complexity in order to not be bored.
I actually generally get depressed instead of angry, too... So I was writing about this from a perspective closer to yours, and not of an 'angry developer'. (I'd normally send a smiley emoji here but it feels wrong.)
It is truly a self character assassination, but I'm not embarrassed. We all have many moods and phases. This was merely intended as a sketch of a mood many programmers may pass through...
Don't take it the wrong way, I was only skewering it because I thought it kind of erased 'bored therefore angry (or depressive)' developers and because I think 'work is often dull but the people that do it should still be respected.'
I thought it was a kind of understanding which attempts to contain everybody within a single category and then to belittle them.
I don't walk around telling people that I could do their job easily and only avoid it because it bores me. That's pure arrogance.
It takes time to learn to do something well. I know if I sat down and tried to architect the design for a house I'd be able to do it -- eventually --, but this doesn't mean I will write an article about how it's trivial work and that the only reason I will pay somebody to do it is because I "can't be bothered". Not insulting people is a basic level of respect, that I believe you should go way beyond.
I've been a professional software developer for 20 years. In the early days, I would experience thoughts like "I just figured out an elegant solution to a hard problem. I am a GOD AMONG MEN!!!!"
About 5 years in, I started to lose that "high" I would get from programming. That feeling came less often and was less powerful. I experienced some mild depression and general health issues. It occurs to me now that I was likely dependent on that dopamine high.
I'm sure some programmers burn out during this phase. Somehow I made it through.
These days I still enjoy my work, but I'm no longer chasing that dopamine high. I still stumble upon it every once in a while. But I recognize that it is a fleeting experience and I just go with the flow while it lasts. And when it is gone, I am still able to get work done. I've learned to be productive in both states.
I think many developers (and tech. companies) could benefit from more education and study about this topic. I think it affects us more profoundly than many of us realize.
I think when you stop experiencing it that's a good indication that you should start learning other things. I like that idea that you should try to become an expert in something every 5-10 years. (not that you should stop the old things)
I call that "the grind". Its doong things in spite nof how you feel. Building enough muscle memory to do things well without much effort. Happens it everything we do in life. In fact, it ks hapoening1 to me right now with running. Im not excited anymore about running 3 miles. But I push through.
Author here. People seem to be applying a lot of very different interpretations to this. Which means I either did a good job or a bad job, depending on your feelings about ambiguity.
For clarity, I wrote this 3 years ago after a conversation with an elderly man who asked me why his son was so angry. He'd heard I was a programmer and he told me his son was a programmer and he felt convinced the work was the root of the problem.
I put forward the theory here with a characteristic lack of tact or sensitivity. The next day I wrote it up and forgot about it until now.
So contextually, it was very much about mental health.
All a programmer has to do to show his or her real power is utter the words 'I quit.' Then all the obviously more intelligent and better looking managers and business people start to lose their shit.
At face value you're right. Threatening to quit should leave managers in a panic because no one else can do your job.
There's two main reasons why this might be the case.
The first is because you're actually not very good. Great code can be worked on by someone else, which means if you not easily replaceable then it's because your code isn't easily accessible to other developers or there's knowledge that you haven't documented properly. In this case any competent employer should readily accept your resignation.
The alternative is because you're the absolute best your employer can get for what you're paid. You could be amazing but there's always someone better if the employer is willing to write a bigger check. They could replace you with a team of 20 if they're willing to pay enough. In which case your employer has to choose whether to agree to your terms to keep you or to pay more and get someone who'll agree to their terms. Never underestimate how much an employer will pay to get their way.
There's a third possibility: the code your company generates is either so heavily managed or so relatively easy that they don't need "good" engineers, just "barely competent" engineers. I ran into that situation with a large defense contractor. They won't pay for quality partly because they don't need it, and they see all people as replaceable cogs.
Deadlines can be moved. Resources can be allocated to projects to account for unforeseen events. Penalty payments can be paid. It's definitely not ideal but often established businesses can cope with someone leaving unexpectedly. It can kill a startup, but so can most things.
What I'm saying is that you shouldn't be too surprised if a threat to leave is met with "Oh. That's a shame, but nevermind. Bye." You may feel you have a great deal of power over your employer because you see your role as important or even critical to the business, but they might see your role very differently.
Usually because your employer has no idea how important you are to the effort. Often employees have regard for developers based on fame or project they've done before. Rarely on skill or how important they are to current efforts. When asked who were the most important developers to our OS group, the engineering manager named the original team that created the project. He got a perfect score - completely wrong. They had all moved on and the current OS team were young folks, new hires and recent additions. Including me at the time.
Be very diligent about communicating! You can easily get forgotten in a larger effort.
Or, just as frequent an occurrence, your pointy haired boss wears glasses instead of a tie, and nothing else has really changed.
The grass sure looks greener on the other side, but unless you work for some truly heartless pond scum, you'll find a lot in common between any two employers.
I've learned over the years that it really comes down to do a ton of due diligence on the company. It's easier now with LinkedIn, Glassdoor and other sites that allow you to get a glimpse of what some employees think of the company. I also found that you can use LinkedIn to search for that company, and you can spend some time viewing profiles for former developers or another role you're wanting to take on. If you see that a handful of developers have left under a year while at that company and are doing a similar role at another company that's a red flag to me. I'd reach out to those developers and just get their honest opinion.
This isn't always possible, but it has ended up with my last two employers being some of the best I ever had.
> Occasionally an awareness may filter through that the kind of difficult problems they solve, are the dull trivialities of some other programmer’s daily bread
Radar is one of the magic voodoo technologies that is hard, if not sometimes impossible, to get right. In theory it's extrmeley simple. Anyone with any background in radio knows just how "easy" radar is. You throw a 70cm or shorter wave at something and wait for it to get back. You can also stance two 70cm transmiters (one in front of the other) at diffetent fequencies and using the known distance of the 2 transmitters, the known speed of the wave in the air, and the time of arival of the two waves very simply calculate the speed, distance, and direction of an object. Look up "Doppler Frequency Shift" equations and also just wave velocity. It's dead simple.
Now, given that information I can also talk about how amazingly difficult radar is to implement. All sorts of noise in collection and extremely small errors in sampling can throw your reading far off (in most states in the US that's why there is a +-10MPH speed gratice applied to radar guns).
If someone was to go through and by themselves solve every little problem associated with radar and build a microwave-based radar system I'd be really fucking impressed [0].
This is because radar is hard and the act of tackling every little challenge associated with building it. Just because other people have built radar systems and some people do so every day doesn't mean it isn't hard or you're not advanced for doing so.
Radar is a bit of an extreme example but I think the methodology still applies to making massivly parallelized programs, or synchonization and elimination of race conditions, or learning all of the tricks to get your program into a small space, or even perfecting UX/UI for your users. It doesn't matter if other people have solved it, if you're also solving it on your own then you're just as smart as the others before you who came up with the idea and did it themselves as well.
I do think it's valid to say many programmers are big headed but I think that's just the online space of programmers. Most programmers I've met in real life are really nice and humble people who are just excited to get-shit-done.
> If someone was to go through and by themselves solve every little problem associated with radar and build a microwave-based radar system I'd be really fucking impressed.
Wait, what? It seems like this person is projecting their own problems on everyone else.
The realization that you're not a genius and that there are more competent people around and that programming is often not research but actually engineering, you should have that realization in your late teenage years or early twenties when you go to university or work hard on acquiring computer science skills.
I dunno about that, I tend to get angry because someone has solved a problem, taken the dopamine hit and walked off without making sure their solution was correct.
What I get angry about is that some people just underestimate the time to get a program ready for production.
Of course I can write a program in a week. But I doubt that it will be easy to update and will have more bugs than a program that was written with longelivity in mind with a proper time frame.
And my experience has shown that soft skills (= EQ, being good with people) among programmers are not worse on average than in any other occupacion. In my life I've just met too many jerks among sales-people, managers, lawyers, doctors - that is occupations typically associated with high EQ requirements. Being introvert and getting fun from interaction with machines does not automatically mean having lower EQ or being worse with people.
"Programmers that think they are geniuses account for about 90%. Programmers who think they are pond scum, 10%". I stopped reading here. Maybe it was the author's first day at work..?
I think spacemanmatt might be implying that working in IT has a tendency to make one feel stupid. ("The more you know about IT, the more you realise you don't know about IT.")
This isn't unique to IT. There are many fields where there are always new things to learn. However, a career in (say) selling cars or owning a restaurant would require much less lifetime learning.
There are ways to improve how smart you are - it is largely a learned & practiced skill in fact. One could potentially become much smarter by working in another domain as opposed to spending the same time in a different one. There are always opportunity costs in the choices we make.
However, it is a problem successfully solved by many programmers.
Bezos. Gates. Larry and Sergey. Zuckerberg. DHH. And of course, Paul Graham.
You might say this is the whole reason YCombinator exists.
"The real reason we started Y Combinator is one probably only a hacker would understand. We did it because it seems such a great hack. There are thousands of smart people who could start companies and don't, and with a relatively small amount of force applied at just the right place, we can spring on the world a stream of new startups that might otherwise not have existed."
Reading between the lines slightly (and I believe Paul said this more directly in an article I can't find right now), Paul believed its easier to turn great hackers into great business people, than the other way around.
So yes, at some point spending all of one's time programming yields diminishing returns. But its perfectly possible for someone smart enough to be a good programmer to also learn how to solve problems requiring more than one individual's contribution.
"... fact, sometimes they may get the feeling that someone who doesn’t program at all, could readily do it if they were bothered, but since they can get other people to do it for them, consider the whole thing a little trivial. That is a very unpleasant feeling. Sometimes they may get the feeling that a whole class of persons vastly more intelligent than themselves don’t even care to know how a computer works: it is possible!"
Every time that happens, i make a new project to kill that persons meaning in life or their job. Yeah, you make nice bonsai's- so i made a bonsai cutting robot.
Yeah, you relish wielding power and talking down to others- but my neural network is better at that.
Next project: Make a blog-bot, that trys to reduce other peoples confidence to ash.
I used to be one of those people in that quote - I found programming too simple/easy, and ended up doing math and physics, subject matters of far more complexity. I only ended up programming because I needed work afrer grad school and after 2 1/2 years of job searching, I got lucky and someone took a chance. To this day I continue to be happy about my line of work - it isn't particularly difficult (frontend web development primarily), but it lets me solve little problems and keep my mind engaged while paying exceedingly well. The perspective shift from being unemployed with dubious prospects makes me not care about how I am relative to the rest (although in my domain, it turns out to compare very favorably).
I really don't think that it's possible to rank disciplines like math, physics or computer science by complexity and say "physics is so much more complex than computer science". There might be areas of physics that are very complex, like string theory (which probably belongs more to mathematics though), but there are also very complex and hard problems in computer science (or even programming!) that no one was able to solve effectively up to this day: As an example, we're still struggling to design a programming language that is easy to learn and use and at the same time efficient and safe. And I think if we took 100 string theorists and put them up to the challenge of building such a language there is a very small likelihood that they would succeed (I even think there is a large probability that they would scr*w it up in a spectacular way).
I worked in quantum physics myself and have a PhD in experimental quantum computing, but still I consider writing good and reliable software a tremendous challenge, and often I initially fail at it when building large projects. I'm now mostly working on data analysis and static code analysis, and I consider these two fields to be at least as complex and stimulating as my earlier work.
I think what we as programmers need to realize is that we're not better (or worse) than anyone else just because we can write software, and we also need to realize that building anything usually requires people with a variety of skills, both technical and non-technical. Most of our work would be entirely useless on its own, it just derives meaning within the context where it's used.
Therefore, in my opinion the real "10x" programmers are not only those that can churn out brilliant code at an amazing pace, but those that understand their own work in the context of the project that this work supports, are able to effectively and efficiently work with everyone else on the team to support it, and do not have a mental ranking of job professions that classifies people into "high" and "low".
>So here we have a dopamine’d up, blissed out little programmer...
The author referred to programmers as "little" repeatedly throughout the blog post in a manner disturbingly reminiscent of a certain politician's successful tactic to smother an opponent in recent primary debates.
It's just being nasty. Whatever truth scandox is trying to share is hampered by his own apparent anger and condescension.
Great post. Now I have understand a bit more why I am grumpy when stymied at work.
That said I think that anyone who loves what they do would be a bit annoyed if someone else treated the work done as something just to be paid for as inexpensively as possible. Angry? I don't know about that. I do the see why programmers/developers would be different.
Lost me at the first paragraph. I know many very competent (even amazing) developers who THINK they're pond scum. Imposter syndrome is very real. On the flip side, the developers who think they know everything and lack the knowledge to know what they don't know are the scariest.
That 'unpleasantness' is due to a part of yourself recognizing some truth and being uncomfortable with what the mirror projected back. It's normal, all of us experience it. It's very useful to analyze why something makes us feel this way and better understand ourselves.
No, it's definitely unpleasant because it makes 90% of programmers look like arrogant assholes and talks about "our little programmer" in a patronizing way. The final sentence touches upon some correct things, but as far as I can tell many programmers aren't arrogant; rather the opposite, they have imposter syndrome, caused by the fact that by nature, programming involves spending hours on something that turned out to be trivial in the end.
I myself am not a developer, just a hobbyist; don't assume everyone on HN is a developer
hmm, generally when I suppose there are classes of beings of intelligence vastly greater than mine I suppose they are sitting up on Mars watching the earth with jealousy.
Vastly more intelligent not just more intelligent but vastly. Wow.
god no, this post reminds me how i was looking at it, i started to deal with it in another way, it is just a fun money source until i start my own thing
It's a very dehumanizing concept, and drives us back to the same ideas of meritocracy where everyone is gauged based on their work output compared to the "smartest" person in the room. There's a lot more to building successful teams than maximizing the work output of every single person on them, and there's absolutely nothing wrong with that.
Programmers do get a dopamine high for solving things, creating things. But for me, this isn't about how genius we are but about making someone's life easier or better or providing real value to the company or customers. Right now, I'm spending most of my time adding features to a web portal/console with the sole intention to reduce tech support and enable scaling. There is nothing hard or genius about it. It is about understanding the real issues and making tools to solve problems. And when I succeed at that, I do get a rush. Yeah, me.
Years ago, I worked at a company that had a computer vision based software product. The internal object structure was a nightmare. (Whoever wrote it initially had obvious just read their first OO programming book and decided to abstract all the things!). Each customer project had a configuration file that described all the tests and objects and connections. There were some that took over 45 minutes to load! With a little (2 days) profiling, I could see the biggest time waster. So, I add a map<object,name> to simplify the object connection process. Nothing magic or genius but it reduced the load time to 7 minutes! Not all valuable computer science work needs to be creating a new technique for neural networks. 90% of all things we need computers for is a simple UI and CRUD to a data store. It doesn't have to be genius if done in a way that adds value, then it is worthy of pride, not anger.