RSSAmplifier

Blog

Thorsten Ball

thorstenball.comRSS feed ↗20 posts

Latest posts

Professional Programming: The First 10 Years

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 rather coincidentally rediscovered how much I enjoy programming when I was asked to…

The context in which we build software

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 little sign in front of it says so. Sometimes it’s a…

How can you not be romantic about programming?

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 points. Watching the scene, Pitt leans back, smiles…

No, typing can be the bottleneck

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 optimizing something that’s not slowing them down. Typing is…

But does it help you ship?

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 or invest some time in it. Let me illustrate. One…

What you think is bad about remote work, can, well, actually be good.

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 requires and why I enjoy it. But here I want to share my…

How much do we bend to the will of our tools?

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, the tools we use when programming influence the…

Learn more programming languages, even if you won't use them

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 regular expressions over strings, everything in UTF-8…

The Tools I Use To Write Books

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 files. The Files Both of my books, Writing An…

The Paperback Edition of Writing A Compiler In Go

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 before I start working on a paperback edition, I first…

The Lost Chapter: A Macro System For Monkey

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 between the scratched and battered cases of old machines…

Writing An Interpreter In Go: The Paperback Edition

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. And I also had some free time on my hands. Alright,…

Higher Value Tools

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 bottom of stack on which a bazillion other tools are…

What I didn't do to write a book

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: “How?” What follows is much more of a confession…

A Virtual Brainfuck Machine In Go

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 something for me.” Here it comes… “I need you to write…

Why I Wrote a Book About Interpreters

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 and Lispy summer programming-wise: I was working…

Putting Eval In Go

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 can… I can put Eval in Go! Using Go!” Let me explain.…

Write Stupid Code

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 work exactly like it’s supposed to, but in the most…

Unicorn Unix Magic Tricks

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 of all: the master-worker architecture. Unicorn uses…

Why threads can't fork

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 can’t be that hard to implement.” After all you can…