It seems a number of people are interested in what my development setup looks like. I'm constantly emailed questions asking what IDE I use, what OS, what packages, etc. To stem the tide, I'll outline my dev setup here.
It should come as no surprise that I use a pure text editor (rather than an IDE) for writing code. Outside of Java, it seems like most professional developers use either vim or emacs. The reason, I assume, is that they're always available (especially in vi's case). No matter what company I work for, regardless of the platform they're on, I know I'll always be able to use Vim.
In addition, a decade with Vim makes me a very fast editor of code. I don't care how quick you are with your favorite IDE and a mouse; I'm faster. Every time I try to move to an IDE, I switch back after a few days if it doesn't have vi key bindings. So many Vim commands have become muscle memory that it doesn't feel like I'm using an editor to write code. Vim feels like an extension of myself, and I shape the code at will.
Here's a picture of what my Vim window looks like (on OS X):
That being said, there are a couple of rather nice Vim packages that I use.
In no particular order, here are the packages I use:
- vundle Essential as a package manager (I can finally list all my Vim dependencies in my .vimrc file). Vim packages are installable directly from GitHub, which is a nice touch.
- fugitive Best git interface for Vim
.to repeat much more than simple inserts or deletes
- ctrlp.vim A buffer/file/mru/tag explorer with fuzzy text matching
- vim-markdown Markdown syntax highlighting for Vim
- gundo.vim Visualize and traverse your undo tree. A must
- syntastic These two together make the absolute best autocomplete package around
- vim-colors-solarized Solarized color scheme for Vim
- powerline Powerline integration for Vim
OS: Arch Linux
My OS of choice is Linux. Specifically, Arch Linux. Having used Linux on the desktop for the past ten years, Arch is exactly what I'm looking for in a distro: don't force choices on me, stay at the bleeding edge, and get out of my way. While some bemoan insurmountable issues they encountered during simple upgrades, I can count on one hand the number of problems I've run into that took more than 15 minutes to solve. Arch also acts as a good way to really learn Linux.
But Also OS X
Since I run Linux on most of my personal PCs, I never had the need for a Mac. When I joined AppNexus, I was given a Mac Book Pro Retina. I was lost until I found Terminal (and later iTerm2). OS X, especially in comparison to Windows, is great. I do, however, hate the Command key and the reliance on Homebrew/Macports for all my favorite software.
I was a bash user by default, as that's what I most commonly found installed by
default at the various companies I worked for. Once I discovered zsh, however,
there was no going back. First with "oh-my-zsh" and now with "prezto", I have an
amazing shell setup. The tab-completion alone is worth the price of admission
(here's what I see when I type
zsh just does everything right. I also use powerline in both the shell and vim. It's suitably awesome (looks great, nice git integration, etc) without slowing things down.
If you're interested in my configuration files (.vimrc, .zshrc, etc), they're publicly available on GitHub under my config_files repo.
Font: Adobe's Source Code Pro
When this font came out, everyone went nuts for it. Well, I'm still nuts for it. In my opinion, Source Code Pro is the single best programming font, hands-down. It's almost too pretty.
Python Version: Mercurial Latest
One of the first things I do when I get a new machine is
hg clone the cPython
repo and build both a 2.7.x and 3.x version of the interpreter. I like to stay
at the bleeding edge (frequently pulling down changes) and not rely on whatever
happens to be installed on the system (I'm looking at you CentOS 5). One of my
former employers had very strict rules about what software could be installed on
servers (including dev servers), so I got very good at
wget-ing the source,
./configure-ing it and
make install-ing it (and dealing with all the
problems that popped up as a result). Therefore, I'm quite happy to build the
interpreter from scratch and have done so a dozen times.
Python Tools: A Bunch
Here are the Python packages and tools I can't live without:
No surpise here...
The best interpreter experience around
Makes working with virtualenvs a breeze
HTML/XML manipulation library
The most user-friendly web framework in the Python ecosystem
Is there even a competitor for database ORMs? I honestly don't know the answer to that.
tox, mock, py.test, coverage, pylint, pep8
Makes testing actually enjoyable
Pandas / numpy
Awesome library for data analysis
Really cool "Quantified Self" daemon
For someone coming from C/C++, ipdb is a godsend. Simply the best Python debugger
Sometimes you just gotta write C
It's fun to write your own language in RPython and get a JIT-enabled interpreter for it for free
In the end, I have a pretty boring setup: zsh and vim on Linux. The key thing to realize is just how powerful each of those tools are on their own. Combined, they make for an excellent development experience.