Saturday, October 24, 2009

Tools for an efficient development environment

Most of us, if not all of us, want to do more things in less time. This way we can either move up in our careers, simply to go home earlier or why not do both? Likewise, no one like being frequently late on code deliveries or having to debug code until midnight day in and day out. If (almost) everybody can agree with that then this is an obvious idea, why am I bringing this up?

Because it amazes me how many people I work with don't bother experimenting with new tools to make them more productive. But perhaps it is me, since some people already called me a tool-freak... I like to test all kinds of tools trying to make my development environment as efficient as possible. I think the key idea is to reduce the redundant manual tasks and streamline whatever it is that cannot be automated. We can achieve this in many ways, but the easier ones are with the use of good tools.

Sure, if money wasn't a problem our options for great tools would be plenty. But where is the challenge on that? I love the feeling when I find a great tool that is free-as-in-beer especially because of the challenge. Let us face it, the vast majority of free tools out there suck big time. Please FOSS/FSF fan boys, don't get wrong, I don't advocate commercial over free tools, there are plenty of crap commercial tools also. While I believe in many of the positive aspects behind the FSF philosophy, I am too pragmatic to refuse to use tools that are either proprietary or follow a license not blessed by Richard Stallman. In the end of the day my ultimate professional goal is only the quality of my job.

DISCLAIMER ABOUT THE LAST PARAGRAPH - I, the author of this blog, am not against whoever has any strong opinions about the philosophies behind the FSF. If you want to use only software with free-as-in-freedom licenses, go ahead and do it (GNU/Linux users comes to mind). If you want to only use proprietary software, go ahead (MS fans, this was for you). But PLEASE, just don't annoy other people trying to force them to do what YOU think is right.

To avoid this post getting too long I will just list the tools I have been using, with a brief description of each. In the next posts I will describe in more detail some of these tools, especially those that I believe are not that known. Obviously I am not saying that the tools listed below are perfect for every developer or every situation, nor I am suggesting you should try it (i.e. don't sue me if one of these tools make you sick, kill your cat or something). I am just saying that, so far, they are helping me get the job done.

Lastly, note that each tool may have a different license (GPL, LGPL, Apache etc) but all are (or have a version that is) free-as-in-beer when it comes to simple use.

# Development:
Eclipse IDE for Java EE Developers - Great editor (or Integrated Development Environment) for Java, JSPs, JSF etc. It used to require hundreds of 3rd-party plug-ins to be decent but since they began bundling it with parallel projects it became truly powerful and way more stable. The only plug-in I find myself installing on a clean instance of Eclipse these days is Subversive, a Subversion client.
Maven - Build manager system. I took some time to get used to Maven after years using Ant but there are just too many cool stuff here to let it pass, like built-in online dependencies download, archetypes and hundreds of great plug-ins.
Subversion - SVN is a CVS-like source code versioning and repository system. If you are working on a team of developers you need one of these. But if you are working alone you need one too. :D
Hudson - Continuous integration web portal. Basically you take the time to set it up once and it will pay back in interest every time you have to run a build.
Nexus - This is a maven repository proxy. I will write more about this one in the next posts, but enough to say that if you use Maven you should not rely on the public Maven repositories out there, so you need a maven repository proxy. Nexus has a free version and it is powerful and freaking easy to use.
Trac - Trac is a project management, task tracking and WIKI system. I just hoped Trac was based in Java - it is not hard to install it but I guess I'm getting spoiled with tools like Nexus and Hudson that you install by just droping a WAR file in Tomcat's webapp folder. But once Trac is setup it shines - you can easily integrate it with many other tools like Hudson and Subversion.
SoapUI - Use this when you want to run functional tests on your web services. Use this for performance tests too.

Your development environment gets especially powerful and productive when you integrate tools like Subversion, Trac and Hudson together to automate aspects like documentation, deployment and testing, and to streamline the communication in your development team.

# General:
Notepad++ - This is what I use to replace the Notepad application that comes with Windows.
7-Zip - High-performance archiver that also works with almost every format out there.
Agent Ransack - Replacement to the Search function that comes with Windows. I could not hate more that dog that shows up during searches, especially when it does not list files that I KNOW it should be listing (see here for more details on a Windows "feature" in the search function that causes it to not show files under certain conditions)!
WinMerge - Great to compare folders with hundreds of files, like when we want to compare two slightly different local copies of the same project.
FileZilla Client - Great SFTP client.
CCleaner - Remove junk from your disk so you get more available space... and while at it, also remove junk from the Windows' registry.
MyDefrag - Simple, powerful, configurable... best disk defragmenter out there.

If you are interested in many many more great freeware tools go to TechSupportAlert's website.

So, this is the initial list. In the next posts I will describe in more details few of these tools, including Hudson, Nexus and SoapUI, and concepts like Build Automation, Continuous Integration etc. If you like this list, a comment would definitely help motivate me to write more. If you find better tools that do about the same of one of the ones I listed, please drop a comment, I am always happy to learn a new trick.

0 comments:

Post a Comment