August 2024

Go is my hammer, and everything is a nail

You know that old saying:

Always choose the right tool for the job.Shakespeare, or someone like that

Well, I’ve turned that one on its head. I’m using one tool for all possible tasks, for what I believe are good reasons. But I’m getting ahead of myself.

Let’s start somewhere else. I’m Markus, a solo developer and digital product builder. It’s just me. I have no team or subcontractors, and I intend to keep it that way. I’ve pursued a lifestyle that includes having my own business, because it gives me the most flexibility of how and when I want to work. To structure my work around the rest of my life, so to speak. I want to collaborate, but not manage other people.

As a solo developer, I believe it’s a good idea to choose your tools wisely. Even more so than when in a team setting, having a tech stack that is too complex can bury you in unnecessary busy-work; you’ll end up building infrastructure and nursing your layers of technology all day, instead of, you know, talking to customers and building what they want. Delivering value to someone, to anyone, to the world.

In 2016, I started building stuff in Go. I originally didn’t like it, but I started “getting it”, and it stuck with me. So much that I eventually turned my back on other programming languages. I was writing a lot of Python and Javascript at the time, but I dropped that. I ended up making a course for Go developers, as well as sort-of kind-of reinventing React for backend Go HTML generation. I now build basically all my software in Go, from tiny one-off tools, to web services, CLIs, and everything in between.

But why? When the common wisdom is to always take the problem at hand, analyze it, and then choose the tools, why would I ignore that and go: “nah, I’ll just use Go again”?

Well, I present to you: REASONS.

Reason 1: Go can do basically anything

Yeah, Go can do basically anything. Actually, I’ll widen that statement to all popular programming languages can do basically anything. Yes, most are known for one thing or another, and they definitely have their strengths and weaknesses. But I think at the end of the day, it basically comes down to opinion and taste.

I like Go. It’s simple enough, easy to read, consistent, and a lot of other good things that align well with how I want to build software. There are certainly also things I don’t like, but I don’t care enough to let it bother me. But you probably know all of those things already.

Go is good for the obvious things: building CLIs, cloud infrastructure, HTTP servers, network stuff.

But people also build games for the Nintendo Switch in Go. They build GUI apps using Go. I’ve even tried a string synthesizer in the terminal built in Go, which I thought was beyond cool. You get the point: it’s often possible to do what you want, regardless of the tool you use.

Reason 2: Less context switching

Do you know the feeling when you start writing syntax for one programming language, realize that, nope, you’re supposed to be using a different one, and try to switch your brain into another mode while feeling slightly dumb? I know I used to.

But I don’t anymore, because I only use one programming language! Ha! Joke’s on past me.

But it goes much deeper than that. A programming language isn’t just a bunch of syntax to build stuff. It’s also a compiler, an IDE, a toolchain. A community to engage with. A never-ending news machine to keep up with. An ecosystem of libraries, tools, programs, idioms, styles. It can be quite a mouthful on its own, so I found it overwhelming to try to keep up with several. Is it possible? Sure. Will it be more superficial? Also yep.

Which brings me to my third reason.

Reason 3: Depth of knowledge

When I don’t have to keep up with everything around several languages, and build everything in just one language, I can go deep. Learn stuff I wouldn’t have gone into otherwise. Investigate nooks and crannies I wouldn’t have given a thought. Learn esoteric language features, history, read obscure blog posts on details I wouldn’t necessarily have bothered with.

That doesn’t mean I ignore the rest of the world, obviously. You and I both know there’s always more to learn in this field. Cutting away programming languages doesn’t make software development less complex in a multitude of other aspects, but it does so in one very concrete setting, and one which I spend a lot of time on.

So, what, I’m going to limit my career options?

The world is laaaarge. The number of projects are basically infinite. Even if I carve out a tiny subset of infinite, that’s still infinite. Good enough for me and my career ambitions.

And I’ll be really good at at least this one thing. I’m way more productive in Go than when I was just starting out (obviously, otherwise I should probably have switched to plumbing), and I hope to stay on that path, and maybe even increase the slope. EXPONENTIALLY. Okay, less will do as well.

Anyhoo, these are my thoughts. Bring on the nails, and I’ll beat them with a bloody, determined gopher who is screaming “IS THAT ALL YOU GOT?!?”.


Also see the Hacker News and Reddit discussions about this post.

A picture of me, Markus.

I’m Markus, a professional software consultant and developer. 🤓✨ Reach me at markus@maragu.dk.

Podcast on Apple Podcasts and Spotify. Streaming on Youtube. Subscribe to this blog by RSS or newsletter: