The 8 Essential Tools for Programmers

As an undergraduate, one of my favorite classes was Software Engineering. It was in that class, I learned about applying Computer Science theories to the “real world”. We learned about things such as CVS, Cron, Python, UML, etc…

One of the books that was recommended reading, and remains in my library, was The Pragmatic Programmer: From Journeyman to Master. Chapter 3 talks about the basic tools needed for any programmer. Here is a review and description of the tools I use and consider fundamental.

1. Plain Text

There are many advantages to using plain text as the format of choice for programming. The keys for me are: readability, easy manipulation and portability.

I prefer to use XML based formats (XHTML being the primary format) for much of what I do, since primarily I program web applications. I also use YAML for configuration files, mainly using Symfony.

2. Shell

My development environment of choice has always been within a Linux distribution. Starting with Red Hat, then Gentoo and now Ubuntu. The Bash Shell has been my constant companion in the terminal in each distribution. When I must work on a Windows machine, then it’s Bash via Cygwin.

To save countless hours and improve your productivity tremendously, invest some time daily into learning more about how to use the shell. Here are a few resources to get you started:

3. Editor

I started with Emacs, then converted to the darkside (Vi). I now use the Eclipse editor mostly. When I’m living in the terminal it’s Vi or Vim for me. As with your shell, time spent learning about how to use your editor will yield massive dividends.

4. Source Code Version Control

If you are not using some form of version control, you are seriously living on the edge! I started out using CVS (or as one professor said, “Save Your Ass”), but then graduated to SVN. You will also want to spend consistent time learning how to properly use the version control system.

Another reason text formats are so useful is that changes are easily tracked using version control.

5. Debugging

In my C++ days, GDB saved me many hours of painful bug chasing. Now, working mostly in PHP/Javascript environments, I use Firebug, the built in Symfony tools and Xdebug. When in Python, I just use the Python Debugger.

6. Text Manipulators

Now that you have all those text based files, you need to be able to quickly manipulate them. You will want to spend some learning about regular expressions. Most of the tools dealing with text manipulation use regular expressions. I prefer to use Python as my tool of choice (sorry Larry). Take the time to study the tools mentioned here.

7. Code Generators

The code generator I use most often is the one Symfony provides. Otherwise, I use Python to create scripts, that given certain parameters or configuration files, pre-generates some template code.

8. Testing Framework

I have just started to incorporate unit tests into my projects using Lime within Symfony. Before, I would write out the results that were expected by various inputs and run those tests manually. Our development group is now implementing the “build the test framework first” strategy into our agile methods.

What are your essential tools?

Speak Your Mind