Talking Tools is an ongoing series of interviews with people whom I respect as creators, communicators and craftspeople. The goal is to dig deeper into how these people work, what their toolboxes look like and how they engage in their own processes.
Today, I’m pants-on-head excited to be speaking with Marco Arment, the CTO/Lead Developer at Tumblr and the one-man band behind Instapaper, a service that allows you to read things later that I use every single day. He frequently shares interesting thoughts on technology (among other things) on his blog at marco.org. He’s a badass. Read on for a riveting discussion of programming languages, text editors and blunt force trauma-inspired career changes.
I’m guessing you use a computer or two – please tell me briefly about each machine you regularly use and its particular purpose.
My home and work setups are identical. In each place, I have a 2008 Mac Pro with two 24” monitors, a Microsoft Natural Ergonomic 4000 keyboard (the only Microsoft product I use), and an Apple Magic Mouse.
I also have a 2009 15” MacBook Pro, matte screen, that I use during my daily train commute and whenever I travel.
I recently upgraded the laptop and the home Mac Pro to SSDs, which I would highly recommend to anyone willing to get good ones (Intel X25-M or SandForce-based).
You’re a somewhat-outspoken fan of the Kindle – what were the last three books you’ve purchased? Were they any good?
My Kindle is mostly an Instapaper reader, although I do (very) occasionally read books on it. The last one I read, which was almost a year ago, was George Carlin’s Last Words, which I’d recommend for any Carlin fan, even if you’re only a casual fan.
Aperture, Lightroom, or Walgreens + Shoeboxes?
I used Aperture 2 for a while, but couldn’t handle its awful performance, frequent bugs, and confusing (to me) interface and file management. When I tried the Aperture 3 trial, it didn’t seem to fix any of those problems. So even though I could have gotten Aperture 3 for just the $80 upgrade price, I chose to spend $300 on Lightroom 3 instead.
Lightroom and I get along very well so far. I do miss Aperture’s easy integration with iTunes and iPhone syncing, but I don’t really miss anything else about it.
My dream photo-editing program would probably just be iPhoto with Aperture’s lossless RAW editing controls. But Lightroom is pretty great, and it seems to be more important to Adobe than Aperture is to Apple, so it seems to be improving at a rapid pace, whereas I always think that Aperture is about to be abandoned.
What’s your favorite program with which to write programs and why do you like it? What others have you tried and subsequently found lacking? Also, please provide a small screenshot of the color scheme/theme you use.
I used to try to do all of my coding in vim. That didn’t work out very well, because I never learned how to navigate it insanely efficiently like many of its users can. Plus, I like GUIs for editing, even though I still do almost everything else in terminals during development (MySQL commands, version control, test scripts, file processing).
So I use TextMate. I love it. I use it for nearly all of my text-related needs, including drafting long blog posts and emails.
We’ve spoken about coffee briefly in the past, so I know you’re something of an enthusiast – tell me about how you make an awesome cup of Joe and please be specific.
Currently, my favorite method is a simple pour-over filter cone with Kenya AA beans, as freshly roasted as I can get (which is usually about 3-7 days old). I recently detailed the equipment and process here.
I want to start home-roasting, but I’m waiting until we buy a house so I can have sufficient space and ventilation.
You built Instapaper to scratch your own itch, so to speak – how, if at all, has the popularity of Instapaper changed the product? Alternately, if you were still the only one using it, how would it be different from what it is today?
It actually wouldn’t be very different. It would probably be uglier, as I have pretty low design standards when I don’t think anyone else is looking. The non-critical functionality would also be more clunky and difficult to use, since I never would have had a reason to sand down the rough edges.
If you had to choose a single tool/application on your metaphorical tool belt that would be the hardest to replace, which would it be and what would be a likely replacement?
Probably PHP. I know PHP so well that I can be extremely efficient and productive with it. I don’t know any other languages in its class well enough to do anything useful, mostly because I haven’t yet needed to.
If I had to replace it, I’d most likely choose Python. I don’t care for Ruby’s style, but Python seems to be a solid choice. If I were starting a major web project from scratch today, and I could afford to spend some extra time, I’d almost definitely choose Python for it.
I’ve watched some friendly exchanges on Twitter between yourself and Jeff Atwood regarding PHP and you seem to generally come to PHP’s defense – what about that language do you like? Also, what do you find infuriating (surely, there must be something)?
Most people judge PHP on bad tutorial code they saw ten years ago. But it’s a very capable, advanced language that supports many modern programming amenities. And deployment is extremely easy: any Linux server can have Apache and PHP deployed on it, if it isn’t already, with one command to the package manager. Mac OS X already has both installed — Snow Leopard even includes the fairly recent PHP 5.3. And once it’s set up, you barely need to touch it. It’s very fast, very stable, and very low-maintenance. Almost everyone knows PHP already, and if you don’t, it’s quick to learn and easy to read (when written well).
But there are a lot of things not to like about PHP. Its method names, parameter orders, and general styles are inconsistent. Its core designers and Zend are all over the place and often make decisions that I strongly disagree with. It doesn’t have any practical support for parallelism. And nearly every third-party module or library I’ve ever used has been terrible.
Coding professionally in PHP is lonely. While I know this isn’t the case, it always feels like we’re the only ones using it at this scale, because we hit so many bugs in critical modules (such as PECL’s two Memcache modules) and libraries (anything from the Zend Framework and any community code) that seem like any reasonable use should encounter, but nobody talks about them or publicly fixes them. I’ve needed to discard a lot of third-party code and replace it with my own implementations because it just doesn’t work. Every time I talk to an engineer from another major PHP-using web service, such as Yahoo or Facebook, they always say the same things. But nobody’s public about it.
These are valid criticisms of the language. But what I don’t like are criticisms based on the ability to write bad code, or the large amounts of bad code in tutorials and popular PHP software. These are both mostly because PHP has been so popular (and so easy) for so long. It’s possible to write bad code in any language — whatever this year’s geek-darling language is, somewhere, bad programmers are writing bad code in it — but it’s less widespread than bad PHP code because every other web-app language is used far less often than PHP is, and most have been in use for much less time.
Moreover, it’s perfectly possible to write good PHP code. Tumblr, Instapaper, and some of our old consulting clients use a great PHP-5-only MVC framework that we’ve written over the last four years, which puts us in a great position: we have the advantages of knowing what all of the code does and where to fix bugs or add features, but we also have this mature, proven framework to do the heavy lifting and enforce good code structure.
So it works for us, and I think we made the right decision in 2006 when we decided to build on PHP. (Remember what it was like deploying Rails sites in 2006? Keep in mind that we didn’t have a sysadmin, and we were paying full price at Rackspace for servers.)
But, for starting fresh today, I think I’d choose Python because it appears — at least to me, an outsider — to have most of the advantages that PHP had when we chose it in 2006, but with better direction, better library quality, and parallelism.
“If I had to choose a single programming language to use for the rest of my career, it’d probably be __________. “
I hope I never need to make this decision.
There’s definitely a point of diminishing returns with learning new languages: it’s hard to be a productive programmer unless you’re an expert in at least one or two languages (including their respective platform libraries), and it’s hard to find the time to become an expert if you keep starting from scratch with new languages. I think it’s a good balance to have workable knowledge of three to five languages and maybe be an expert in two or three of them.
But I’d hate for new languages to stop being made or used, or for my career to settle on just one. I dislike parts of all languages. And whenever I see a great feature in one, I learn from it and try to apply its lessons to all of my coding. If that list ever stops growing, I’ll stop getting better, and I’ll probably get bored and burn out.
Can you tell me a little bit about your blogging process? Assuming it’s a somewhat-lengthy piece, where does it live as it’s being written, edited, primped and polished?
Usually, I’ll get an idea for a post at an inopportune time, like when I’m in the middle of doing something else, so I’ll quickly create a Tumblr draft post with just a title and maybe a couple of sentences to remind me what I was thinking of.
Over the next couple of days, I’ll write a few paragraphs here and there, or I’ll just sit down one night and bang out the whole thing. Then I’ll sit on it for a day or two to do edits or partial rewrites. If it’s only a few paragraphs, it’ll still be in Tumblr’s drafts. If it’s longer, or if I’m on my laptop, it will more likely be in TextMate.
Then, at some random time when I feel like it’s done, I’ll hit Publish.
You wake up in the morning and find that you have, say, 500 unread emails that weren’t there when you went to sleep. Tell me how you’d handle this and what applications/utilities make it easy (or easier)?
The Delete key works wonders.
The only way to deal with large amounts of email is to devise standards for deciding quickly whether to respond to something. And not whether you think you should respond, but whether you think that you realistically will. You have to be honest with yourself and brutal to the senders who don’t make the cut.
This is how most people work anyway, but they’re in denial about it, so they’ll let their inboxes collect thousands of messages and then “declare bankruptcy” after a while and start the cycle again.
I need to be able to judge, as soon as I see a new message, whether I’m likely to respond. I try to keep the inbox clear at the end of the day, because realistically, if I haven’t answered something within two days, I probably won’t answer it. So for each message, I ask myself, “Am I really going to have the time to respond to this today?” And if the answer is no, I move it to the archive folder with a keyboard shortcut and move on.
I don’t recall ever having read anything about how you manage tasks and such. How do you remember to pick up the freakin’ dry cleaning?
If there isn’t an iCal alarm or a message at the top of my email inbox about something, I probably won’t do it.
If some big dude clubbed you over the head with a tack hammer and you forgot how to write software, what type of work do you think you would do?
I enjoyed my high-school job at Bruegger’s Bagels. Now, I enjoy coffee. I might just open a coffee roaster somewhere where there isn’t a good one nearby (so, almost anywhere) and live wherever I could afford as a result.
Say we’re at the doorstep of the Apocalypse and you have time to drink and enjoy one last beer before humanity is extinguished – please tell me which beer it would be and what, if anything, you’d eat while drinking it.
Probably a Chimay Grande Reserve (“blue”). And maybe an everything bagel with chicken salad.
You have an hour or so before bed to spend however you chose – please tell me how you’d unwind.
Big dorky thanks to Marco for taking the time to talk with me. You can find Marco’s writings at marco.org and follow him on Twitter at @marcoarment. And, to quote El Gruber, “If you’re not using Instapaper, shame on you.”