On Friday evenings, I like to make cold brew coffee for the next morning. I just take a mason jar, dump in some coffee grounds and water, put the lid on and then wait for 12 hours. Saturday morning comes around, I filter it and then my wife and I go to the park and sit under a tree and have a nice coffee date. I love those early weekend mornings, there aren’t a lot of people out and about. Sometimes we even get most of the park to ourselves! The deadlines from the rest of the week take a break until later, and we just have a morning to chat and sip some tasty coffee.
We did this last week, and I gotta tell you, I love being alive. It’s pretty cool, I have so many things that I like doing that mostly require being alive. I like being alive with my wife, I’d like to keep it going at a high quality for as long as I can. I haven’t always taken the best care of myself, but I have a lot more motivation to do so these days.
I just googled the average life expectancy in the US. A baby born in 2017 is expected to live to 78.7 years old. Ok, that’s interesting, but now I just want to know more, how long will someone who was born in a different year live? The SSA has some actuarial tables about life expectancy, which is hopefully the least exciting sentence you’ll read today. It looks like I can expect another 52 years of life! That’s pretty good, but that means I’ve probably already lived over a third of my life.
None of those potential remaining days are promised though. I could develop a heart anomaly, get hit by a car or murdered by an extremist. Whatever remaining days I have left, I want to make them count. I want to spend time with loved ones, read good books, eat good food, plant some trees, make cool things.
“You gotta get 10,000 steps a day to stay healthy!”
I’ve had a hard time picking and sticking to an exercise/diet routine in the past. I have a tendency to try to min-max everything, which is great for software or role-playing games, but bad for a lot of other real normal life things. I’ve done a few things that I stuck with, P90X-3 and Couch-to-5k come to mind. After I finished P90X-3, I stagnated a little bit. I’d finished the program, I was ready to move on to something better. There had to be something better.
I spent a lot of time reading about different exercises that I could try to learn to do and add. I’m not into going to the gym or anything, so I found some beginner routines that I could work my way up the progression with. And then all these Internet People were saying that I’d never get stronger without using a barbell. So I kept reading, trying to find an exercise routine that I could do with just a couple of small dumbells and a pull-up bar.
While I was doing all that reading, I wasn’t exercising. I was spending so much time trying to find the right routine and diet that I wasn’t doing anything.
The health department has a few recommendations for adults. Key takeaways are that some activity is better than none. Substantial health benefits seem to happen at 2.5 hours a week of moderate-intensity. If you want to think of it as a per-day quota: less than 30 minutes a day.
The reality is, you probably don’t even need 10,000 steps, older women seem to have the mortality rate curve down to flatten at around 7,500 steps per day. Now, I’m not a 72 year old woman, and this study isn’t about measuring quality of life, but it seems like this is one of those situations where a little effort goes a long way. Don’t worry about that 10,000 number, just do a little.
Instead of going for jogs or walks, I was worried that I’d hurt my knees if I wasn’t doing the right routine. Instead of doing pull-ups, I worried about doing the right amount of repetitions (should I do sets of 8 or 10 or 12?). The thing is, just going for brisk walks for 30 mins a day can reduce the risk of all-cause mortality. I should have been just doing something instead of worrying that I was somehow not going to min-max my muscle gain.
FUD - Fear, Uncertainty, and Doubt
Fear, Uncertainty, and Doubt. It’s a marketing strategy used for exercise routines, 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. What I should have done was use Gorilla and replace it 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? What if Google shuts down Angular like they do other projects? Ok, what about Vue? Come on, they’re not even backed by a huge company, so how can I know they’re going to continue to have support!? It’s crazy! If you listen to questions like these, all you’ll find is a lot of decision paralysis.
So 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? 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 in different kinds of ways. There’s the common “I read that inlining a function is bad for performance…” crowd. Then there’s the “Look, I used React Router four 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 even close to 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 isn’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 best thing you can do here is to just do something kinda cool that catches their attention.
The third crowd is actively doing something destructive. Microsoft viewed Linux as a competitor to Windows. Linux is used by computers and servers all over the world, and so is Windows. Back in the early 2000s, 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 totally compelling graph, unless you knew the price of the hardware they were running it on. The BBC covered the Get the Facts campaign, back in 2004. That misleading claim was intended to stir up some FUD and increase the 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 your doubts, find out not only what you believe, but why you believe it. Perform experiments! If you can suspend your pre-judgment 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. Being honest with yourself is incredibly important. 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.
So get out there and go for a jog, use a library in Go, write a React app with inline arrow functions. The cost of doing something slightly less than 100% perfect is a lot less than the cost of doing nothing.
See Also
- 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.