2024-03-06 I’m a programmer and I’m stupid by Anton Zhiyanov

I’m a programmer and I’m stupid

I’ve been writing code for money for 15 years. I’ve tried other roles — product management, analytics, testing — but they didn’t stick. And over the years, I’ve learned that I’m pretty dumb. Unfortunately.

I haven’t been diagnosed with any specific medical condition, but my mental capacity is very limited.

I find even easier Leetcode problems challenging.

Reading about a basic consensus algorithm makes my head explode.

I can’t really follow complex dependencies in a code base. I can’t learn a fancy language like Rust (I tried, but honestly, it’s too much).

I hate microservices and modern frontends because there are so many moving parts, I can’t keep track of them all.

So what do I do about it ?

I use the simplest mainstream language available (Go) and very basic Python.

I write simple (though sometimes verbose) code that is easy to understand and maintain.

I avoid deep abstractions and always choose composition over inheritance or mixins.

I only use generics when absolutely necessary.

I prefer flat data structures whenever possible.

I introduce as few external dependencies as possible (ideally zero).

I design modules with clear APIs (not in a Robert Martin’s definition of « clear »), but almost never extract them into microservices.

I use JSON-over-HTTP APIs, but never GraphQL.

I took the time to learn SQL and use it a lot.

I apply basic resilience patterns like timeouts, circuit breakers, and backpressure.

I try to use as few software components as possible.

Ideally, just the application itself, SQLite or PostgreSQL for data storage, and Docker with a sprinkle of shell for deployments.

Nginx/HAProxy as needed.

No API gateways, no sharding, no distributed caches, no message queues, no NoSQL/NewSQL/Graph/whatever databases, no service discovery, no federation, no cloud native, no FAANG-level best practices.

I draw dependency graphs and sequence diagrams to understand legacy code.

I write comments to remind future me why a certain function does what it does, or why a certain if branch is necessary .

I write documentation, trying to make it concise and readable.

I write examples, lots of them . Sometimes even interactive.

The software I build seems to work okay.

It won’t impress a Google engineer, that’s for sure. But it serves its users and the business reasonably well.

So being stupid kind of works for me .