You don’t have to choose a side

One of the downsides of improving your craft as a programmer is that to do so you must wade into a vast ocean of opinion. At it’s simplest, you’re going to have to consume and manage conflicting ideas. It’d be nice if there was just one right answer, but those are very rare and hard won. At its worst, though, you get into religious wars.

Religious wars can be validating. On each side are people arguing passionately that the other side is wrong. You’re encouraged to find yourself on one side of the line or the other and once you do it feels right. We’re all tribal creatures and it feels good to find your side.

They can also be terrifically painful. People may call out beliefs that you hold deeply. You may struggle to at once understand someone as successful and smart but also so deeply wrong about something important to you.

You might even just find it painful for prosaic reasons. Unending debates are annoying and waste time. They fill important channels full of the same old noise.

Picking “no side whatsoever”

Practically speaking, I’d like to talk about Functional Programming on Simplicial and today FP is enmeshed in a religious war with Object Oriented programming. But to talk about either of those effectively, I need to talk about the worst pain of religious wars: once you pick a side, it’s terrifically tempting to ignore the others. Religious wars impede your ability to learn.

But maybe instead, the best side is… no side at all! In this particular debate, both functional and object oriented approaches are often taking aim at the same problems. They are driven by the same underlying forces and deep theories.

It’s my belief then that you’ll get further in increasing your own craft by studying those deep theories and how they materialize on both sides. These deep theories include things like:

  • Type theory which helps us talk about what our programs truly mean (even when they’re untyped—let’s avoid that war too)
  • Formal methods which describe practices for specification and communication even before we get to implementation
  • Abstract algebra which is full of time-honed abstractions as well as concrete best practices for how to abstract

Focusing on these deeper matters doesn’t really resolve religious wars, but it gives you a platform to learn from and speak to both sides. I also believe it gives you the best platform to improve your craft as a programmer.

If you find yourself caught up in a religious war, is there a way you can shift your perspective to benefit from both sides?