I did a Bad Thing™. A week ago I wrote a post titled Shipping Culture Is Hurting Us. I had just seen Gary Bernhardt’s talk, A Whole New World. Gary makes what I think are some excellent points about infrastructure, tooling, and the paralysis we sometimes seem to have around them. I wanted to expand on that, but then things went a bit awry when I threw in a rant or two about some pieces of software that frustrate me: Node.js and MongoDB. The result could be charitably described as scatterbrained and uncharitably described as a hot mess that, as one reader put it, was dead wrong in several places.
The sins of the post were numerous, and all too common in tech and programming rants. I tied things together that weren’t all that related in order to force a point. I made sweeping statements, and in several cases argued from ignorance without doing my homework. It was bad, and I feel bad.
Debate is good, dogma is bad.
Programmers often have very strong opinions about the tools they use. Some worship in the church of emacs.
Some will fight fiercely over using tabs vs. spaces. (Silly people, the answer is tabs for indentation and spaces for alignment.) These are just the silly, petty arguments. There are much more significant debates out there surrounding architecture and software design.
What is easy to forget is that we hold wildly differing opinions because we have wildly different goals and experiences. I started programming in high school for FIRST Robotics. Now I help develop embedded software for handheld devices which might not receive updates for months. The consequences of bad code can be very severe. Nobody wants to be run over by 120 pounds of robot or have their multi-thousand dollar cable tester turn into a brick. Performance is also a large concern in these arenas. Because of these experiences, it would make sense that I tend to gravitate towards compiled, strongly and statically typed languages like C++ or D.
Conversely, someone in web development might feel hamstrung by such tools. They live in a world where performance isn’t of the utmost importance since you spend lots of time waiting for a drive, a database, or for some bits to make their way across the internet to their machine. Convenience takes priority over absolute correctness because you can redeploy code almost instantly and many errors aren’t the end of the world. In lots of cases, the worst an error can do is make the user spend a whole two seconds to refresh their browser in order to see your spiffy corporate logo or that funny cat photo. (This is in no way meant to demean the importance of web development or the sharing of funny cat pictures.)
Neither of these outlooks are wrong in any sense, but it’s easy to see how inhabitants of these different worlds might feel like a stranger in a strange land when they venture into the other’s territory. And there’s nothing wrong with having opinions about the tools and mindset you use. Debate is awesome — I want those with good ideas to be winning hearts and minds. Even a good smackdown is fine, and we all enjoy the occasional rant. But make solid arguments, do your homework so that you aren’t talking out of your ass, and don’t be a dick.
The innarwebs is a caustic place. Anyone who has spent time on a decently-sized online community has seen firsthand how pseudo-anonymity can turn your average individual into a massive asshole. That can’t be helped, at least not by my tiny, stupid blog. Maybe it is even to be expected. But from this point on, I will do my best to make sure I don’t make things worse. I implore you to do the same. The online programming community (and the world at large) certainly won’t suffer from a little more civility.