Get your FREE 30 page Developing SOLID Applications guide!

The Five Tools I Can’t Develop Without

Out Of Date Warning

Languages change. Perspectives are different. Ideas move on. This article was published on February 7, 2011 which is more than two years ago. It may be out of date. You should verify that technical information in this article is still current before relying upon it for your own purposes.

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.

Conclusion

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?

Write better object oriented PHP today.

Object oriented programming always leaves you with a headache. What if you could master it instead?

Get the book now! »

Sylvain Boucher wrote at 2/7/2011 12:39 pm:

Version control is essential for me, I’m using GIT these days

Brandon Savage (@brandonsavage) wrote at 2/7/2011 12:45 pm:

It is for me too; please don’t think that version control isn’t something I consider essential. I’ve just written so often about it that I don’t want to beat a dead horse; I wanted to list some other tools I don’t often write about. ;-)

kyriakos (@ktoridesk) wrote at 2/7/2011 1:03 pm:

you missed the most important one..

a versioning system, cant imagine working without SVN even for a project i’m doing on my own.

Allistair wrote at 2/7/2011 1:09 pm:

I find NetBeans sluggish.

Eclipse PDT still rules for me. Standardising around an IDE in a team is very important in my view. With Eclipse we have versioning, validations and build tools that all developers must be able to use. With a single flow you can build a knowledgebase and support all developers, old and new into the business. If everyone is allowed to run riot then that is inefficient i’m afraid.

Jose Duenas (@joseduenas) wrote at 2/7/2011 1:16 pm:

Hi Brandon,
it’s always interesting to check what are using other developers. About the issue tracker, I’ve used several times Mantis, what do you use for that purposal?

Mike Jackson (@volkadav) wrote at 2/7/2011 2:02 pm:

I think something like a wiki, a decent source control system, and a decent issue tracker are sort of the “holy trinity” of modern software engineering practice. You can get along with subsets of it, but why introduce more friction into efforts that will by their very nature be involved and friction-prone? (Especially nice is when all three play together, so you can seamlessly skip between an issue, relevant code commits, and dev docs related to both when trying to diagnose something.) Along those lines I liked the idea behind Thoughtworks’s Buildix (basically, all three in one pre-integrated distro/vm image from what I recall).

100% agree on print_r/vardump. I think they’re my primary debugging aid, to the point that I’ve wished more than once that I could easily convince apache not to collapse newlines in error_log. (I think there’s some compile time setting you can use, but it’s been a while.)

Sean Cull (@seanreloaded) wrote at 2/7/2011 4:44 pm:

I know that tool choices are always subjective, but speaking of issue tracking software, do you have a favorite? The only one I’ve used any amount is JIRA, and I didn’t like it. I keep meaning to take a closer look at Mantis.

Jani Hartikainen (@jhartikainen) wrote at 2/7/2011 6:22 pm:

Well put – these are things I would have a hard time living without as well.

Some additional necessities for myself are tools like ack and phpunit. Ack is simply much better at searching than other tools I’ve used, and with phpunit I can do TDD which improves my ability to focus on the task at hand and thus also improves my productivity.

I’ve been considering getting a third monitor. It just seems I could use some more room :D

Saidul Islam (@saidulislam) wrote at 2/7/2011 9:47 pm:

dual monitor these days? maybe at work. I would rather have a bigger screen. on netbeans, the way oracle works they will probably keep JDev. I work with Oracle products but not a fan of them.

-si

Brandon Savage (@brandonsavage) wrote at 2/8/2011 12:01 am:

My favorite issue tracker is Bugzilla. I think its reporting features and custom fields makes it superior. Mtrack is a great PHP based solution, too.

jozef wrote at 2/8/2011 3:17 am:

- Netbeans PHP 6.9 with XDebug + my own PHP logger (static class) + my own PHP exception handler
– Subversion server, TortoiseSVN client
– Mantis bugtracker
– FF with Firebug, Web developer plugins
– Notepad++ with Function list plugin

Forever student wrote at 2/8/2011 5:55 am:

Funny how you write about having an IDE of your choice, then you mention NetBeans as an example, and half of the comments is from people suggesting other IDEs.
Guys you miss the point. Use whatever you like, not whatever somebody else tells you to use.

Nils Luxton (@nils.luxton) wrote at 2/8/2011 10:31 am:

Good points. Dual monitor has been a must for me for years now, I really can’t imagine not having that second screen!

On the topic of IDEs, I’ve tried Netbeans but didn’t really get on with it. It’s autocomplete wasn’t as good/fast as NuSphere PhpEd (which I used previously).

However, I recently discovered phpStorm from JetBrains. Now I don’t work for them or anything, but I had such a “wow” moment the first week or so I used it, I feel almost duty-bound to extoll its virtues to other devs(!)

It blows all the other IDEs I’ve used out of the water (PhpEd, Eclipse PDT, Zend Studio, Netbeans, Komodo, phpDesigner, the list goes on and on…) – it’s fast, great autocomplete (including arrays and arrays of objects), good refactoring support, great HTML/JS support, and lots and lots of really little things that just make life much easier. And perhaps best of all, their development cycle is rapid, and their Early Access Preview (read: beta) is publicly available.

Anyway, nice article, I’m looking forward to reading others’ comments.

Seb Barre (@sbarre) wrote at 2/8/2011 4:02 pm:

One comment about companies standardizing on an IDE. We did this at a previous company, and while efficiency and speed are good reasons to let coders pick their own tools, the argument can be made for consistency of environment also being a contributing factor to efficiency.

In the end we relaxed the rules to allow some choice, as long as the developer’s IDE choice supported XDebug and SVN..

eRadical wrote at 2/8/2011 4:14 pm:

I’m still not trying to force/standardise Zend Studio but if NetBeans does not fix the “insert TABs as SPACES” issue I think I will be forced to do so…

Half of the team is working with NetBeans and half with Zend Studio. Most of the “TABs as SPACES” come from NetBeans even when the option is not set…
It’s a killer to work with fuzzy-indended code…

They really must pay attention to that!

Meketrefe wrote at 2/8/2011 6:11 pm:

On Windows I just need my own LAMP stack, UltraEdit, Web Developer Toolbar + Firebug, xdebug and a text “todo” file. The rest is extra and doesn’t anything super duper to the mentioned core of tools…

And yes, I’m pretty doing fine with that…

Dave Fisher (@Fallenclient) wrote at 2/8/2011 7:21 pm:

Great post! My current employer fitted me out with an iMac when I first joined and even though the display was clear I couldn’t handle using one screen for everything.
Not a huge amount of memory for running vm’s either. So took the odd step of taking my mac pro with dual screens in to the office. Hell of lot more productive with a decent setup.

Petah wrote at 2/9/2011 4:05 am:

A unix based console. A light text editor (Notepad++). GUI diff tool (Netbeans, or SmartGit). Database sync tool (Toad for MySQL).

All free.

mnt wrote at 2/9/2011 4:55 am:

I still don’t know why programmers refuse to use debuggers instead of print_r/var_dump’ing.

Matthew (@maltblue) wrote at 2/9/2011 10:52 am:

Hi Brandon,

great post. I think I’ve tried the gamut from vi/vim, Quanta, Eclipse, TextMate and now Netbeans. Whilst it can be nice for companies to standardise, I believe that it’s best for the developer to pick an IDE that they work best with and know it thoroughly, so that they’re very efficient with it – sort of like a word worker or chef would choose the tools that they work best with and build great proficiency with them. I don’t really agree with enforcing a specific IDE on users.

The firefox developer tools, along with YSlow, Hammerhead, validator and reference plugins are just essential, but the Chrome tools are really improving as well. Also having a solid development workflow I find to be extremely effective for efficient development. Applications, such as a continuous integration server, like phpUnderControl, integrating with a standard version control tool and deployment process serve to ease unnecessary problems.

cheers,

Matt

evanx wrote at 2/10/2011 7:04 am:

Netbeans, svn, trac, firebug, google

E.J. Sexton (@ejsexton82) wrote at 2/10/2011 9:14 pm:

Great post. I have found everything you have said to be true.

Also, thanks for the tip on FirePHP. I had heard about the add-on before, but I had never tried it out. It looks like it could be very useful. Everyone raves about the Web Developer add-on as well, but I do not find it that useful. Nevertheless, I keep it installed, as it does come in handy occasionally. I love FireBug.

I also agree with those who commented that version control is also a must. Using version control, such as SVN, has saved me a lot of time and pain, and has improved my productivity.

I currently use OSTicket for issue tracking, but I much prefer Bugzilla.

Stephen Cox wrote at 2/13/2011 12:56 am:

I wanna second PHPStorm. You should check it out. The Local History feature sold me on it.

eliezer faizal wrote at 2/14/2011 1:30 am:

My favorite tools:
Netbeans, gEdit (Notepad), Terminal

I prefer system.out.println rather than debugger

Mike Willbanks (@mwillbanks) wrote at 2/14/2011 8:34 pm:

Brandon… all right post. I feel I must mention mine.
Continuous integration since without it developers write sloppy code and do not test what their change may have broken.
Code reviews as someone needs to be the enforcer before code goes running through the environments
Technical documentation as the next person would waste countless hours without it.
Their own VPS of the software, as slow machines are no fun and your dev environment should be as close to production as possible.
Vim as once you really learn it, it is your best friend.