If you could stop all terrorism in the world by eating your vegetables and exercising for 30 minutes a day, would you?
How’s that for an eye catching first sentence?
If you look at 3 data points:
- What people die from
- What causes of death people search for on Google
- What the media reports
You may notice something weird. And that weird thing is two fold:
- What people search for isn’t necessarily what they’re likely to die from.
- what people are likely to die from isn’t at all what the media is reporting on.
There’s an article by Our World In Data that starts like this:
One of the primary motivations for our work at Our World in Data is to provide a fact-based overview of the world we live in — a perspective that includes the persistent and long-term changes that run as a backdrop to our daily lives. We aim to provide the complement to the fast-paced reporting we see in the news. The media provides a near-instantaneous snapshot of single events; events that are, in most cases, negative. The persistent, large-scale trends of progress never make the headlines.
An intense story about terrorism will get a lot more clicks than a story about heart disease, but heart disease will kill a lot more people than terrorist attacks. You should click through to the article, they have some really good interactive charts. For us here, let’s look at some statistics:
630,000 people die of heart disease ever year, 1 in every 4 deaths.
If you average the deaths per year of the American Terrorism data sheet, you come up with 131 per year die from terrorism in America. That is including September 11, 2001, and if you don’t include that you come up with around 20 people dying per year of terrorism in the US. Some quick math gives us
630000 / 131 = 4809ish. Meaning if you live in the USA, you’re around 4800 times more likely to die of heart disease than of a terrorist attack.
So if your goal was to extend your life, what approach would you take? Would you take every precaution against a terrorist attack? Or would you practice healthy living habits?
That reminds me, you probably don’t even need 10,000 steps, you get a lot of benefit from 4400 and women seem to max out at 7500. This is one of those situations where there’s a lot of gain for a little effort by attacking the deeper problem.
FUD - Fear, Uncertainty, and Doubt
Fear, Uncertainty and Doubt. It’s a marketing strategy used for advertising, public relations, propaganda, politics, and more. It came about into our English lexicon about a hundred years ago, but now you hear it a lot in conversations about software. For example, the term: “Nobody ever got fired for buying IBM.” was used by companies to justify millions of dollars to purchase IBM computers. What that phrase is really doing is planting a little seed of doubt that any other vendor won’t be as reliable as IBM.
I had a lot of FUD around Go when I started trying to write things in it. Everything I’d read was “You just need the standard library”. I’d see it everywhere, but then blog posts would often use the mux from Gorilla. The comments would all be something along the lines of “Real Go developers use the standard library.” And there’s a certain sort of point to that attitude, you can get REALLY far with just the standard library in Go.
All of that FUD just held me back from doing cool things with Go until I got over it. What I should have done was use Gorilla and replace if when I knew more and could make a more educated decision. I was struck by uncertainty into inaction. Every time I started, I would doubt myself and use that as an excuse to start over.
Lots of people on twitter seem to ask about “Performance” in React. Should we write arrow functions in the Render method? Isn’t that bad for performance? React and Web Components will never work, surely! They’re two things that try to do the same thing differently. Right? Nope. It’s a lot of FUD.
Which framework should I use? Well React is owned by Facebook and they just had some data issues a few years ago, so maybe I want to try Angular? Well what if Google shuts down Angular like they do other projects? Well what about Vue? Well they’re not even backed by a huge company, so how can I know they’re going to continue to have support!?
Well what if Google kills Angular? They’ve killed some of my favorite projects that other people also loved and used (RIP, Inbox). I doubt that they consider Angular sacred. If they kill it, it’s fine! Let’s think about it: Will your application stop working? Will you still be able to write new Angular code? What if Google kills Go? Well the compiler is still there, you still write binaries and can write and deploy new code. How is that any better of a question than: “What if Sun kills Java?” was 10 years ago?
Types of FUD
FUD is spread different kinds of ways. There’s the common “I read that inlining functions is bad for performance…” crowd. Then there’s the “Look, I used React Router 4 years ago and Never Again.” crowd. Then there’s the worst of all, those who are actively spreading disinformation to drag a “competitor’s” things down. They’re so different in how you deal with responding to them.
The first is great, these people are parroting something they read and can learn where to put priorities. How do you measure performance? Are you actually profiling? Until you can run some benchmarks and actually show the difference in memory usage or clock cycles it’s not really worth worrying about. I’ve fallen for this kind of uncertainty time and time again, and this is the kind of thing that leads you to worry about bottlenecks that are not your real bottlenecks. Developer speed, typing speed, problem solving speed are all speeds that you probably need to worry about before you worry about performance in React.
The second crowd aren’t likely to be persuaded. Honestly, I don’t blame anyone in this camp. If you’ve been burnt by something, it’s hard to want to get back on the wagon. Sometimes these people do come around, but they’ll do it in their own time.
The third crowd is actively doing something destructive. Microsoft in it’s operating system market viewed Linux as a competitor. Linux is used by computers and servers all over the world, and so is Windows. Back in the early 2000’s, there wasn’t as much knowledge available to the general public about the differences between the two operating systems. Windows ran an advertising campaign called “Get the Facts” that claimed that the TCO (Total Cost of Ownership) for Linux was as much as 10 times higher than the TCO of Windows. They even had a graph that was totally compelling, unless you knew the price of the hardware they were running it on. The BBC covers the Get the Facts campaign, back in 2004. That misleading claim was intended to stir up some FUD and increase Windows market share.
Combatting Your Own FUD
Examine your FUD. The Socratic method uses a cooperative argument of asking questions to draw out underlying assumptions. There’s not necessarily a requirement that you have to have someone else to argue with though. You can ask yourself questions. You can find out where your fear, uncertainty or doubt came from.
My FUD with Go was combatted by just asking myself a few questions: “What if I write this router wrong?” Well, web requests won’t go where you expect. “What if I don’t know about pointers and write a memory leak?” What a doozy of a question, eh? You’d have a bug and your software would crash. Eventually I asked myself enough questions to where I just had the confidence to Just Do It. Then I wrote and deployed software, and none of my fears were realized. It works fine.
Ground yourself in reality. Trace back your doubts, find out not only what you believe, but why you believe it. Perform experiments! If you can suspend your pre-judgement of something, you can usually find a way to actually perform the experiment that you think isn’t going to work.
Your browser has a performance api that you can use to profile your functions. Think you should refactor your app to remove all the inline arrow functions? Measure if you should. You probably gain a lot more from correctly writing your
shouldComponentUpdate life-cycle functions, or the comparison part of the useEffect hook.
The truth is, you’ll sometimes find your fear, uncertainty or doubt is justified, but as long as it’s amorphous it’ll just kinda sit there, leading to wasted time worrying or wasted time stalled. It’s important to be honest with yourself, and being honest with yourself is a huge way to combat your own FUD. The biggest victory over FUD is not letting it interfere with you accomplishing the things you want to do.
- Benny Powers and Dan Abramov on React vs Web Components. Discussion on differences and the FUD surrounding each.
- Matt Ryer on structuring Go programs. Excellent guide that helped pull me out of Go FUD.
- Axel Wagner on Go Routers. Really cool overview of what I should have done, and actually a lot closer to what I ended up with than a real router.