Who is Alex Payne?
I’m a software developer, programmer, engineer, or whatever you want to call the thing where you write code all day and dream about code all night and get paid for it. I’ve been programming professionally since I was too young to legally hold a work permit. I love what I do.
I currently work at Twitter in our Infrastructure group, which is responsible for the back-end components of our architecture. Previously, I worked for a couple of years on building out our developer platform (API). I’ve been at Twitter since the beginning of 2007, and I’ve watched the company grow from a tiny side-project into a cultural phenomenon with more than 150 awesome employees (and we’re always hiring!). Before Twitter, I worked in information security and built web apps for political campaigns and non-profits.
I’m also lucky enough to be the co-author of Programming Scala (O’Reilly, 2009) with the brilliant Dean Wampler. Programming languages are my passion, and Scala has captivated my imagination ever since I was introduced to the language.
Ruby or Scala, and why?
My co-author is a major advocate of polyglot programming, and I’ll wave that banner here as well. I think all working programmers should have fluency in at least two very different programming languages, and they should be able to read and write simple programs in at least a couple more. Different languages will change the way you think about programming. If you haven’t had that experience, you need to dive deeper into the languages you use, or try languages that push you out of your intellectual comfort zone.
Ruby and Scala diverge in many respects. Ruby is dynamically typed, interpreted (not compiled), and borrows from Perl a fascination with emulating human linguistic structures in such a way that programs can read almost like natural language sentences. Scala, by contrast, is statically typed, compiled, and focused on delivering a sort of Grand Unified Theory of object-oriented and functional programming. Ruby excels at rapid prototyping, amongst other tasks. Scala allows for powerful higher-order functions and rich type interactions, and performs great while providing those high-level tools.
So, to the question: each language has its place. You can accomplish any task with any reasonably complete language, of course, but part of being a good programmer is knowing when to bust out the right tool for the job.
Why does Twitter use Scala?
We spent a long time deliberating before choosing Scala as the second widely-deployed language at Twitter. We wanted a language that’s fast and safe, but also one that’s as fun to program in as Ruby. I think Scala is the best of all possible worlds in that respect. Thanks to type inference, the type system gets out of your way when you don’t need to express something complicated about the interactions between types in your program. The syntax and tooling around the language also helps contribute to an enjoyable development process. Joy is underrated as a metric for a language’s potential success in a development organization.
What does your typical day look like?
People keep all kinds of schedules at Twitter. Personally, I’m not a morning person, so I get in on the late side most days and stay commensurately late. The company provides lunch for us every day between 1230 and 1330, so somewhere in there I break to eat. I tend to get more programming done in the afternoon.
We encourage pair programming at Twitter as part of our always-evolving hodgepodge development process that we’ve pieced together from Agile, XP, and other approaches. If I’m working on something non-trivial, I’m probably paired up with someone. I love pairing, and I’ve learned a ton from the smart people I work with since we started doing it. It can be mentally exhausting to put in a full day’s work of pair programming, but it’s also really fulfilling to go home knowing that you hammered out ideas that pass muster with someone you respect.
What do you do in your free time?
For the latter part of 2008 and much of 2009, I was working on Programming Scala. I also frequently wrote article-length posts for my personal blog, which I’m currently taking a break from. I just got married (literally yesterday), and there’s been a fair bit of wedding planning to distract me from any hobbies. Plus, I’m planning on moving to another city soon, so there goes another chunk of time.
All that goes to say that I’m not really sure what “free time” is anymore! Basically, I work, I write, I take in theater and music and movies and art, and I enjoy good food and drink. I’ve been able to travel a lot over the past few years, and I love exploring new cities. I’m always reading three things at once, which isn’t a great system because I never finish books as quickly as I’d like to.
Current favorite apps?
For the most part, I live in Google Chrome, Emacs, TextMate, and a terminal. I use Things to keep track of non-work tasks. I’m always using Instapaper both in my browser and on my iPhone. I keep my bookmarks in Pinboard, my passwords in 1Password, and my library of reference papers and presentations in Papers. I try to keep the list of software I use up to date on i use this.
I can’t – or don’t want to – remember life before GitHub. It’s transformed the way I produce, consume, and contribute to open source software. GitHub is completely essential, and I pay for a bigger monthly plan than I actually need just to support them.
What OS do you prefer?
Mac OS X. I’m a longtime Mac user, despite the periodic missteps that Apple has made (and continues to make, particularly with respect to openness and developer relations). There’s a picture of me on Apple’s business profile of Twitter. I was pretty excited to do that.
I recently experimented with Ubuntu, but it’s just not for me right now. It’s so close so being a great day-to-day OS, but it’s plagued by consistency issues. I’ll still take Linux on the server any day of the week, though, and I think Ubuntu and Canonical are doing great work and demonstrating that a community-oriented approach can really work.
Small picture for your Workplace?
Favorite language, library?
As you might guess, my favorite language right now is Scala. I’m always experimenting with other languages, though. Clojure is my choice for tinkering right now. There’s really cool stuff going on in the Clojure community, and some brilliant people there. Thanks to the common ground of the JVM, a lot of the developments in Scala and Clojure are being shared between the two languages.
My coding time is made that much more pleasurable thanks to two Scala projects: sbt and Specs. The former is a powerful build tool that does a great job at setting up and managing Scala projects. The latter is a testing framework with a nice BDD-style syntax, tons of matchers, and plenty of extensibility. Together, the two make for a great workflow: write some tests, write code to make the tests pass, and let sbt handle automatically compiling and triggering test runs whenever code changes behind the scenes. It’s an awesome way to work, and no bulky IDEs necessary.
Name something that has inspired you recently.
Jaron Lanier’s You Are Not a Gadget has been on my mind a lot since reading it several weeks ago. I think he’s got a great message about building technology from a humanist perspective, and taking the time to consider how we use that technology. It’s given me another lens through which to consider my work and our industry. The book is aggressively critical of a number of companies and movements (Twitter included), but it’s ultimately hopeful and, I think, deeply inspiring.
I hope more people give the philosophy behind You Are Not a Gadget a chance. I see too many people making technology for technology’s sake, or being satisfied with solving inane first world problems when so many people need fundamental tools that give them a chance at the high quality of life most of us in the tech industry enjoy.
What are your personal projects and goals for 2010?
First, I want to complete the move I’ve been planning up to Portland, Oregon. It’s time for the tech industry to distribute itself beyond the Silicon Valley power center. I think Portland is one of a bunch of great cities on the tipping point of being new tech hubs. Ultimately, I think it’s important that our industry supports people’s ability to live and work wherever they choose, because we need to be around real people in order to understand what the real problems that need solving are. We’re uniquely positioned to make distributed work the norm, as technologists.
I want to start another book this year. The project is kind of insane in scope as it stands. It’s going to be a huge, multi-year effort. But I’m in love with the idea, and I want to get started on it. I’d be happy if just had an outline and a plan of attack by the end of the year.
My biggest professional goal for 2010 is to produce more open source software. I’ve written a lot of code while at Twitter, but for a variety of reasons, not much of it has been open source. I’m trying to structure more of what I do so that I can share it with the community and learn from all the programmers out there who are way, way smarter than I am.
I’ve also got a hand in putting together a pretty awesome event this year. Follow me on Twitter to hear about it first.