Thorsten Ball

Home Books (Update!) Posts Talks Projects Contact
Thorsten Ball's profile picture

Hi there! My name is Thorsten Ball. I'm a software developer living in Aschaffenburg, Germany, a small city near Frankfurt am Main.

I like to develop, optimize and take care of sophisticated systems. Or put another way: I like to program where the rubber hits the road -- wherever that may be.

At daytime, as a software developer at ioki, I work with a web stack: Ruby, Ruby on Rails, JavaScript, HTML and also CSS (please don't ask me about floats). I also use Go and even shipped performance-increasing C code to production. If you ask me how much I like PostgreSQL and SQL, I'll talk your ears off.

But before I leave for work, in the early morning hours, I love to deep dive into other programming topics that interest me: programming languages, interpreters, compilers, web servers, systems programming, Unix, databases. I'm a big fan of digging deep and peeling away at abstraction layers to get a better sense of what I'm working with and more leverage higher up. In short: I love learning new things.


Writing An Interpreter In Go

Self-published in November 2016

In the book we build a programming language from scratch. We start with 0 lines of code and end up with a fully working interpreter for the Monkey programming language. We build the lexer, the parser, the AST, the object system, and the evaluator — written with tests first and without 3rd-party libraries. This book is not about theory, its focus is runnable, working code.

Find out more and buy it at

Writing A Compiler In Go — Available now!

Self-published in July 2018

This is the sequel to Writing An Interpreter In Go and contains the next step in the evolution of the Monkey programming language: we're switching out the tree-walking evaluator for a bytecode compiler and virtual machine. It starts where the first book ends, uses the same codebase and follows the same approach: working code front and center, written from the ground up, tested and runnable.

Find out more and buy it at


You can subscribe to post updates via the Atom feed.




Applikatoni - A deployment server for small teams with multiple applications, written in Go, developed at flinc.

Fzz - Small command line tool that makes your command line interactive. Also see vim-fzz.

Watchgopher - A lightweight, scriptable and UNIX-y filewatcher.

dotfiles - My dotfiles. git, zsh, tmux, etc.

vimconfig - Everything that goes on in my ~/.vim folder.

Recreational Programming

Not finished, not stable, not ready for production, but fun!

Helles - A multi-process webserver written entirely in C.

Sceem - A small Lisp/Scheme interpreter written in Ruby.


Never hesitate to send me an email at I love getting email from you.

You can also find me on Twitter, GitHub, LinkedIn, XING and Facebook.

I also maintain a mailing list, on which I sent out occasional updates about my book or this blog. I won't spam you and you can unsubscribe at any time.

Keep me updated!