nateeag.com >> software >> Software Development Tools

I use Emacs, heavily customized, as my text editor.

When I'm not in Emacs, I'm usually in a bash prompt in Terminal.app (or ConEmu if I'm on Windows). I have flirted with using Emacs' built-in terminal emulators, but have not yet taken the time to adapt them to my style properly.

My preferred desktop is Mac OS X, with HammerSpoon for keyboard-driven window management and Karabiner-Elements to remap a handful of keys on MacBooks. In an ideal world I might prefer to run a Linux desktop, but since Macs can run Windows and Linux, and no other hardware reliably runs MacOS or simulates iOS. I don't want to ever have to tell a client "I can't update your app because an OS update broke my Hackintosh," so even if it were legal to build one, I still wouldn't.

Version control is a fundamental part of my programming workflow, whether solo or on a team. I think about it a lot, and while I believe a better VCS is possible, my default choice at present is Git. I almost went with Mercurial when I first made the jump to DVCS, but decided that Git's popularity was more valuable than Mercurial's simpler interface.

I have learned enough programming languages to know that all languages are equal, but some are more equal than others. In descending order of preference (not necessarily experience or expertise), I have spent quality time with:

When it makes sense (which it often does), I use relational databases for data modeling. I've used a few different SQL DBs:

They all have different strengths and weaknesses, but on the whole I prefer PostGres. MySQL gets a special shout-out for causing much suffering, and I recommend avoiding it.

Chrome is my preferred browser, both for regular use and development. It's primarily open-source, includes an excellent suite of development tools, and is easy to extend.