.main h2 { margin-top: 2.5em; } Last month, April 2022, marked the 10 year anniversary of my start as a professional programmer. I started programming earlier than that, but hadn’t been paid a salary. As a teenager I built websites and IRC bots and wrote tiny Python scripts. Then I stopped and played guitar for a few years. In my twenties, I...
I grew up in a what I now know people to consider a really small town. There wasn’t a lot, but even in that small town we had 2-3 lawyers. And to make a point about technology and how we develop software I want to paint you a picture of these German small-town lawyers with a very broad brush. They often have their office in their own house, a...
There’s a scene in Moneyball in which Brad Pitt’s character, the manager of the Oakland A’s, is watching a recording of one of his players trying so hard to run fast that he stumbles and falls. Lying on the ground he’s angry at himself, because he doesn’t realize that right before he started his run he hit a home run and scored the game-winning...
One of the eternal laws of the internet dictates that as soon as one person says they have a new thing that lets them type faster — a keyboard, a keyboard layout, an editor configuration, etc. — somebody else must say: “but typing is not the bottleneck!” What the second person means is that the first person is wasting their time. They’re...
Whenever I’m not sure whether I’m spending my time on the right thing I ask myself: does it help me ship? If what I consider working on is not the thing we want to ship itself, but lies in the vast grey area of software projects where I could write code all day long without the user ever noticing, this question helps me decide whether to drop it...
I’ve been working remotely full-time at Sourcegraph for slightly over a year now and, in the five years before that, had 2-3 home office days a week at flinc and ioki. There are a lot of different blog posts I could write about remote working: about its upsides and downsides, what works and doesn’t, when it makes sense and when not, what it...
A few months ago, while looking at some code, a little light bulb that I didn’t even know existed went off in my head: “This was only written in this way, because the tools allow it to be written in this way.” Maybe it was a question mark, not a light bulb. All of us agree, of course, that, yes, with a sufficiently generous definition of tool,...
This article has been translated into Spanish: Por qué debes aprender más lenguajes de programación (incluso si no los vas a utilizar) Imagine we’ve been handed a task and we’re free to choose the programming language. The assignment involves all sorts of string manipulation: reading strings, splitting strings, trimming, joining and running...
This article has been translated into Russian: Полезные инструменты для написания книг Thank you Vlad! In the beginning, there is always a single text file, nothing more. It’s called ideas.md or book.md. It contains a list of thoughts and ideas, an outline. Everything else grows from there. It only makes sense that we start by talking about...
Well, that certainly went quicker than I planned. I knew from releasing the paperback edition of Writing An Interpreter In Go that a lot of people still prefer paper over eBooks. So it didn’t come as a big surprise when, right after the release of Writing A Compiler In Go, people started asking me about a paperback edition. But I replied that...
If you don’t care about the Who, Where, When, Why, How and the Why Is It A Lost Chapter? and want to skip to the What: I wrote a new chapter for Writing An Interpreter In Go and you can read it for free at interpreterbook.com/lost. Otherwise, read on… The pages you are about to read were found amidst the rubble of a collapsed ruin. Wedged...
If you’d asked me a only few months ago if there’ll ever be a printed version of Writing An Interpreter In Go I’d responded with a “Huh, uummm, well, I don’t know. Maybe. Maybe if I’ll find the time and if there’s any interest.” As it turned out, to my surprise, quite a few people told me that they’d love hold a copy of the book in their hands....
There are certain tools that provide incredibly high value. Much more so than others. They provide so much value by acting as a multiplier of power and leverage. And I think there’s something they all have in common. I’m talking about interpreters, compilers and transpilers. Programming languages are the ultimate, universal tools and sit at the...
I wrote my book “Writing An Interpreter In Go” over the course of 11 months. The first four months were spent on building the Monkey programming language and its interpreter. In the following seven months I wrote the book itself and at times it felt like I’ll never finish. But I did and now I want to answer a question a few people have asked me:...
You’re a programmer and your product manager walks up to your desk, taps you on the shoulder and asks if you have a couple of minutes to spare. She needs to talk to you about something. You sit down together and she has a serious look on her face. Oh boy. Something’s up. “Do you have anything important on your plate right now? I need you to do...
Last week I’ve self-published my first book called “Writing An Interpreter In Go”, which you can get at interpreterbook.com. I want to tell you a little bit about why I chose to write this particular book. Sometimes I jokingly call the summer of 2015 my “Summer Of Lisp”. But, honestly, I’m only half joking when I say this. It really was a great...
Over the past year I’ve spent a significant amount of time reading through Go’s go packages, the packages used by the Go compiler and other Go tools. But only recently did it occur to me that these are real, public packages. I can actually import and use them! So then I started to wonder what I could do with them when it suddenly struck me: “I...
This post has been translated to Chinese. In the last couple of months I developed a certain approach to writing code. Whenever I write a new function, class or method I ask myself: “Is this code stupid enough?” If it’s not, it’s not done and I try to make it stupid. Now, stupid code does not mean “code that doesn’t work”. Stupid code should...
This post is based on the talk of the same name I gave at the Arrrrcamp conference in Ghent, Belgium on October 2nd, 2014. You can find the slides here and the video recording here. Unicorn is a webserver written in Ruby for Rails and Rack applications. When I first used it I was amazed. This is magic, I thought. It had to be. Why? Well, first...
There is an interesting thread on the Go issue tracker about daemonizing processes. Most of the thread is not about daemonizing processes though, but more about why Go has no Fork() function which you can call directly in your code. The first time I read through it I was wondering and saying to myself: “Yeah, why is there no Fork()? It surely...