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, OS X it is. 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:
- JavaScript
- Emacs Lisp
- Python
- bash
- Scheme
- C
- PHP
- Java
- Pascal
- Objective-C
- C++
When it makes sense (which it often does), I use relational databases for data modeling. I've used a few different SQL DBs. Again, in descending order of preference:
- PostGreSQL
- SQLServer
- SQLite
- MySQL
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 where reasonable.
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.