Today I want to give a quick rundown of the tools that I use on a daily basis as I'm developing software. I'm talking about software tools that speed up my work, not specific tools for ruby or rails (but I can talk about some of those in a later post. Let me know what you want to read about down below in the comments). Before I get started, let me emphasize something:
These tools are not magic
What do I mean by that? Well, I mean that if you start using one of these tools tomorrow, your development speed is not going to immediately double. In fact, it will probably slow down. These tools take time to learn and master. I certainly don't consider myself to be a master of any of them. However, I have used them, along with other tools, for quite a while now, and I find that since I've learned them and use them often, I am much better off than I would be if I hadn't ever learned to use them.
With that out of the way, let's jump in. Here are some tools I can't live without:
I'm a Linux guy. Well, I'm also a Mac guy, but as far as development is concerned, Linux is the way to go in my opinion. Specifically, I use Ubuntu because of its ease of use and popularity (and thus wide community and support base). It has lots of great programs bundled in, is easy to configure and do all that lovely sysadmin stuff with, and typically "just works". There are so many great things about Linux and Ubuntu that I can't get into here, but suffice it to say that development would be a much more difficult and cumbersome task for me without them.
For more information, check out http://www.ubuntu.com/ and http://www.linux.org/
With Linux comes the command line, or shell. I used the default Ubuntu shell, bash, for a long time. Relatively recently, I've switched over to zsh. I like it better for a few reasons, including the prompt customization, the superior autocomplete functionality, and powerful shell globbing. Not that I've gone really deep into any of these, but it certainly has made my life easier since I've switched. I also use "Oh My Zsh" for configuration, which is a very convenient way to get a great default configuration setup.
Even though I use zsh instead of bash for a few reasons, really the tool I can't live without is the Linux command line. Bash, zsh, whatever. After having learned to use the command line, I can work faster, get tasks done easier, and of course, write scripts to do the things that I don't want to do by hand.
To read up on zsh, head over to http://www.zsh.org/ and swing by https://github.com/robbyrussell/oh-my-zsh to check out a great configuration framework.
Ah, vim. What can I say? Every developer needs a good text editor, and vim is one of the best ones out there. Very customizable, loads of plugins available, pretty steep learning curve but so very worth the effort.
I guess the big benefit of vim (or any good text editor for that matter) is that it makes it easy and fast to do the things I need to do often. This is so important. As a software developer, my job is to manipulate text. One way to do that, of course, is on the command line, using scripting and such things. However, my primary tool for manipulating text is my text editor. I need my text editor to do what I want it to do, when I want it to do it, and quickly. The commands should be intuitive (or at least easy to remember), and things that I do often should be very fast for me to remember and execute. Also, it should look nice (syntax highlighting for code, for example) and give me specialized functionality without too much hassle. I've found vim to meet all of these expectations for me.
Head over to http://www.vim.org/ to learn more about this great editor.
Ok, so I believe that everything should be under version control. When I was in school, I wrote my assignments and even my thesis in version control. My resume is in version control. And, of course, all of the code that I write is in version control.
Git is a very powerful distributed version control system. It is written by Linus Torvalds, who also created Linux, and it has a great feature set and a large community of users. There are many different version control systems out there, and a lot of them are very good. I personally like a lot of things about how git works (local repository, nice workflow with adding and committing, excellent features such as cherry-pick and rebase, etc.). I haven't used very many version control systems, but git certainly hits the spot for me.
Another very attractive aspect of using git is Github. Github is a web service which is excellent for sharing and collaborating on development projects with others. It makes it very easy to check out new projects, and even fork them and create your own version. Many open source projects, especially in the ruby on rails community, are hosted on Github.
Take a look at http://git-scm.com/ and https://github.com/ to learn more.
Ever found yourself in a terminal emulator with way too many tabs to keep track of? Me too. One day I got sick of it and started using "screen". Shortly thereafter, I switched to tmux, a newer and better maintained alternative. In short, this allows me to have several "sessions" with several "windows" of terminals. Each session and window has a name which allows me to keep them all organized. It's easy to switch between them, create new ones, etc. I can even attach to a single window from multiple locations at once, allowing me to ssh into my work machine from home and pick up precisely where I left off in the exact same terminal instance.
It's a little hard to explain without going on forever, but it basically lets you organize several terminal instances and switch between them easily, much more easily than if you use tabs. If you're using tmux, or considering using tmux, I would highly recommend checking out tmux_resurrect (https://github.com/alexsanford/Tmux-backup). It lets me save and reload my tmux sessions when I need to reboot my machine, which is a huge productivity boost.
Read more about tmux at http://tmux.sourceforge.net/
Chrome (or Firebug)
Well, there you have it. These are some tools that I use every day, have improved my workflow, and I highly recommend that you try out. I haven't even gotten into any of the specific ruby and rails tools that I use such as rvm, but that will have to be the topic of another post. For now, good luck trying out some new tools! Oh and by the way, you can check out my configuration for some of these at https://github.com/alexsanford/config if you're interested.
What do you think? Any tools that you use everyday that you would like to mention? How about one of the tools in my list that you think you would like to try out? Leave a comment below.