Tech Life My tools must evolve

The Foamy Rules for Rabid Tools

The brother-in-law lives in the ‘burbs and needed five trees removed. Not big trees — 10 to 15 feet tall, six-inch trunks. Not a problem.

I live on the edge of a redwood forest in Northern California. There are sturdy oaks, playful maples, lovely madrones, weed-like bay laurels, and, of course, giant redwoods. But the pleasure of living in a forest has a tax. Trees fall and trees die, and in a forest of any significant size, this is always happening.

You need a chainsaw. In my case, I need three. There’s Junior, who is great at handling the small jobs. He’s light and ladder friendly.

Junior

Then there’s Marty. He’s the everyday mid-sized saw that is enough to handle almost any job. Marty would be perfect for a job in the ‘burbs.

Marty

Last, there’s the Rocket. Any tree is the Rocket’s nemesis.

Junior

Even if you’ve never handled a chainsaw, you’ve probably used a handsaw. It’s a physical, grinding affair. It’s fun for about three minutes and then you start wondering… am I making progress? The brother-in-law had taken it on himself to use a handsaw on one of the trees. In his three minutes he’d sawed off… a branch.

When Marty and I showed up, we dropped all five trees, cut up the trunks and branches, and stacked them into disposable piles in an hour.

The lesson: the correct tool is exponentially more productive.

That’s a long introduction to say an obvious thing, but I’m going to make it even longer. Take a moment and step inside the mind of the brother-in-law. I’ve got several trees I want to get rid of… and what do I have in the garage? Two hammers, a paint can full of nails, some leftover wood and… a saw. Perfect. A saw.

Context shapes perspective, so thanks to the contents of his garage, he knows of no universe where there are chainsaws. He’s heard of them and suspects they’re much faster than the laborious sweaty grind of this sawing, but there’s no chainsaw here, so he’s semi-happily hacking away. To me, standing there with my arsenal of chainsaws, it’s absurd. It’s a criminal waste of his time.

The lesson again: the correct tool is going to make you exponentially more productive.

The Foamy Rules

As an engineer, there is a short list of tools that you must be rabid about. Rabid. Foaming at the mouth crazy.

This is an obvious list of tools and there’s nothing here that you haven’t heard before. The news is that you need to care. You need to be able to explain in great detail why using green-colored text on a black background is THE ONLY WAY TO CODE. You need to be a zealot about your tools and zealotry starts with fit.

I was a database guy then I was a shrink-wrap guy and then I became a web applications guy. Each of those professions came with their own set of bright and shiny tools, but the tools were not important. Even a specific feature inside of that tool is not that interesting. I believe you can be just as productive sitting inside of a rich development environment such as Xcode as you can inside of TextMate and a slew of terminal windows. The point is not which tool, the point is that the way that tool – your tool — looks, feels, and functions fits how you see, move, and work.

These are my foamy rules and they may differ wildly from your list. That’s cool. My development experience is different than yours. I started working with computers before the mouse which means I trust my keyboard more. Integrated debuggers had just landed when I began developing which means, yeah, I like debugging at the command line. Again, the point is to get foamy, because what makes you foamy makes you your best.

My foamy rules:

My tools appear deceptively simple. TextMate. Terminal. Transmit, LaunchBar, DropBox. The mean time to get one of those tools set up is just a few minutes. I can build out my development environment on a new machine in a half-hour. This has a couple of handy implications. My tools are readily available and lightweight. I can download and install everything except for an operating system in a short amount of time. Similarly, setup and configuration of these tools is close to zero.

You might think this setup means I’m expecting my computer to randomly explode. No. These tools are not simple; they are well-tuned. A TextMate user knows it’s an onion application. You can keep pulling back the layers and finding new functionality, which is going to make your development experience faster. The same goes for Terminal and LaunchBar. The base functionality just works and if you have a particular development itch you want to scratch, the tool can scratch it.

My tools do not care where my work is. How many times have you experienced this? You write a quick script on your local machine to do something clever. You fine tune it and then plop it on your server and rediscover the rule — there’s nothing quite like production.

Any tool that does not allow me to develop live in production is slowing me down. When someone showed me how to set up Transmit to do editing on remote files, I saw hours of heretofore unknown production debugging issues vanish.

Yes, editing locally is fast, especially when you live on the edge of a redwood forest where DSL latency blows, but a tool which doesn’t allow me to develop over the wire isn’t a tool, it’s a debilitating hindrance.

Rands, edit? In production? Are you insane?

No. The tangential background rule is: “If you don’t know what you’re doing in production, you don’t belong there”.

There’s a corollary, which is: “I don’t care where my work is”. This is recent foaminess brought on by Dropbox. For non-production work, like, say, writing a book, I don’t want to think about where the most recent version of the work is sitting. Yes, I’m talking about version control — but shh, don’t call it version control — just call it Dropbox. Providing I have a network connection, this tool magically refreshes a shared directory sitting on each of my machines. I can’t think of the last time I worried about which version of a document I was on, and that means I’m spending more time working than worrying.

My tools are designed to remove repetitive motion. One of my first algorithmic holy shits was during my second computer science class as we were learning sorting algorithms. The professor elegantly walked us through the construction of different algorithms, explaining the pros and the cons, and then he landed Quicksort. Holy shit.

It wasn’t just the elegance. It wasn’t the recursive simplicity, it was the discovery that with imagination there were approaches that were wildly more efficient — and simpler. Whether you’re formally trained as a computer science nerd or not, you’ve learned the value of efficiency — to make each action that you take mean something. You know that when you’re efficient, you have more time to do what you love.

This is why I have a simple requirement that any tool I rely on has complete keyboard support. I will fall back on the using the mouse for one-off activities, but for any action I take that I know I’m going to do again, my question is, “How do I make this action cost less?”

Think of it like this. What if I told you that each time you wanted to save a file, you had to stand up, climb up on your chair, and jump up and down, yelling, “I would like to save my stuff now!” The first time you had to do it, it’d be kind’a fun, but after that it’d drive you bat shit crazy. It’s a similar feeling each time I reach for my mouse. I feel I’m engaging in an unnecessary task, which is always going to waste my time, because with a mouse sometimes you miss and missing is a tremendous waste of time.

Finding any file or application is, ideally, four keystrokes. Cmd-Space (LaunchBar), Letter #1, Letter #2, Return. Sometimes I get lucky; sometimes it’s three and you know that puts a smile on my face every single time it happens.

My tools only do what I’ve told them to do. Back when Dreamweaver first landed, I wanted to love it. I was so tired of the repetitive motion of developing HTML pages and the idea of a tool that was going to visually handle that laborious process was appealing. Problem was, Dreamweaver changed my code… without asking.

It what?

Dreamweaver was attempting to be helpful, but the moment it reformatted my code, I threw a fit. YOU TOUCHED MY CODE. Dreamweaver never recovered from that horrendous first impression.

My impression and my opinion of robust integrated development environments is that they can do a lot of good in terms of helping you visualize what the hell is going on. Borland developed some of the best environments for building code back in the day, but I still find myself with extremely primitive development environments where I’m tweaking code in TextMate and debugging inside of a couple of Terminal windows.

Yeah, I know all about the glory of integrated debugging and I see all you Eclipse guys having a ball, but what I found in many years of development is that embracing the fancy tools means spending time tinkering with your tools to get them to behave how you want.

The corollary to this rule is: “My tools don’t have a lot of moving parts”. Dreamweaver-grade code offenses are few and far between with solid development tools, but the fancy still comes with a cost. You may be fully willing and foamy to embrace that cost, but I’m not.

Am I more efficient than you? Maybe. Do I know where I stand relative to my tools? Yes. Do I have to relearn my development process when the people behind an elegant tool shoot for more elegance? Nope.

My tools are my tools. Choosing a thing makes it yours. The choice is the result of that unique mix of logic, superstition, stubbornness, and experience that fits you.

You read that right. Green text. Black background. I’ll tell you why right now. I’m an old school DOS guy. My first word processor was Wordstar and that’s the word processing program I came to associate with the fugue-like state of maximum productivity: the Zone. This is why I continue to favor colored text on a black background in my current favorite editor, Textmate. The coloring reminds me of an primal safe place where the tool is serving its purpose — to get the hell out of the way so I can go be exponentially more productive.

This is why, as engineers, we stick with something that works for us. This is why the ancient likes of vi and Emacs continue to flourish. Once we find a tool that works for us, once we’ve chosen that tool, it becomes ours and remains ours. It allows us to get foamy.

An Evolving Foaminess

My brother-in-law doesn’t need a chainsaw. When I took out his five trees, I eliminated half of the population of trees on his property. While a chainsaw is a delicious combination of sound, power, and sawdust, my brother-in-law didn’t choose a home where the trees are on the offensive, so he doesn’t need defensive weaponry.

He does need to know about a universe where chainsaws exist because every moment of his time is valuable. What differentiates us from the monkeys is not our ability to pick the right tool for the right job, but to pick the best tool.

And you never stop looking — this is why the last foamy rule is the most important: my tools are always fighting for their life.

My current tool set is influenced by all of my experience. Yeah, the elegant simplicity of vi is attractive to me — it reminds me of the uncomplicated early days of development, but vi can’t compete with the holy shit I experienced when I first ran into TextMate. This tool is always five steps ahead of me. I love that.

But TextMate, like all of my tools, must evolve.

Try this right now. Stand up and walk into the office of the best developer in the building. I promise two things: they will be happy to, at length, foamily show you their development set-up and you are guaranteed to learn, at least, one thing about moving faster. Perhaps it’s a tool you’ve never heard of or maybe it’s the way they deftly manage a tool you’ve taken for granted.

I don’t know what you’re going to learn, but I do know you’ll see one thing that will instantly and obviously make your universe a smaller, more productive place.

Leave a Reply

Your email address will not be published. Required fields are marked *

42 Responses

  1. hey, w/ your super tools you missed that you copy and pasted part of this article two times in the middle, like this paragraph:

    ++brought on by Dropbox. For non-production work, like, say, writing a book, I don’t want to think about where the most recent version of the work is sitting. Yes, I’m talking about version control — but shh, don’t call it version control++

    hopefully you won’t edit this in production 🙂

  2. Wayne 7 years ago

    I am afraid that somewhere your tools failed you while writing this entry.

    Search for “brought on by Dropbox”

  3. Fixed #irony

  4. Is “The Rocket” a Jonsered? doesn’t look like a Stihl, and doesn’t quite look like a Husqvarna from that angle…

  5. I’m a web guy. I love the VIM (desert, with line numbers), terminal, dropbox, git. Give me good build scripts and I’m a happy camper (both Rails and Django do well). Lately been playing with python virtualenvs, and holy shit it is beautiful.

  6. The BBC Life team discovered that certain monkey species also evolved to know to select what rock is best to crush nuts with: http://www.bbc.co.uk/programmes/p004p9n8

  7. Nathan 7 years ago

    For what it’s worth, I’m an Eclipse user but I still use the command-line for debugging. I’m not sure why, but I find myself way more productive in gdb and a terminal window. Also, it’s easy to get foamy about gdb because it’s so epically awesome.

  8. How are you not using vim??? I guarantee you’ll be at least 2x efficient in a month, and be in coding heaven!

    Diddo on the dark background, ever sice Desert theme, haven’t looked back. Definitely easier on your eyes, when staring at screen 8+ hours a day

    Currently using Visual Studio with Vim plugin and themes from here:

    http://winterdom.com/category/vs-color-scheme

    Visual Studio startup time is kind of a bummer, but usually open it once and leave it. The intellisense and “go to definition” is crucial to productivity.

  9. I’m pretty sure textmate’s url isn’t http://example.com/ 🙂

  10. I don’t understand. How do you install TextMate on non-mac “new systems”?

  11. Justin Pitts 7 years ago

    TextMate is the $1500 text editor that comes with a free Mac 🙂

  12. Gordon J Milne 7 years ago

    I just love the way TortoiseSVN annotates all the file icons in my Dropbox folder.

    Every now and then I try to like Emacs and fail. I try around every 5 years or so. Having said that I am beginning to get the point of Lisp so maybe the day of switch over is near.

    I have tried e, the Windows equivalent of TextMate but have yet to fork out the cash for a real license. I like it but the last time I evaluated it I had this icky problem with it trying to play with my existing cygwin installation too much. Maybe this time.

  13. Drop Box looks fantastic. Thanks! I’m using it now with one of my favorite tools, PasswordSafe

    http://passwordsafe.sourceforge.net/

  14. Blippy 7 years ago

    For many tasks my tool of choice is still Notational Velocity

  15. @Gordon, I would suggest you start with vim. Vim is much better on windows than emacs and is by far the best editor ever. I am doing a lot of rails now and I cannot expect to work on a better editor than vim. Besides, vim is available on all the platforms. I do not use desert but use moria with line numbers and rails.vim. It is so totally awesome.

    I value simplicity in the tools I use and stay a mile away from netbeans or eclipse. Some of the folks here are using Netbeans for Rails Development and it just drives me nuts to code on their machine. I just need my plain vanilla vim and I would be exponentially productive with that. I even use Its All Text extension for firefox and have hooked it up to vim. I am editing this comment in vim. Can your editor do this?

    Thats my foamy rabid rant about my tool. Vim FTW.

  16. I don’t understand this post.

    How is a handsaw not equivalent to textmate, and a chainsaw to a full blown IDE?

    Why don’t you step up the the next level of evolution when it is here, and instead keep on useing your familiar, but unproductive tools? Why don’t you at least try new stuff? Things evolve, hardware evolves, it makes more complex applications (i.e. IDEs) possible, there is no reason to rely on stone-age tools, just because you are familiar with them.

  17. “Context shapes perspective, so thanks to the contents of his garage, he knows of no universe where there are chainsaws. He’s heard of them and suspects they’re much faster than the laborious sweaty grind of this sawing, but there’s no chainsaw here, so he’s semi-happily hacking away. To me, standing there with my arsenal of chainsaws, it’s absurd. It’s a criminal waste of his time.”

    “The choice is the result of that unique mix of logic, superstition, stubbornness, and experience that fits you.”

    Yes but has you brother in law ever used a chain saw, maybe his experience is not up to scratch and he values his life. How about pulling the tree from the ground using a purpose built machine? I would think it criminal to use a chain saw 🙂

  18. Bryan J Swift 7 years ago

    @Toby just because you are more productive in an IDE doesn’t mean everyone is. Even different IDEs are better for different development styles. I’m a vim user now, but I was an IDE user first and for a long time I couldn’t imagine developing in anything but Eclipse. At that time I was working pretty exclusively in Java which has great IDE support in part because it is statically typed and the program can be well informed about your code by parsing it. Then I moved to more front end work writing a lot of JavaScript. JS benefits considerably less from an IDE because there isn’t as much software can tell about the code you are working on. Now I’m mostly writing Scala which has relatively poor IDE support (getting a lot better though) but still using mostly vim to edit code because I’m past the learning curve portion of using it.

  19. One crucial part of my toolset is my books — there are some programming books that I need to have on hand, be it for inspiration, a reminder or for reference.

    Liked the post. It’s always interesting to hear how other people work.

  20. Damian 7 years ago

    It’s funny how you speak of efficient tools and end up using TextMate, and trying to convince people that’s the best tool for the job. Wouldn’t that be like… trying to take down a tree with a saw??

    Nice writing, anyway

  21. This post is great, if only because it proves I’m not the only one who threw a fit when Dreamweaver (or Mozilla Suite, for that matter) touched my code without asking.

    But, of course, that “if” is only hypothetical.

  22. Chris 7 years ago

    Do you mean “The Rocket is any trees nemesis”, or is there something wrong with Rocket?

  23. @Alex pretty sure it’s a Husky, based on the colour and the clips to remove the top part of the casing. Jonsered’s are redder in colour and use bolts to hold the casing together.

  24. Watts 7 years ago

    Folks, it seems fairly clear to me that the point of this article isn’t to convince you that TextMate is the perfect tool, it’s to make you think about the tools that make you more efficient.

    For me, personally, there are certain things about TextMate that make it more efficient than any web development IDE I’ve used. Note that saying that is not equivalent to “you should abandon Eclipse even if you love it,” nor is it equivalent to “only morons use Vim.” It isn’t even equivalent to “there is nothing that I see in other editors that I wish TextMate had.” (TM misses a few things that it really needs, and there’s stuff you can do in Vim with the “g” command that will really blow your socks off: find me any other editor which can execute, in one built-in command, “delete every line in this file which is immediately after a line containing the word ‘banana’.”) And if you never really get into snippets and bundles, TM probably isn’t going to catch fire for you. Terrific. I know a lot of people who still love BBEdit (and I might still myself, except that it has a crucial flaw for people who come down on the “spaces” side of the “tabs vs. spaces” war like I do).

    So the question isn’t “should I use TextMate,” it’s “what makes me efficient?” The editor/IDE you use isn’t as important as whether you know it well enough to make it jump through hoops.

  25. Tom L 7 years ago

    Anyone remember the Brief editor?

  26. Sean S 7 years ago

    I know exactly where you’re coming from, Rands. My tools of choice are TextMate, Terminal and SVN. For the times I need to edit a remote file, or am on a different box, I use vim (over SCP, or through PuTTy if on a PC). Notepad++ on Windows (at $job) is my lifesaver.

    I tried to do all my work in NetBeans, using the fully integrated environment, but quickly found that it wasn’t able to keep up with the way I use it, and I was spending more time fixing the latest mess up it made of my work.

    My love of black backgrounds comes from a different source though, it’s just easier for me to look at for long periods of time.

    Like you said, what works for -you- is more important. Several of my colleagues swear by Netbeans or Komodo. I’m quite happy where I am.

  27. @Stan:

    “Yes but has you brother in law ever used a chain saw, maybe his experience is not up to scratch and he values his life. How about pulling the tree from the ground using a purpose built machine? I would think it criminal to use a chain saw :)”

    That’s exactly the point. Rands’ brother in law would use a hand saw, Rands would use a chain saw, you would use your tree pulling tool. You use what you know and what you are comfortable using. Whether it is more or less efficient in the grand scheme of things isn’t necessarily important, you’ll get the job done.

    Someone who works best in Textmate will be as useless with an IDE as a fine carpenter would be with a chainsaw.

  28. Martin Cohen 7 years ago

    On green text on a blank background: I think this started on CRTs where displaying more than one of the RGB colors had focusing problems and green looked best. LCDs do not have much of this problem.

    I have been using Emacs and Gawk for 15-20 years and still find them great for text processing. I am using them currently for generating C programs from specifications.

    I find it amazing that a co-worker uses Emacs but refuses to use dired – IMO, that is one of the great features.

    Always nice to see new stuff here.

  29. My best dev tools…Spaces+Expose set up with hot corners (mouse top right = all windows on desktop, bottom right = all desktops, bottom right -> top right = all windows on all desktops), for some reason people aren’t comfy using multiple desktops, and the mind boggles.

    Also, I grew up on Ubuntu (graduated to OSX as a ‘everyday’ OS), so I run my dev set up (terminals, vim, svn, web browser) on one desktop, in a virtualbox instance. The benefit is that…I can have multiple virtualboxes suspended at exactly the last place I was at in development (terminals and desktops).

    The benefit of Ubuntu should be obvious…apt-get absolutely rocks for quickly installing libs and programs you need, or getting vim colours, etc. etc., has sensible developer defaults out of the box. All our production stuff runs on Ubuntu too, so, it makes a few subtle differences between dev/live disappear.

    To me, I treat an ubuntu VM as my IDE. But that is just my best way.

  30. Great post.. best part is about asking that crazy good developer in your office. Every coder that I have some respect for has a very nicely defined way of doing things with their uniquely setup tools and it works wonders for them. For me one of these things was using the fluxbox window manager in my gentoo setup. My *nix-happy dormitory hallmate showed it to me during my freshman year of college. Holy root menu shit. Right-click the desktop and any number of applications could be easily launched. Right-click, Terminal, left-click. BAM! Right-click, Firefox, left-click (or arrow keys & return in your case). BAM!

  31. aczarnowski 7 years ago

    You pulled forward a feeling I’ve had for a long time about personal setups.

    This strikes me even more obviously right now; I bought a Droid and retired my Treo over the weekend. I’ve grown up with PalmOS since its original versions and had my tool set down cold. It’s going to be a long while before an Android setup is in the same place. That entire time I’m going to feel like a guy stuck in a foreign airport, without his luggage, trying to figure out if they even have flight status terminals like back home.

  32. This is great and mirrors Seth Godin’s most recent post and one that I just did which points to an older one where I talked about nailing a screw with a hammer. I guess this is on of those really cool moments of synchronicity where the same thought emerges in many places.

    http://blogs.hds.com/michael/2009/11/the-right-tool-for-the-right-job-vol-2.html

  33. MT Heart 7 years ago

    It would be great if Dreamweaver had a “Never rewrite code” checkbox in the Code Rewriting section of the Preferences.

    Oh wait…

  34. my mate gave me the link to your Nerd Handbook (presumably because I am one) and I have to say, having read but just 1.5 of your posts, as far as I can see, you aren’t a NERD you are a COMPLETE…GEEK! LOL In any case, fun blog here…I’m full of compliments 😉

  35. finndo 7 years ago

    I’m a bit disappointed…

    Your chainsaw example really doesn’t go with the rest of the article…

    When I read the rest of the article, I see you keep using, for software development, the saw that you have in your garage… You tell us to keep using the old tools we’re used to for software development and debug, but adapt and use the “correct tool” for cutting wood. Your blog article is really sending mixed signals.

    Using an editor you’re “used to” is a good advice, but it has nothing to do with using a chainsaw instead of a saw!

    A better follow-up for the chainsaw example would probably have been “use version control if you’ve never used it” and “use the correct software language for the job”. Certainly not “use the old text editor you’re used to”.

  36. Nice site, I like it!

  37. Hi there..Nice Site you have right here! Just wanna leave a small info to suit your needs about how to blow the girl’s mind at the up coming Bbq-Party!

  38. Fredia Theisen 6 years ago

    You’re telling me this guy… tinyurl.com/37mgcy8 still sharing his method?? Is he crazy?!

  39. I do not need a chain-saw!

  40. The flower shaped pendants are the loose pieces with the small different loops of the beadwork necklaces.

  41. scasmflop 5 years ago

    I think the chainsaws are a perfect analogy. While a bells and whistles IDE or editor might have a lot of power for full code analysis and debugging, many times they are a bit bloated for quick coding. It’s great to have them for your full bore large projects, but sometimes you are just doing some quick coding in a cleaner and less cumbersome (though still intelligent and handy) environment… its ladder work.

    By the way, if you have any maple scraps that could be milled into decent hardwood lumber, send it on down my way.

  42. Adam Lehman 5 years ago

    When you wrote this back in 2009, TextMate was your editor of choice. Is that still the case today? Is TextMate 2 the update you needed? Have you checked out Sublime?