So, one of those dear people on Twitter who have been trying and failing to be Twitter’s Main Character for years published a rant about post-modernist programming. Now, let’s leave aside the fact that they’ve literally created a fictional concept that sounds like it’s from a dril tweet to get angry about. Let’s actually engage with the fundamental narrative and point out how dumb it is in the context of programming.
What is Postmodernism Anyway?
Postmodernism is a movement that produced some really striking visual art and some utterly unreadable prose, but the fundamental concept of it was a rejection of the certainties of the modernist movement. Which is kind of hilarious because that was itself a rejection of the certainties of the enlightenment. Yes, I cribbed that from Wikipedia. This is very different from our dear failed main character’s definition of Postmodernism, which is kind of ironic since he was lecturing us about the absolute certainty of knowledge.
FMC’s contention is that there are certainties in programming, these are obvious and, implicitly, that these are important and can be extended by logical deduction into broad areas. Also, typically that they’re in a good place to determine these eternal truths and that if you disagree with them you’re wrong. This is a rhetorical framework shared between tradcaths, biblical fundamentalists and constitutionalist originalists that reaches back as far as Plato (and probably further) that, sadly, hasn’t actually fared very well since people started doing science. It turns out that it really seriously matters what your first principles are, incontrovertible ones are thin on the ground and everything, absolutely everything, needs to be checked empirically. Logical reasoning is only as good as your assumptions and it turns out that your assumptions are nearly always faulty when tested against the real world. There’s a tendency then to try to conform the world to your assumptions rather than the other way around. This is as much a problem in politics as it is in systems design.
Let’s Beat This Strawman Like A Piñata
So, in spirit of the discourse, I’m going to set up a strawman, knock it down and then act like I’ve proved something. Here’s my naively true, but actually easily falsified statement:
An O(n) algorithm is better than an O(n^2) algorithmMe, obviously
So, the first question is “better how”? There’s an obvious subtlety to do with time/space complexity but that’s not even scratching the surface. Let’s say space doesn’t matter. Is the O(n) faster? Well, constant values can matter and it depends on your workload. Again, we’ve left the realms of pure logic and entered the realms of science and engineering. Then there’s the question of whether or not it matters at all, our dear originator’s big beef with “postmodernism”. Is the difference between the two twenty nanoseconds in a 5 second process? Then it honest to God doesn’t matter. (Well, probably, but if you’re arguing with me on this you’ve accepted my broader point, like an intellectually dishonest Catch-22.)
Let’s say it is slower to a significant extent. How complex is the faster algorithm? How easy is it to maintain? How easy is it to verify it doesn’t have any bugs? How much time will it take to develop and PR? Does it operate without locks while the faster algorithm requires us to lock the data structure? Do either of these algorithms actually solve the problem we have?
None of these questions are answerable without context, which I have pointedly failed to provide. But it’s my contention that the decisions any serious developer has to deal with every day look more like this: there’s no easy answers, things need to be thought through. It’s not that nothing matters, as that everything matters, and there are 100 concerns including, requirements capture, project velocity and team health that are an awful lot more important than whether you’re using a ring buffer correctly.
So there you have it, a clickbait response to a clickbait tweetstorm shorn of all context because apparently truth is universal so you shouldn’t need it. If you actually want a considered and thoughtful response to the original screed, Dan North took down the whole mentality fourteen years ago. A guy who will happily tell you, if you ask, that he 100% believes there are eternal, immutable truths. Context is everything, nothing matters without it and there’s a whole raft of uncertainties we just have to navigate. So yeah, I’m proud to be a postmodernist programmer. Although I prefer the more vernacular term: a good one.