The Tao of Programming

A program should be light and agile, its subroutines connected like a strings of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little nor too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity.

A program should follow the ‘Law of Least Astonishment’. What is this law? It is simply that the program should always respond to the user in the way that astonishes him least.

A program, no matter how complex, should act as a single unit. The program should be directed by the logic within rather than by outward appearances.

If the program fails in these requirements, it will be in a state of disorder and confusion. The only way to correct this is to rewrite the program.

– Geoffrey James, “The Tao of Programming”

Jargon Friday

Two little antipatterns spotted recently:

1. Complaint Driven Development

The loudest complainer gets to decide what gets fixed – and how.

2. Shipment Driven Development

Product isn’t released when ready, but on the date the shipment is scheduled.


In an ironic twist of fate, I’m writing this while sitting in a house right between Harvard and MIT – and in an environment like that, you just can’t not think. Today was full of excitement, expectations and certain jet-lag zombiness – and even though we we’re terminally tired, we can’t just slow down and stop; almost every second is filled with discussions about the future of our company. I’m going to get my fair share of melatonine-induced sleep in a few minutes – and then: more thinking, more talking, more figuring stuff out.

I hope I’ll be able to steal an hour or so tomorrow so that I can go pillage the art stores at Central Square.

There was very little culture shock associated with my visiting USA for the first time ever. One of the guys we met today called Boston “the America’s most European city” and he’s probably right: frankly, I feel at home here. Except it’s all very different. One year ago I visited Spain and England; I came back tired and glad I was finally home. This time I’ll come back inspired; I’ll come back yearning for more.

Just a little reflection on why it’s hard to be both a technical person and an innovator:

As a technical person, your goal is to find a flaw in whatever you’re developing and fix it.
As an innovator, your goal is to find some potential in whatever you’re coming up with and take advantage of it.

One is negative, the other positive. Switching those two mindsets at will is pretty much impossible.

New office

YIP YIP YIP we have a new office! Setting it up is probably going to take a week, but we can’t be happier right now. It’s big, bright and beautiful*. Good thing there’s so little of us that we managed to agree on the office layout without any conflicts. I got to get a desk with wheels (beat that!) in the middle of everything. I’m probably going to ride around and annoy people. If only the iMac had a battery…

Well. I could dust my old UPS…

*And absurdly cheap.


The news is still semi-official, but here it goes: I’ve been promoted for the CTO role at our startup Cloud Your Car.

It’s gonna be a ride. I’m taking over tons of responsibilities – which isn’t too bad, as the part I was working on until now (firmware development) is entering the maintenance phase, so I already spend a large deal of time poking on issues that need polishing. I’ll still be doing what I’ve been enjoying doing recently – except it will be official.

Am I scared? Hell yeah. I’ll undoubtedly spend this Christmas buried under tons of people management books – my soft skills REALLY need to improve – but at the same time I’m extremely excited. Even though I have no idea what I’m doing. ;)

On a related note, my friend got a job at a very cool startup in Kraków today. He’s relocating. I wouldn’t have the balls to do that. Kudos for him. Too bad there are very few dreamers like us around.

This post is dedicated to those of my friends who got married, found a well paying job and, well… stopped at that point. We’ll probably never really understand each other.

Cats with wheels

Another session of hardware hacking finished. Lo and behold, things in my room that have wheels and can be freely moved around:

  • a desk that serves as a mobile computer workstation (Valve-style)
  • the computer attached to it
  • a second desk that serves as a workbench
  • two coffee tables
  • a chair.

I’m fighting the urge to add wheels to everything else. Time will tell how good the idea was, but it seems a perfect solution for any kind hacker- or creative space: make rearranging things as easy as possible.


I can’t stand sloppiness from people who call themselves professionals. Consider these:

  • A proofreader who lets mistakes slip even though the spellchecker underlines them.
  • A candidate for a frontend developer job whose CV is a design disaster: mixed fonts, wrong punctuation, etc.
  • Another candidate for the same job who can’t even spell the names of the technologies he claims to know.

Am I setting the bar too high?