Monday, June 27, 2022
Some of the aphorisms ended up not-so-pithy, but it was overall a fun little experiment that I recommend: note down everything relevant about the craft that you can think of over the space of a week.
I thought about this, and then I thought: Ok, what exactly is my craft? I do computer shit. So I started a list about that, challenging myself to be descriptive about things and not veer too far into pure advice.
A year or so passed, and I noticed this post was still sitting in my "work in progress" directory. I tried picking it back up and noticed how much overlap it would have with other posts like these:
- 2013: on software
- 2014: language things
- 2015: YOUR CODE IS TOO COMPLICATED
- 2019: this entry on the experience of working at SparkFun
- 2021: rules
This style of writing is basically catnip to people like me, whether it's of much use to anyone else or not. This post ultimately felt like a dead end, because instead of a blog post, it really wants to be some long document where I collect all sorts of aphorisms, pithy quotes, eponymous laws, and so forth about technical work and maybe just work generally. Maybe I'll start that document one of these days.
Anyway, that very partial and uneven list:
- Caching is hard to think about and breaks often.
- Cleverness in code is generally a sign of danger.
- Business ruins everything.
- Some forms of interoperability are a trap.
- Bad ideas aren't limited to bad people.
- Good people aren't limited to good ideas.
- An aesthetic is not an ethic.
- The customer is usually wrong.
- If it's written in:
- C: It'll work, but I should remember there's a buffer overflow or something.
- PHP: It'll probably work, but there's an SQL injection vulnerability somewhere and the cool kids will be shitty about it being PHP.
- Python: 50/50 whether it'll just barf stack traces into my terminal for non-obvious reasons.
- Ruby: Decent chance I'll wind up reading the source code and cursing at clever Ruby programmers.
- Haskell: It works, but I'm not smart enough to understand it.
- Rust: Probably works, if they finished writing it. I'm not smart enough to understand the code.
- Go: Total crapshoot, but either way I bet the CLI has a bunch of infuriatingly nested subcommands.
- Java: If I have to find out it's Java, I'm probably in trouble.
- Lightweight markup languages are fundamentally in tension with the range of structures that their users will inevitably want to express.
- Design, marketing, and management are all real undertakings, but they are also aggressively self-reproducing ideological systems and political projects.
- Environments within which small tools can be combined to operate on simple abstractions are powerful. An environment might be what you think of as an operating system, a programming language, a database, or an application. All else being equal, the ones that can bridge to other environments are more powerful.
- There are few abstractions in computing more stable than filesystems, standard IO, text files, and the shell. Boring relational databases aren't too far behind, but the barriers to entry and data transfer are higher.
- Technology is at least as fashion-oriented as the sartorial choices of highschoolers, actors, and musicians. Changes are driven as much by a desire for difference from the perceived status quo as anything else.
- Technical politics are also organizational, labor, and identity politics. The currents of power they involve are illegible without taking those factors into account.
- There's no guarantee that your technical preferences will match up with the ideas, people, or power structures you find agreeable in other domains. (Or vice versa.)