brainbaking/content/post/2023/12/be-a-selfish-programmer.md

3.6 KiB

title date categories
Be A Selfish Programmer 2023-12-21T10:01:00+01:00
programming

Justin Searls over at Test Double gave a talk at RailsConf 2019 that really struck a chord here. I already briefly mentioned the talk at the beginning of December but I feel that it's worth repeating here. Justin's summary perfectly sets the scene:

This presentation is an exploration of the things programmers can learn by building an application by and for themselves—and the surprising number of lessons that might translate to their work on teams and larger organizations. It was based on my experience building the Japanese-learning site KameSame as a companion app to WaniKani.

Watch the talk (36 minutes) on YouTube:

{{< youtube XvQxfMBp50k >}}

In an age of ever-increasing complex and complicated systems, we as enterprise software engineers sometimes simply un-learn how to make something small---and keep it that way. What if you had to build something to Scratch Your Own Itch tomorrow; which technologies and tools would you throw at the problem? The same as you daily use?

Because that would end up in a hopelessly over-engineered disaster.

For example, I want to create a piece of software that tracks our daughter's weight, mood, and days of sickness. Besides the fact that there are ample existing solutions for that problem, how should I approach this? By grabbing the Spring framework, throwing event sourcing on top of it, deploying the whole thing using Docker containers, provisioned by Kubernetes, flung on elastic cloud servers using Terraform scripts? My head hurts. Right, I don't think so either. But what if you simply don't know anything else? What if you never explored a simple path that---gasp---perhaps isn't even web-based?

Justin did precisely that. By being a Selfish Programmer, making all the choices and mistakes himself, he wrote a small app to aid his Japanese learning path. By being selfish, he (re-)discovered the joy of making simple things, and, of course, learned a lot along the way. We software developers have to be continuous learners; it's part of our job. The Selfish Programmer just happens to be exploring the more egocentric path.

I'll let Justin do the talking/convincing here. Go watch the talk. I assure you it'll be worth your precious time.


But also be a Caring Programmer

Vlad-Ștefan Harbuz' Caring Programmer Manifesto touches on similar topics that Selfish Programmers try to lay bare:

We seem to have lost our understanding of what the computer is actually doing under all that code. We barely know how the dependencies we are npm install-ing work, let alone what the CPU is doing. More than that, if we had to develop, from scratch, one of these tools or frameworks that we use on a daily basis, we'd probably be lost.

The fact that so many similar ethical, philosophical, and technological concerns are popping up is not a coincidence. Perhaps the From Nand to Tetris course, that has you build a modern computer from first principles, should be obligatory---especially for enterprise software people. Not just back to basics, but also back to understanding and programming with responsibility.

Vlad-Ștefan suggests the following to be a caring programmer:

  1. Profile your code and be unforgiving about performance.
  2. Write your own code.
  3. Understand that programming isn't magic.
  4. Understand the lower-level technologies you are building your work on.

Read the manifesto yourself---after watching Justin's talk---and tell me what you think.