The Cynical Programmer

The Cynical programmer, the student of Diogenes, creates simple software in a minimalistic environment with the language that gets the job done and no more, without compromising quality. He rejects social consensuses, cargo cults, and "programming communities", and is unaffected by useless criticism. Optionally, he may also flame, troll, swear, gatekeep, and hang out with dogs.

The HTMX Twitter account sent out an fun tweet this morning, noting that while developers tend to embrace Platonistic concepts, Aristotelian techniques tend to work better in the long run. It's an interesting thought, with some fun argumentation to be had, but question one is obviously: "what in Sam Hill is he on about?"

Platonism and Aristotelianism are Ancient Greek philosophical schools founded by Plato (student of Socrates) and Aristotle (student of Plato), respectively. Platonism focuses on the abstract, holding the Theory of Forms as its central concept (roughly, that there are a set of "perfect" forms that objects in the real world correspond to, and that all objects are imperfect representations of their respective form). The programming links here are widely recognized and self-evident, but for the uninitiated: in general, the more advanced programmer seeks a higher level of abstraction; the beginner uses copy-pasted statements, the intermediate uses FOR loops, the graduate uses recursion, the master uses MAP, FOLD, and REDUCE, etc. This trend is the foundation of the devlopment of software development, as it began with the creation of the first assembler, then the macro assembler, then higher-level languages (not counting the ones that attempted to get businessmen to program, with disastrous results), then frameworks, and so on and so forth. Aristotelianism, meanwhile, is a bit more concrete, and concerns itself with understanding real systems through formal logic (indeed, the Aristotelian syllogism is arguably foundational to modern formal logic). Thus, an Aristotelian programmer can be viewed as one who is more concerned with program structure, completeness, and correctness, while a Platonic programmer is constantly looking for the perfect abstraction for his program to fulfill. However, an astute reader may have noticed some overlap between the two schools; after all, surely a correctness-concerned Aristotelian would want to consider and optimize his abstractions?

The answer is: of course there's overlap, you moron, Aristotle was Plato's student and was heavily influenced by him. Anyway, this question isn't particularly relevant to this discourse, so contemplate it while you're on the can. We have now established what Platonism and Aristotelianism are, and how they are and aren't differentiated, and can now move on to my question: what would a Diogenes-influenced (Cynical) developer look like?

First, to head off any complaints: Diogenes would likely think that this is moronic; I can feel him throwing his lamp at me as I type. But I think it's an interesting question to pose, so I'm doing this anyway.

Second, some background on Diogenes: he was born in Sinope, exiled after defacing currency because the Oracle of Delphi told him to, moved to Athens, and lived in a wine jar while annoying people for a living. He beefed with Plato (thus becoming an Internet celebrity), mocked Alexander the Great, and masturbated in public (pre-empting the programming language communities that followed millenia later). He was flat broke and lived simply, with nothing but his clothes and a bowl (which he later disposed of after realizing that he didn't actually need it). He was also one of the progenitors of Cynicism, and is considered its archetypal disciple.

Cynicism is an interesting philosophy, only tangentially related to cynicism as an attitude. It focuses on simplicity and freedom from social constraints, with a practitioner's ultimate goal being the achievement of Eudaimonia and mental clarity by being self-sufficient, excellent, and equanimous. Cynics strove to live a simple, shameless life (cf. Diogenes in the wine jar or his student Crates away all his money and couch-surfing for the remainder of his days), rejecting social norms they didn't like/care about/see the point in (Diogenes is widely considered the first cosmopolitan, refusing to declare loyalty to a city or king; later in life, he garnered more controversy by mocking Athenian burial rites by noting that, being dead, he wouldn't benefit from any of them). However, they jealously guarded their philosophical tenets, and drove away the unworthy (Diogenes himself was beaten up by his teacher, Antisthenes (who looks oddly similar to a long-bearded Gigachad), until Antisthenes realized that Diogenes wasn't going to stop showing up).

So, now that Cynicism's primary ideas have been established, how do they relate to programming?

The first and most obvious interpretation revolves around simplicity, it being arguably the largest and most well-known feature of Cynicism. A Cynical developer creates simple programs that do the bare minimum to get the job done (without compromising quality, of course, see arete). This could, arguably, extend to his toolset; the Suckless crew spring to mind, with their minimalist environments and small languages.

The second interpretation pertains to iconoclasm (as the classic Cynical practice of questioning social norms). A Cynical developer questions "common wisdom", moving against the social grain so that he may move with the grain of his project. Again, Suckless springs to mind (with C everything), along with the broad reaction against Uncle so-called Bob Martin's Clean Code in the early 2020s. Also available to contemplate: HTMX itself (a rejection of the JSON-based APIs commonly used on the web, and held as the obviously correct standard by many) and the Real Programmer of legend.

The third interpretation pertains to the rejection of social constraints. A Cynical developer is not necessarily a very nice person to be around (if you had't figured that out from my description of Diogenes). He swears, ignores complaints, insults you, your code, your IDE, and your distro; he voices his thoughts and reasoning with zero consideration to how other people may perceive it, and doesn't care about your reaction.

In short, a Cynical developer is an asshole cowboy who pisses everybody off while cutting through the bullshit and getting the project done as well as it can be done. Unfortunately for those opposed to this archetype, the ideals it is built upon fill the history books of computing and will re-emerge for as long as software is built.

Home