Every developer has a toolkit of favorite tools and applications that help them develop more effectively. Being individuals, developers often differ (and in some cases, argue) about the tools they use. One of the most frequent questions I’m asked is “what are the tools you use?” and that was the genesis of this blog post. While there are many tools that I would feel lost without, I have listed the five that I see as most crucial to my ability to effectively develop software.
Dual monitors with a fast machine
When developing, I find that no matter how large my screen is, it’s never big enough to satisfy the need for real estate. With virtual machines, consoles, IDEs, browsers and other essentials open and utilized throughout the process, screen real estate seems to be at a premium. I solve this by adding a second monitor, and in cases where an employer was unwilling to provide a second monitor, I’ve bought it myself.
Along with that, I couldn’t live without a fast machine. I personally prefer Apple products. Having a system that is fast, responsive, and able to run several vital machines alongside an IDE and Firefox is crucial to good development.
An IDE of my choosing
I’ve never fully understood the reasoning behind companies that “standardize” on a particular IDE for their employees, be it Zend Studio or something as basic as Vim. I personally would feel lost without NetBeans as my IDE, and while I’m not religious about it, I know some people who are. Standardizing on a particular IDE takes away one of the most important choices a developer can make for themselves, and can crush productivity.
For me, NetBeans provides much of the framework I need to be productive. It’s autocomplete, syntax checking, and automatic loading of docbloc information on various objects I’m using makes it easy and fast to develop code without having to always be referencing the manual or documentation.
Output functions like var_dump() and print_r()
As a visual person, I find that being able to output objects, arrays and variables is one of the easiest ways to debug. Being able to see the structure, values and properties of different variables makes it that much easier to produce solid, working code.
That’s not to say that there are not other methods of debugging; this one just happens to work for me. I would be lost without these functions and I’m thankful that they exist.
Firebug, FirePHP and Web Developer plugins for Firefox
While some might count this as three tools, I don’t really see any being useful without all of them. These plugins are a web developer’s best friend. The ability to introspect elements, clear cookies, evaluate elements. All these plugins are free to download but are invaluable.
An issue tracker
This might seem obvious to most people but it’s surprising how many companies either lack one or don’t use one effectively. It’s not enough to have one; it must be used with effectiveness to really benefit developers.
For me, an issue tracker is a way to dump all the tasks and bugs that I need to resolve and prioritize them. It’s a way to clear the brain and break large, difficult tasks into manageable chunks. A task tracker is non-optional for software development in my opinion. Issue tracking is so essential that it should be built into the process for requesting work from engineering; issues that do not have a requisite issue tracker number (and priority/milestone) should be ignored until they do, and engineers should be empowered to enforce this.
These five things are things that, if absent, would make me feel lost. And while this list is by no means comprehensive of all the tools I require or expect (note that I make no mention of version control; this is intentional but it is an essential tool for any developer or team), these five are tools that I find I use every day, throughout the day, without fail. Take any of them away, and my effectiveness as a developer would plummet.
What are your most essential developer tools?