Resources | ![]() print-friendly |
Development Libraries
Log4J: Most systems need to log tracing information of one form or another. Log4J is a widely used and popular logging system.
ORO: If you've never take the time to learn regular expressions I suggest you do. ORO provides a PERL 5 regular expression library that brings the power of regular expressions to Java.
POI: The POI project's aim is to allow access to the Microsoft Office file formats. Currently Excel is well supported and Word support in under development. This project is very close to our hearts as we are directly involved in it's development.
JUnit: JUnit should form the foundation of any Java development project. It's the unit testing tool that most developers have standardized. As such there is a large number of supporting tools surrounding JUnit. Get it and learn to test effectively, it will be the best thing you can do to improve your skill as a developer.
HttpUnit: HttpUnit lets you test web applications. It does this by connecting to the web server and pretending it's a client. Very for functional testing of web applications.
JDepend: JDepend is both a library and a tool. The tool part allows you to analyse the dependancies between your Java packages. It also provides various statistics about these dependancies. The library part allows you to tests your dependencies using JUnit. This is a very useful tool for determining whether you have any cyclic dependancies.
Krysalis Centipede: Centipede is a build system. It provides a framework on top of ant which makes it easy to build key features into your project. One of the great things about this project is the modular way new functionality can be plugged into the system. This is done using things called cents. Some of the core features provided out of the box are: documentation generation using XML transformed to HTML, support for multiple skins, compile and packaging support, generation of metrics and cross referencing of source code. This site was generated using centipede. One thing to be aware of is that centipede is a work in progress and as such may be subject to change.
Development Tools
Ant: Ant is a build tool like make but rather different in the way it operates. Every Java project should be using this tool. Used effectively it not only builds your project but serves as a form of documentation for how your project is structured.
Tomcat: Tomcat is the reference implementation for the Java Servlet specification. It makes for a great lightweight web server. Tomcat 4 is one of the few servlet engines to implement servlet reloading properly.
CruiseControl: CruiseControl is a tool for setting up a continuous build process. It builds upon the Ant project from Apache by providing a set of tasks to automate the checkout/build/test cycle, and provides a servlet for viewing the status of the current build as well as the results of previous builds. We have leveraged this tool in the past to provide more visibility to the health of our projects. CruiseControl is a little rough around the edges but still provides an excellent feedback mechanism. To read more about how a tool like CruiseControl can help your team read Martin Fowlers continuous integration article.
Chainsaw: Chainsaw is a GUI that allows you to view your log4j log output. Very useful. It can function in two modes. The first is by opening a server socket and listening to log events sent to it. The second is opening up an existing log file in XML format.
IntelliJ Idea: Idea is a Java IDE. I can't say enough good things about this IDE. It has so many timesaving features it sometimes feels like it's writing all the code for you. Having used it before it even went 1.0 I now really suffer when forced to use any other tool.
CVS: CVS is a source code management system. It's been around for some time and although it has some rough edges it works well and is well supported by other tools. Eventually it will probably be replaced by a tool called subversions. This project is specifically aimed to be similar to CVS but will provide additional features that CVS currently lacks. Some related CVS tools that you should look into are WinCVS and tortoise. These provide excellent front-ends to CVS.
One of the main features of CVS is that it is not locking based. That is, to modify a file it is not necessary to lock it first. If two people modify the same file CVS will attempt to automatically merge the changes. If you've ever been stuck with a locking based source code control system you will know how frustrating it can be when people hold onto locks and you can't preceed until you get them to release their locks.
Books
Agile Software Development by Alistair Cockburn: This book is bound to become a classic. There are many insiteful passages contained within this relatively short book. Alistair models software development as a finite, goal seeking, cooperative game of invention and communication. Communication is a strong theme throughout the book.
What I like about this book (as well as his other books) is that he gives plenty of real world case studies to support his views.
Code Complete by Steve McConnell: This book sits of the bookshelf of many developers. It contains a great deal of practicle advise. Some of it applies only to C developers but there's still plenty of good advise that applies generally to all languages.
An interesting thing about his book is that it contains a lot of research data to back up tje suggestions that are presented.
Dynamics of Software Development by Jim McCarthy: Within this book are a number of perls of wisdom, however the points the book makes are expanded on to a point that becomes rather dull to read.
Extreme Programming Explained by Kent Beck: This is the first book in the Extreme Programming series. Although slightly out of date with regards to the current XP practices this is a worthwhile book that focuses on the reasoning behind the ideas in XP. For those simply after a more practicle look at XP should look into reading Extreme Programming Installed.
Learning Python by Lultz & Ascher: A nice introduction to Python. These days I'm keen on Ruby as my prefered scripting language but have to admit that Python currently has more support.
Refactoring by Martin Fowler: Refactoring is the process of changing the structure of code without changing it's behaviour. This book introduces the disipline of making those changes in very small steps. It describes what is basically a catalog of different refactorings.
The casual reader might look at this book and come away thinking that most of the refactorings cataloged in this book are trivial and not even worth writing down. The important point that you should pickup from this book is that there is almost always a way to go from a bad design to a better design without having the code broken for days on end. Infact using these techniques it should be possible to do major refactorings without having your code broken for more than 10 minutes.
The other powerful concept that has come from this book and the work that went on prior to this book is that many refactorings can be automated using tools. It's only been recently that refactoring support has started to appear in tools. If you haven't tried a refactoring tool yet I suggest you download something like Intellij Idea and give it a go.


