Some of the tools that I use on a day-to-day basis, and how they changed during my journey.
OS of choice: Arch Linux
I have tried Debian and Ubuntu, but settled for Arch as my OS for work. Arch focuses on minimalism, and helping (or more like making) you getting familiar with the inner workings of Linux. Just take a look at it’s core principles, called The Arch Way. It uses a rolling release system, which means there are no version numbers, distribution upgrades, or periodic feature freezes. You install your system once, and only do package upgrades after that, always getting the latest releases from software, almost as fast as they come out.
Arch has two community related repositories, AUR, and [community]. AUR only contains a build script for the package (complete with downloading the source, compiling it, and installing it). It’s great because it gives you access to compile time options, in a very seamless way, and integrates with the package manager, which makes the removal and dependency handling easy. If a package gets enough votes, it’s moved into [community], where it can be downloaded as a pre-compiled binary. I have yet to encounter something that I can’t find in the AUR, or [community].
If you are not a complete beginner with Linux, I can really recommend Arch. Sure, you may have to tweak more on your system, but who doesn’t like doing that?
IDE: None/Vim
Vim is what god used when he created the world. It’s not just coding, I’m using it for writing emails, documentation, todo lists, everything. It’s simple, elegant, fast, and it can be found everywhere. Vim defines words, motions, jumps, blocks, and a lot more, as the elements, that text (or source code) can contain, and you can do operations, or move between these objects very easily. This is where most of Vim’s power comes from. It enables you for example, to comment out a function, delete the next 4 words, or delete all the text between the current “” marks in one simple motion. You don’t have to find the beginning ” mark, and put your cursor there, then select the text until the closing ” mark. You can simply say, delete the text between the current “” marks, and that’s it. This is just one example, to illustrate why working with these “text objects” are so different.
But beware of the steep learning curve. For the first, maybe two weeks, you’ll definitely be producing less, than before. It’s very daunting to from a GUI heavy text-editor (or something like Eclipse), to a totally nihilist, and keyboard centric editor. But after that. Oh god, It’s a brand new world.
A few words on it’s plugin capabilities:
It can diff whole directories, show the color of RGB values in CSS files, act as a file browser, open files by patterns without knowing where they are, can match the closing pair of almost any kind of tag/brace/quote mark, or do syntax/spell checking. There is no file type, that it does not have a syntax definition for. These are all solved through plugins. Check out my posts related to vim if you are interested.
Browser: FireFox & Chrome
FireFox for development, Chrome for home, and family members (or any other PC that I install).
Opera and Chrome have also developed very good developer tools, but FireBug still seems the most comfortable option to me, and it also has the largest choice of extensions. The last IE I checked was IE8, and it still could not dump a JS object’s structure (showing only OBJECT { … }) in the console, so it gets the almost-useless mark from me.
Version control: Mercurial/Git
I have fell in love with hg when I read Joel Spolsky’s site on getting started with hg, and there is hgtip.com by Steve Losh. I have used both for a few years, and there are pros and cons for both. I can’t really imagine going back to centralized version control anymore. I don’t use any kind of GUI for them, and don’t recommend it either to anyone. I always teach people on how to use the command line, because I think it’s much more straightforward in the beginning to not have to explain why everything is in a right-click menu.
Terminal multiplexer: None
I do a lot of work on the command line. I started using screen, and was content with it for a few years, but then I found out that tmux has much better screen splitting capabilities, and it’s much easier to customize its status line to show meaningful information. As far as I know, screen still cannot save and reload splits, and needs a patched version for vertical splits, something that tmux does out of the box. Fast forward a few years, I switched to a tiling WM, and I realized I no longer need it, so now it's just the shell.
Shell: bash
I consider myself proficient in shell scripting, and I love to automate little tasks like syncing my MP3 player as soon as it’s plugged in, deploy scripts, mass replaces with grep/sed and so on. It’s surprising how far a little shell scripting can take you. My first “whoa” moment was when I successfully made a script, that can read the changes from mercurial, and deploy them to an FTP server. Yeah, not SSH, FTP. I have tried to get into zsh a few times, but I haven’t really found bash lacking in anything.
Window manager: i3
I have tried a lot, going from metacity (gnome) -> xmonad -> awesomewm -> fluxbox, and I now arrived at i3. I used fluxbox for the longest time, around 5 years, i3 is relatively new to me, but I can already tell it's going to stay. I’m not too much into eyecandies, and it’s nice as a conversation starter among coworkers. I absolutely love the ability to easily jump between windows with the keyboard, instead of just being able to cycle through them with alt-tab, the multimonitor support is something that was built in from the start, and the scratch workspace is nothing short of awesome when you are doing some kind of iterative work.