Every developer should have a collection of tools at their disposal to facilitate project planning stages, speed development, automate testing and building, organize code versions, and otherwise make life easier. Here is a list of the standard tools in my toolbox that make me more productive. Almost all of them are F/OSS and multi-platform. This list has a slight Java slant, but most of these tools are language independent.

Happy hacking!

svnSVN / Subversion

Every team needs a version control system to coordinate changes by multiple people, and even working solo its invaluable to have a way of managing different releases and viewing change history. My version control system of choice is SVN, which was created to be an improvement over CVS. If you already know CVS, the transition to SVN is cake. SVN has everything that makes a version control system good: branching, tagging, commit history, atomic commits, efficiency. And the basic operations are dead easy to use. Setting up and administering repositories can be tricky the first time, but there is tons of documentation online that will walk you through it. There a variety of graphical front ends available for SVN, but real men use the command line right? It also integrates with a few different IDEs including Netbeans, Eclipse, and JDeveloper.

jmeterApache JMeter

JMeter is load and performance tester. It was originally developed for testing web applications, but it also tests databases, web services, and FTP servers. It is multi-threaded, and multiple remote JMeter engines can be controlled from one instance in order to test even higher loads. It can also create a variety of graphs from the data it collects. For example, you can create median response time graphs for an application before and after optimization. Bosses really dig these.

To use it, you create what is called a test plan. A test plan can have many different types of elements: thread groups to control the number of threads and the number of loops the threads should do, controllers that dictate the order to send requests, samplers to specify the requests, timers specifying how long to wait between requests, listeners that gather data and display it in different ways, assertions to test the response, and more. JMeter can create both simple test plans with only a few elements, and more complicated plans for extensive stress or performance testing.

case studio 2Case Studio 2

This is the bomb when it comes to data base modeling. It can automatically generate models of existing databases when given the connection string, it has an easy to use interface for creating your own models, and it generates the SQL code for creating the database. Plus it has a lot of small features that really make Case Studio a joy to use – you can change color schemes, add notes to remind you of usage or not yet implemented parts of the design, and add project stamps that give author name, creation and modified dates, etc. Almost any database you are likely to encounter is supported. It is the only non F/OSS application in the list, but until recently it was priced around $25 and well worth the cost.

Unfortunately, Charon Ware, the maker of Case Studio, has been bought out by Quest Software, the makers of Toad Data Modeler. Case Studio Lite, which is the demo version is still available on the site (scroll to the bottom), but I doubt that will last long since Quest is suggesting the Toad demo download. I haven’t actually used Toad yet – the price for the full version is prohibitive.

firebugFirefox with Firebug extension

No serious web developer or designer should be without this combo. Firebug has the ability to break down network activity by file – showing file size, file load times, and response and request headers, which is very helpful when troubleshooting server or caching problems. It comes with a JavaScript debugger, profiler, and logger. It allows real time CSS and HTML editing so you can change the page on the fly. Hovering over an element in the source code pane will highlight the part of the page contained within that element so its easy to see exactly what is going on with the layout. It also contains a DOM inspector, which I haven’t found cause to use yet.

Before firebug, I ended up fixing a lot of layouts gone crazy by half random guesswork. It also helped me discover that due to a quirk of Tomcat, many of my files weren’t been cached properly.

emacsGNU Emacs

This is the mother of all text editors. There are modes available for all common programming languages, which provide syntax highlighting and menu options specific to that language. The learning curve is not steep, but it is long. I’ve been using it pretty consistently for 6 years, and I’m still finding new features. It is highly customizable and extensible through the Emacs Lisp Language, which is a dynamically scoped Lisp dialect. You can do pretty much anything with it, and basically everything is configurable. You can create key bindings, spell check, do advanced search and replace with regular expressions, compile and debug programs, create macros, do code folding, read and send email, view a calendar, play Tetris, and more all within Emacs. Oh yeah, need a psychiatrist? Emacs has it. Seriously.

I don’t really play with a lot of that stuff – despite all of it features, emacs has a very simple interface. One of my favorite features is the ability to set the colors used for syntax highlighting and background. If I’m going to spend a lot of time staring at the computer screen, I want to a scheme that is easy on the eyes and conveys useful information.

yjpYourKit Java Profiler (YJP)

YJP isn’t F/OSS, but they do have licensing options for academic and open source projects. YourKit makes a .NET profiler as well.

This is the best Java memory profiler I have come across so far. I haven’t found it to be all that helpful debugging JSP applications unless I already have a pretty good idea of what I am looking for. It does work a bit better for straight Java applications where you don’t have to worry about the whole technology stack.

It exports stack traces as HTML so you can compare them later, and creates some pretty nifty graphs. It also has the option to capture a memory dump on out of memory error, but you need to be using a newer JVM for this to work. YJP integrates with the Eclipse and NetBeans IDEs.

cygwinCygwin

I’ve been finding myself developing on Windows more and more lately, but without a *nix shell I don’t have any of the command line tools that I have become used to. Cygwin provides ports of the GNU development tools. Pretty much everything you would expect to see on a *nix command line, Cygwin will give you: grep, find, sed, more, man, ssh, cron, chmod, etc. So developing on a Windows box doesn’t need to be a PITA.

This tool is an absolute essential if you find yourself on a Windows box.