Fog Creek

dev.life – Interview with Steve Klabnik

In dev.life, we chat with developers about their passion for programming: how they got into it, what they like to work on and how.

Today’s guest is Steve Klabnik, Community Team Lead on the Rust core team. Steve is a Rails committer and prolific Open Source contributor, who has authored ‘Designing Hypermedia APIs’, ‘Rust for Rubyists’ and ‘Rails 4 in Action’. He also regularly writes about software development on his blog.


Steve Klabnik
Location: Brooklyn, New York, US
Current Role: Rust Community Team Lead at Mozilla

How did you get into software development?

I don’t like to tell my story without a disclaimer: I’m pretty much the living embodiment of a particular stereotype and one that I consider fairly harmful. You don’t have to follow my particular path to be successful, and I know many prominent developers who were very different than me.

I first became aware of computers when I was seven. My uncle was a software developer, and when he brought a computer home to show his parents (my grandparents), what he did, I happened to be present and was made aware of this wonderful machine and the possibilities it offered. After seeing Adventure, I was hooked. My family pooled some money together and got me one of those computers from the back of a Sears catalog, that hooked up to your TV. It had a GW-BASIC interpreter on it, and I spent most of my time playing around with it. Eventually, I graduated to C, then C++, then Java.

Later on, I went to college for CS. I dropped out to do a startup. Like most, it imploded, and I went back and finished because I wanted to go to grad school for English. I got accepted, but it didn’t work out for other reasons. I still kind of wish I had done that, to be honest.

adventureGame

Tell us a little about your current role

If you were to read my literal job description, it’s ‘Write documentation for Rust at Mozilla.’ But I also do a significant amount of community work, advocacy, and support. I spend a lot of time going to conferences, talking with people about Rust and how they can use it to improve their lives, answering questions on forums and in IRC, and similar kinds of things. The Rust project is split up into teams, and I’m the team lead on the community team.

Basically, I am a channel from you to Rust: that might be through reading the docs that I’ve written, that might mean to get answers to questions, that might mean the person who I can complain to. I’m not the only such avenue, but I’m there.

One key thing about the way that I live is that it’s mostly centered around flexibility. This has a lot of drawbacks, but a lot of advantages.

So, for a rough sketch: the mornings are largely the same. I may not be in the same country, timezone, or place, but the first thing I do is drink some coffee. I then open up my email and look at all of the stuff from overnight. I have all emails turned on in GitHub, and I at least skim everything. I then review my new PRs and comment on anything else that I feel I should. Next, I open up HN/Reddit/Lobste.rs and give everything important a read-through. I have a real love/hate relationship with these sites. The Rust sub-reddit is pretty great, but the more general stuff has a lot of problems. But that’s where users are, and I want to help people, so if I want to be helpful, I can’t really choose where people congregate. Anyway, if there are certain threads that are important, I’ll leave them open in tabs, and check in throughout the day.

The rest of the day, it depends. If I’m at a conference, I’m often doing conference stuff. Regardless of where I am, I try to write at least a little bit of documentation for something somewhere. Even if it’s just one method, with examples – it’s about keeping momentum. Doing a little bit each day means that eventually, a lot of work gets done! If I’m at home, I’ll try to tend towards bigger stuff, and if I’m at a conference, I’ll try to lean towards smaller things.

I try to walk for at least half an hour each day. It forces me to take a break, and stretch my legs a bit, and while it’s not exactly strenuous exercise, it’s something.

I’m trying to find more time to properly read books. I read ‘stuff’ a lot, but I have a pretty huge backlog of things I want to read, so it’s hard.

In the evenings, I’ll work on my endless parade of side projects. I have too many of these, I need to wrap some of them up before starting more. But it’s more fun to start projects than finish them…

Sometimes, I get to take some time to participate in my only real hobby, the Android: Netrunner card game. My friendly local game store has been undergoing renovations, and my weekly meetup doesn’t happen in the summer, so it’s been a bit less as of late.

My days tend to end with a glass of whiskey and some Netflix. I like dumb comedies, after spending all day with my brain highly engaged, watching something too cerebral is just too much work.

netrunner

When are you at your happiest whilst coding?

When my language and tools don’t get in my way, and help me instead. Also, when my dependencies have good documentation.

What is your dev environment?

I have a Lenovo ThinkPad T440s that I really enjoy. I run Debian Jessie on it, with XMonad as a window manager, though I want to switch to wtftm at some point, just haven’t bothered. I use a very minimal Vim setup, and 95% of the time, I’m using bash, vim, and git. Check it out:

bash
$ history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr
    358 git
    137 cd
    114 vim
     70 cargo
     63 ls
     36 make
     31 rm
     26 rustc
     20 sudo

I really like listening to pop music while I work. Upbeat, happy, and doesn’t take any mental resources to process.

workingEffectively

What are your favorite books or resources about development?

They’re talks more than articles, but I recently took a few hours on a Saturday and watched “Growing a Language” followed by “Simple Made Easy.” They compliment each other nicely, I think.

One of my favorite software development books ever is “Working Effectively with Legacy Code.” It’s like a shining beacon of hope, in a land of messy codebases. You can improve a huge legacy project. This book will show you how.

What technologies are you currently trying out or want an excuse to try?

The thing I’m most excited about in this particular moment is unikernels. They’re one of the first new technologies that remove abstraction, rather than adding yet another layer, and may even lead to there being a more diverse set of operating systems, which is a space that’s been dominated by less than five players for a long, long time.

The Rumprun unikernel has some basic support, but many Rust projects depend on things that don’t necessarily work, so I’ve been trying things out and submitting patches. I’m pretty sure that I am the first person ever to get a website running in a Rust unikernel, given that I had to submit bug fixes to upstream projects to get it to work. 🙂 Still figuring out deployment, though.

In order to figure out said patches, I pretty much just asked questions on IRC. I’m new to Rumprun, and BSDs in general (which it’s built on top of), so it was really important.

What advice would you give to a younger version of yourself starting out in development?

Don’t listen to people who say a particular thing is “too hard.” Hard is relative! What’s hard for you can be easy for others. For example, many people look down on front-end development, but frankly, I think that stuff is ridiculously difficult, and I’m glad other people think it’s easy so that I don’t have to do it. 🙂 And in the other direction, low-level programming is easier than many make it out to be. Don’t be afraid to dive in!

 

Thanks to Steve for taking the time to speak with us. Have someone you’d like to be a guest? Let us know @FogCreek.

Recent dev.life Interviews

Chris Fidao
Chris Fidao
Mary Rose Cook
Mary Rose Cook
Dusty Phillips
Dusty Phillips
David Miller
David Miller