I’ve never been a particularly confrontational person. In the workplace, I would much rather maintain good relationships with my coworkers than engage in endless debates over something that ultimately doesn’t benefit the product or the team.
Unfortunately, software developers love to argue. Whether it is about style, tooling, or entire operating systems, we are stubborn, intelligent creatures with the misfortune of believing our opinions count as facts (spoiler alert: they don’t).
The flame wars don’t matter, and while some debates can be healthy, there are four in particular that I wish would just end already.
1. Indentation Styles
Probably one of the more contentious — yet least valuable — debates on this list, indentation styles are a nightmare to talk about. Tabs. No, spaces. 4 of them. Or maybe 2.
Seriously, kill me now.
Highlighted in an early episode of Silicon Valley, the tabs vs. spaces debate is a self-centered one that completely ignores the realities of language and framework patterns, best practices, and long-term project maintainability. Everybody has a preference — personally, I like spaces (also known as soft-tabs, for those of you that think preferring spaces means I hit the spacebar ten-thousand times a day) — but personal preference has no place in a team setting.
Code, like writing, should read like it comes from a singular voice. That means, regardless of what you prefer, the code that you create should adhere to the standards of the project. What it doesn’t mean is that you have to actually change your coding habits. When it comes to consistency, guardrails are your friend. Projects like EditorConfig exist to apply consistency to your project’s formatting. Spaces, tabs, newlines. Whatever you prefer is fine, because in the end the guardrails you implement can take care of the details.
In 2013, I accepted a job at a well-known hosting company after spending the previous two years at a very early stage startup. Excited to learn what I could from a larger, better funded organization, I was instead greeted by a barrage of technological gatekeeping. One of the first “conversations” I had with one of my new coworkers — and onboarding buddy — was a backhanded review of my editor of choice.
“You’ll never be productive with Editor X,” he said, “we only use Editor Y here.”
Three months later, I quit for decidedly greener pastures.
Whether it is Vim vs. Emacs, IDE vs. Text Editor, GUI vs. CLI, or some other arbitrary “this vs. that” debate, the tools we use as developers largely don’t matter. When you claim that you are better at your job than someone else because of the tools that you use, then you are admitting that it’s not you that is doing the job at all. As the saying goes, “a good carpenter doesn’t blame his tools.”
3. Technology Stacks
If I have to hear one more argument over which programming language or database technology is best, I’m going to lose it. Don’t get me wrong, I’m a firm believer in using the right tool for the job, but sometimes we have to operate using the knowledge that we simply don’t know which tool is right for a particular job. But we, as developers, often confuse what we understand and are good at with what is “best.”
C++ is no better or worse than Java.
Ruby on Rails and Laravel each have their own strengths and weaknesses.
NoSQL and Relational databases are not one-size-fits-all.
Whether it is due to time or budget crunch, more often than not the choice in technology stack is less important than the outcome. Why let perfect get in the way of good? Pick the right choice for right now, and recognize that technology is always changing. You will be able to evolve your product alongside it, but arguing over which stack is better than the rest will get you nowhere.
4. Operating Systems
Remember the old “I’m a Mac. I’m a PC.” commercials?
I do. And I hate them.
They imply that your operating system of choice makes you an inherently better or more productive person, which simply isn’t the case. Preference is exactly that: preference. It’s what works for you. On any given day, I use all three major operating systems. I’m comfortable jumping from Windows to macOS to Linux and back, because the operating system that I use doesn’t matter nearly as much to me as it used to.
Unfortunately, that doesn’t stop die-hard OS enthusiasts from re-sparking this debate.
But the reality is that we live in a world where cross-platform is now table-stakes. Nearly every development tool that we use works across just about every operating system you can imagine, so no one operating system is any more productive than any other. Hell, thanks to containerization, even development environments are becoming more consistent across operating systems.
The only thing that working in macOS, Linux, or Windows proves is that you have a preference for a certain style. Whether it is DIY, plug-and-play, or some combination of the two, the operating system that you use is no better or worse than what someone else uses; and before you join into the next flame war about it, I can guarantee that as productive as you are in your own environment, your opponent is just as productive in theirs.