My Favorite Tools - Published 2014-02-23
There are two kinds of programmers....
Whenever you encounter a problem, you have two choices on how to solve it. One way is to start from the top, start with a fully working solution and slowly illuminate the areas you do not understand. The second choice is to start with an empty page and see as you slowly hook functions together. In this second scenario you work from the bottom up, you try to learn every possible scenario. Mistakes will be made along the way, but you will truely learn things, instead of just taking of just memorizing the words of others. I have tried my best to take this philosophy to heart. Whenever I am learning something new I start from a blank slate and build my way up. I make a lot of mistakes, but it has always paid off in the end.
Less is more.... (I don't see a symlink!)
The second philosophy that influences me is the belief that through frugality, comes clarity. I find cumbersome GUIs difficult to master, I appreciate a simple concise man page with examples. Only when you use and design software in this manner will you truly be able to benefit from the UNIX philosophy. Most software projects tend to fall into the trap of software bloat (Why does my spell checker have home grown XML parser?). I always aim to have projects with a single makefile, config files that only span one screen, and tools that do one thing, and do it well.
Below you can see the tools I use most often. For the operating system on my laptop I use FreeBSD. My favorite text editor is Vim. Its biggest strength is that it can be extensively customized, is light yet offers needed features such as syntax highlighting. I use Firefox for web browsing. While the browser is heavy, Firebug is a tool I can just not live without. The Firefox plugin vimperator eases the pain a little bit by providing Vim keybindings. For my terminal emulator, I use rxvt-unicode and tmux as a multiplexer. My Window Manager is dwm with a few patches I wrote and some I picked up from others. I like because it is light and stays out of my way.
For music, I use MPD with ncmpcpp for a client. The server+client model is well designed and MPD really thrives in this regard. For email, I use Mutt as my client and Exim+Courier server side. I also have a large collection of scripts that sit in ~/bin. I have everything from a script to encode folders of mp3s to a wpa_supplicant/dhclient automater in sh. There are a lot of other tools I use, but they are not in my day to day workflow. You can grab the configs of all the tools I have mentioned on my GitHub