atroche.org

My name's Alistair Roche. Follow me on Twitter here.

Oct 16

Our Own Little Internet

My girlfriend’s mum has a cottage where there’s no phone reception or internet. I want to grab four friends, a wireless router and a Linux box and drive up there for the weekend. We’ll create our own little one-off internet, which we’ll rm -rf before we drive home. “Cyberman”.

If we want to have a chat room, we’ll have to roll our own client and server. Same goes for games. I’ve always wanted to build a MUD. And I’d have four avid beta testers. Or maybe a multiplayer roguelike.

We can download docs and basic tools beforehand, and the box will have sshd / git / vim / Ruby / Go / Python / C / JVM / etc. We can bring PDFs of guides to UNIX networking.

We can’t bring MP3s or physical instruments, but we’ll make sure someone learns Overtone before we drive up. We can share code via a local git server.

We’ll reinvent the internet together and burn it all down in the space of a weekend. It will be glorious.


Feb 14

Monthly Experiments

In December I wrote 750 words in a diary every single day. In January I tried vegetarianism. This month I traded my smartphone in for an old Nokia, and locked my MacBook in a drawer at work.

The idea is to keep all other variables (or as many as possible) constant while I tweak one and see the difference it makes. And so I can really know that I’ve given the habit a real try, a real chance to see if it will stick and if it makes my life better.

This is compared to me six months ago, when I tried to implement polyphasic sleeping, intermittent fasting, intense spaced-repetition training and a grueling weightlifting regime all in one go.

So far I’ve kept vegetarianism and dropped journalling. The no-internet one is going great. Future experiments will include only eating food cooked in my home kitchen, and meditating for a long time every day.

It’s a slower method, but a more scientific one. I’ll post results as I have them.

It’d be really nice if I could have measurable outcomes, formulate hypotheses and compare those to the results at the end of the month. But the habits required to track properly might have to be an experiment in its own right.


Jan 7

Worm: you should probably be reading it

Worm is a superhero story. It will make you realise how dumb most of the genre is — not by parodying it, but by doing it right for once. Eliezer (author of the incredible HPMOR) recommended it in his most recent chapter notes. Here’s what he said:

The characters in Worm use their powers so intelligently I didn’t even notice until something like the 10th volume that the alleged geniuses were behaving like actual geniuses and that the flying bricks who would be the primary protagonists and villains of lesser tales were properly playing second fiddle to characters with cognitive, informational, or probability-based powers.

After the first couple of shaky chapters, I wasn’t sure. But I stuck with it, and now I totally agree. I also can’t put it down. It’s dangerous — it’s consuming my free time. But I’m very glad it exists. I just wish it was available on my Kindle so I didn’t have to read it on my phone / screen.


Jan 3

Boredom isn’t the issue

It was only when I started coding professionally that I encountered complex, messy codebases. I worked at a design studio in London, and they’d want some new piece of functionality quick smart so they could please their clients and make easy money (maintenance is super lucrative, because no one wants to do it).

I’d get pointed at a big ball of mud, and the only five guys who’d ever touched the codebase would be long gone. On top of that, I was fresh out of a computer science degree — from the kind of ivory tower institution that doesn’t like to get its hands dirty with real world problems. So I’d complain that I was bored, and no one would listen. They’d say, “Hey, everyone has to start somewhere. Just work your way up the ladder until you’re working on more interesting things.”

I knew I could never be one of those people who put in time doing drudge work to earn the respect of older people. So I quit and went in search of more interesting work. But wherever I went, I’d find the same messes, the same complexities — even when I was the one who’d built the codebase from scratch!

Flow theory (a widely-used, scientifically-validated model of performance) states that you’re bored when you’re taking on tasks that are too easy. I know now that when I was a junior developer trying to single-handedly reign in a big, ugly codebase, I wasn’t bored. I was anxious, frustrated, and annoyed — but there’s no way my ego would let me admit it. “I’m smart! I have a fancy computer science degree! This is work for idiots — that’s why I’m not having fun right now.”

But it’s actually that the learning curve was too steep, and no one was holding my hand. After all, if the work had been be too easy, I would’ve automated it. I’m a programmer, right? That’s what we do — make the computer do boring things that no one else wants to do.

So it was lucky that I soon after bumped into a master — a guy with decades of experience, degrees from Oxford and Berkeley, and true passion for what he did. It just so happened that he was looking for an apprentice, and we spent every day for the next six months pairing. I absorbed some of his hard-won wisdom, and he was energised by my enthusiasm and optimism (and got to spend more time thinking about architecture and design while I focused on the stuff that wasn’t worth his time).

The best thing about it was learning that I still had a lot to learn — that there are established practices and techniques for dealing with the inevitable incidental complexity that makes our lives as software engineers difficult. There are books and blogs, but the best way is to find someone better than you and form a symbiotic relationship.

It takes a lot of humility to admit that you don’t already know everything. But it’s the only way you’re ever going to get better, and the only way you’re ever going to enjoy yourself while tackling difficult problems.


Dec 18

Pomodoros reduce cognitive load

“Operations of thought are like cavalry charges in a battle — they are strictly limited in number, they require fresh horses, and must only be made at decisive moments.” Alfred North Whitehead

Modern neuroscience backs up Mr Whitehead’s intuitions: we have finite cognitive resources. Every choice we make depletes them. I try to minimise unnecessary decisions, so I can concentrate on what matters.

One way I do this is using pomodoros. I set a timer for twenty-five minutes, blast white noise through my headphones and turn off all notifications. Then I focus on doing one thing (e.g. coding, working through my todo list, answering emails, writing documentation). When the timer goes off, I take a five minute break to chat with coworkers, stretch, check notifications, etc. Then I decide what to do next.

Before I started doing this, I’d have a background process that was constantly asking:

  • what’s the time?
  • is it time to stop focussing?
  • am I working on the right thing?
  • should I check my emails now?

Answering those questions distracted me from the task at hand, and reduced my precious, finite supply of daily willpower. But they were necessary: if I didn’t ask them, I could work on one silly thing for a whole day without stopping.

But I don’t get asked them anymore. After having its interrupt signals ignored for so long, that noisy background task has learnt to shut down until I pay attention to it in my five minute break. And it only works because I have a system where I can trust that those questions will get answered in a timely fashion.

I’ve been doing it for years, and I don’t want to stop.


Nov 25

Tracking time spent in flow

Spending more time in flow tends to makes you happier and more productive. But most of us don’t attempt to measure the proportion of time we spend in flow, let alone experiment with ways to increase it. So I’m going to start tracking today, with a simple spreadsheet that records:

  1. when my pom started
  2. level of challenge
  3. level of interest
  4. level of “reward”
  5. my flow score from 1 to 10
  6. if I was standing or sitting
  7. any notes or observations

I’ve pledged $30 to this Beeminder to make it more likely that I’ll keep it up.

(The only academic work I could find on this is a paper by Mark Zarb, a PhD student in Scotland. It’s behind a paywall, but I’ve emailed him asking for a copy.)


Nov 24

A service for getting feedback on your programming workflow

One of the best things about pairing is when your partner says “Why are you doing that? Haven’t you heard of X?” where X is:

  • a Sublime Text plugin
  • a zsh snippet
  • some fancy git technique
  • a more-appropriate method (like Array#each_with_object)

And it’s not just micro-optimisations around tooling — I’ve gotten feedback on how and when I write tests, what to include in commits, when to refactor, and even how I take breaks.

But why are we limiting that advice to the few people who are a) nearby and b) interested enough in your growth to help you for free?

I want to capture an hour-long video of my screen while I code and send it off to someone to tell me how I could be doing things better. I’m going to try it out this week. I’ll tell you how it goes (and maybe even post my video…).

(Got the idea after Kottke linked linked to A.J. Jacobs’s article about getting instant advice on everything you do via Google Glass.)


Oct 17

A quick recap of my efforts at self-improvement

I’ve got a long way to go, but here are the habits I’ve managed to form over the last six months:

  • Spaced repetition
  • Journalling (using 750words)
  • Waking up every morning at 6am
  • Lifting weights thrice a week
  • Ketogenic, gluten-free diet
  • Meditation
  • Intermittent fasting
  • Vitamin D in the morning, melatonin at night
  • Tracking macronutrients and calories
  • Having at least two meaningful conversations a day

Each of these could be its own blog post, but for now I’ll just point to the resources I used to decide on and pursue them.

I found Luke’s articles on Less Wrong (“How To Be Happy” and “How to Beat Procrastination”) to be immensely useful, along with Gwern's record of relentless self-experimentation.

Alicorn’s posts on luminosity inspired me to become more self-aware, and Divia's “walkthrough” helped me internalise practical ways of doing so.

I use HabitRPG and Beeminder to keep myself motivated.

The initial desire for improved health and fitness came from seeing countless tangible examples on the Something Awful forums.

The people in the Melbourne Less Wrong community have been awesome, and help keep me honest, enthused and on my toes.

I feel like I’m finally starting to build a solid foundation on which I can consistently, effectively do awesome things.


Oct 7

Where I want to work, in 150 words

Every employee shares the same purpose, and cares about it deeply. Explicit, company-wide goals stem from that purpose, and anyone can point to their work and say “this advances X goal because Y.”

Decision-making is scientific. Emails and meetings feature hard numbers, alongside honest appraisals of feelings and intuitions. Everyone asks “why?” and “how?” until they’re satisfied.

Despite the common purpose, it’s not a monoculture. There are systems that guard against it becoming staffed only by white, affluent, twenty-something males.

Employees are trusted to take appropriate time to discover, experiment with and share new techniques. Managers help their underlings grow.

When someone proposes an idea, they’re either empowered to implement it, or shown the missteps in their thinking.

Hiring standards are rigorous, so everyone is passionate, friendly, talented and trustworthy.

The higher-ups take tangible steps to keep the business relevant in five years.


Oct 2

Page 1 of 3