1. 23

Today’s interview is with Lobsters user Steve Klabnik.

Steve Klabnik

0. Introduce yourself, describe what you do for work and how long you’ve been at it.

Hey there, I’m Steve. I’m a Rails committer, Jumpstart Lab instructor, and nomad philosopher. I’ve been coding for two decades now, but I’ve been pretty heavily invested in Ruby for the last ~4 years. I’ve been teaching Ruby and Rails classes with Jumpstart for about two of those.

I am in ~25 GitHub organizations, and have over 100 repos on my personal account. This gist claims I’m the 165th most active contributor on GitHub, but I was 150 a few weeks ago, so I’d better step up my game.

1. What is your work/computing environment like?

I travel a lot, so I don’t have one given environment. At home I have a Thunderbolt display, but the rest of the time, it’s just me and the 13" MacBook Air.

Oh, and iTunes blasting Ke$ha, of course.

2. What software are you most often using?

I basically always have Campfire, Flowdock, Messages.app, and Twitter open.

I’m a vim user all the way, with just the cntrl-p and ack.vim plugins installed.

Here’s my .vimrc.

Oh, and so much of my work is via GitHub, I use hub aliased to git. It’s fantastic.

3. What’s an interesting project you’ve been working on recently?

Mostly I’ve been trying to get Rails 4 out the door. I also recently signed a deal to work on “Rails 4 in Action,” so I spend a lot of time writing that. I also have two book projects of my own, “Designing Hypermedia APIs” and “Rust for Rubyists”, so yes, tons of writing. I’m pretty sure that a lot of my year will involve me doing Ember.js work, and building great Rails backends for Ember-based services. So my work on ActiveModelSerializers is pretty crucial.

4. What is something new you’ve used or integrated into your work that has made a positive impact?

Living in a warmer climate. ;) I moved from Pittsburgh to Los Angeles last year, and I am so much more physically active in warm weather. It’s actually helped my work, too, because being more physically active makes me more excited to be mentally productive.

For those of you who can’t move somewhere nice and warm, I’ve really liked Lift, and having Inbox Zero as one of my to-dos. I have Lift set up to remind me to do all the things I do every day, and try to use it as a to-do list to check them off as I go. The light social aspects are fun too.

  1. 3

    Steve, what are your thoughts on Rust so far? You obviously like it if you’re working on a book.. where do you see it fitting in to your array of tools?

    I’ve been using Ruby for the past couple years, but prior to that I used primarily C, C++, and Mono/C#, and in some ways I kind of preferred those languages. I’ve been interested in spending some more time investigating Go and Rust out of personal curiosity, so I’m interested to hear your thoughts on Rust.

    1. 3

      I’ll tell you why Rust is important: static analysis. Rust is the convergence of language design ideas to ensure that you can specify behavior more strictly. For instance, you can say that when certain fields are defined in a struct or when passed to a function, that they don’t change. This on top of an actually strong type system (which C and C++ don’t even have) can give you some guarantees you can now assume to be true about your code. Should allow for greater reuse because you can trust the black-box implementations a bit more because they are beholden to those guarantees. You’ll write less silly tests. Etc.

      The killer application for this these days is concurrency. If you start making guarantees about state, then you can use those guarantees to ensure that the invariants required for concurrent execution are held. For instance, if fields in the struct are immutable, then they can be shared. Rust also keeps track of ownership of data, so you can mark a piece of mutable data as only being allowed to have one owner. So, it can enforce concurrent access to data at the language level.

      All of this means I can see Rust being the language used to build the next modular webserver/db. Probably something we tie our code directly into. Process workers (ala delayed_job, resque) can now be very closely integrated with this webserver/db, possibly written directly in Rust as well. Why? Because you want to ensure that these [ideally] simple cloned processes which require heavy computation can be executed concurrently. Also, your background processes generally make decisions that require a high level of reliability (validating message signatures,) so Rust can give you a better baseline assertion of code correctness as well.

      1. 1

        Hey, sorry this took so long to get back to you. I missed this thread. :‘(

        I actually explicitly wrote about this as the first chapter of the book: http://www.rustforrubyists.com/book/chapter-01.html

      2. 2

        Do you like the ‘jj’ keymap in Vim so far?

        1. 1

          Is it:

          imap jj <Esc>

          1. 1

            Yeah, I’ve been using it for a while myself.

          2. 1

            Whoah, somehow I missed this thread. :‘(

            I took it out because I haven’t really used it.

            1. 1

              Same as me. I tried to use it for a couple of weeks, but I found it more annoying than productive.