Thinking about the worst that could happen
Him: “Have you heard what I’ve said to her?”
Me: “Yeah, you greeted her. So?”
Him: “What do you mean, ‘so’? You think that’s how a regular person greets an unknown cashier? With that kind of tone? No, man. This is what I get for greeting people thousands of times a day as a waiter. A professional deformation. It spilled over to my personal life.”
As I work with “the machine of pure logic” for a better part of my day, I keep thinking: what’s the “overly-polite greeting” for this profession? How does programming spill over to my personal life? Does it make me look at everything in black and white dichotomies? Does it make me seek logic in the illogical? Does it make me think that every problem has a technical solution no one has thought of?
Does it make me inclined towards pessimism?
It would be silly to think it doesn’t affect my personal life. Anything you do for a third of your life probably changes you as a person.
Since good programmers always have to think about worst-case scenarios, it’s only logical to think that this makes programmers more pessimistic. If constant catastrophizing is not a main trait of pessimists, I don’t know what is. “Think about the worst that can happen all the time” would probably be a core mantra of a pessimist life coach — in a parallel universe where pessimist life coaches existed.
I could be wrong about this; maybe being over-cautious doesn’t immediately make you a pessimist. Stoics have been using negative visualizations in order to better deal with adversity for centuries, and I wouldn’t say this made them pessimists. It made them better prepared for the worst that could happen, as well as more grateful for the small things in life.
Still, I don’t think most optimistic people imagine worst-case scenarios (at all?). This is what makes them optimistic. Most optimists are blissfully unaware, or naively optimistic. This naive optimism is not a valuable trait for programmers, unless you are secretly plotting to sabotage the company you are working at (if that’s you and the company is enterprise, send me your IBAN, I want to support your noble goals).
As my wife is currently learning programming (years of persuading her to start have finally paid off, so I can retire now) I am second-handedly experiencing what it's like to be a beginner. Something I’ve forgotten about after all these years.
One of the most prominent problems I’ve become desensitized to is the constant supply of things that don’t work from the first try. She is surprised by this, while I see it as something completely normal at this point. Nothing works from the first try and the reason why it doesn’t is always logical in hindsight. This can be pretty demoralizing to beginners, as they haven’t yet developed the self-esteem necessary to overcome these problems, due to the lack of experience.
As Nathaniel Branden writes, there’s a positive feedback loop between taking action and self-esteem: one feeds the other. Not taking action starts a vicious circle, while taking action starts a virtuous one.
Perhaps self-esteem is not the right word. You could also call it “growth mindset”. No matter what you call it, the point is that you need a little of it in order to overcome any issue thrown your way, even though you are a complete beginner. This attitude pays off.
Beginner programmers become better by avoiding worst-case scenarios that they imagine up front, which pushes them towards pessimism and makes them more pessimistic in their personal life. Considering how Murphy's Law applies to your code all the time means you constantly have to catastrophize. And once the brain gets used to that kind of thinking, it starts applying it in every context, not just in programming.
Yet, I don’t think the best programmers stay pessimists during their entire career. They understand that pessimism is a self-fulfilling prophecy, so they actively work on becoming more optimistic.
Instead of remaining pessimists, their experience gives them the self-esteem necessary to overcome any obstacle. They are aware of worst-case scenarios, but they are also confident they will avoid them. They are not as pessimistic as beginners, who are somewhat desperate when things go south, but they are not naively optimistic either. Just like pessimists, they are aware of the worst that can happen, but they are optimistic. Rationally optimistic.
If the motto of the pessimists is “think about the worst that could happen all the time”, the rational optimists’ motto is “the worst that could happen won’t happen because we have prevented it”.
While pessimist programmers consider Murphy’s Law their destiny, it’s just a tool for the more experienced programmers. A tool that tells them what they should take care of. When they do, their self-esteem grows, which helps with optimism. It’s a virtuous circle.
For programmers, the process of becoming a rational optimist takes time and in the meantime programmers are annoying leadership (which is usually naively optimistic) by poking holes in their ideas. It seems like that’s the programmer’s main purpose. This creates tension that is only resolved once programmers “graduate” to optimists.
You wouldn’t get far if you were pessimistic and tried to build a company, just how you wouldn’t get far if you were an optimist and tried to professionally develop software. You have to start somewhere. But I think both programmers and leadership benefit the most if they are rationally optimistic.
Unfortunately, I don’t have one-size-fits-all recipes for becoming a rational optimist if you are a pessimist. What has been helpful for me is writing down my predictions and testing their accuracy later. It made me even more aware of how I tend to think of the worst case scenarios and how those scenarios rarely happen, making Seneca’s claim that we suffer more often in imagination than in reality more vivid in my mind.
Just being aware of your position on the rational-optimist <> pessimist spectrum can help a lot. Being aware of your tendencies allows you to avoid becoming too extreme if you don’t want to. So, if you’re a pessimist and want to become a rational optimist, the first step is realizing that most of your predictions predict the worst. When you start tracking the accuracy of these predictions, you will realize the calibration of your prediction engine.
I think engineering calibrates you pessimistically, which is why Hacker News sounds like what it sounds like. Announcing Dropbox gets dissing “Congrats, you have re-invented FTP! I could’ve done it in one weekend.” comments.
Just being crazy enough to think that you can build the next great thing, that you can produce something that is going to be useful to other people and be better than anything else on the market, that you can write an essay that is going to resonate with people and be noticed — not because of the delusion that you are inherently perfect and better than everybody else, but because you have toiled on perfecting the skills necessary, and eliminated each and every imperfection you are aware of — that is the mark of the true rational optimist. That is the mark of someone who is not going to get in their lane and keep their mouth shut, no matter how many people try to cut their wings. No matter how many people diss your idea of building the next Dropbox, because “it’s just FTP”, build the next Dropbox and ignore those who diss, since they probably never built anything themselves anyway.
Yes, programming for a better part of every work day makes me more frustrated with irrational behavior – one of the reasons why I avoid news and politics – makes me more inclined towards technical solutions, makes my thinking more black-or-white, and makes me more pessimistic and my catastrophizing more creative.
But it’s worth putting some effort into becoming more optimistic: most people are passive pessimists, but rational optimists take action and build the future.
Thanks to Mateja, Rajat Mittal, Chris Angelis, Stew Fortier, Georgia Patrick, and Ian Vanagas for reading drafts of this piece.