Software Development

Copyright


© 2008 Ben Gidley.

Tools

Tools are critical to any software development. This page seeks to list my opinions on a number of the key ones I use.

IDE's

IntelliJ

In my opinion the best Java IDE around - it does cost a few quid but it offers a huge range of productivity tools. The real killer feature is its code editor - the autocomplete and code analysis is simply the best around.

Eclipse

Eclipse is a good Java IDE (it used to be my favourite) - it offers a good quality development environment but in recent versions it has become slow and unwieldy. The plugin based approach is extremely powerful - but leaves a user experience with some horrible gaps. I still use Eclipse (for example it has a nice Schema editor) but I prefer IntelliJ for day to day usage.

Editors

Notepad++


An excellent Windows Notepad replacement - this offers all the features you want in a good text editor including - syntax highlighting, tabs, able to cope with v. large files, handles Unix files etc. It simply works well!

Oxygen XML

This is my preferred XML editing / validation tool - I have version 7 (there are a few newer versions) but I have no compelling reason to upgrade. This provides 
  • Good Schema Support (editing/structure viewing) 
  • Validation - with multiple XML libraries 
  • Editing 
I have tried (but don't particularly like) the Eclipse plugin version - I prefer the standalone version as it seems more stable.

Smultron

When I moved to OsX for work I found it hard to find a good free text editor. I eventually settled on Smultron. It is quite basic compared to some, but it basically works and has all the key features I use. The only bad thing I have found if you can't use it as your command line EDITOR variable.

Build Tools

Maven

Maven - maven.apache.org 
Maven is my preferred build tool in general - it provides a range of features that just can be really helpful. 
If I was to name the top few they would be 
  • Dependency Management - this is crucial in big code bases. It lets you split your project relatively painlessly in to multiple smaller projects. 
  • Plugins - The ability to 'just' add a plugin and get features for you build is really powerful. Look at plugins like AppAssembler, Reports, Testing, Jaxb for examples of things that are useful. 
  • Extensibility - It is easy to add things to a maven build. My preferred method is using Ant. It is really easy to leverage the maven model in a simple Ant script to do all kinds of things from deployments to code analysis.

Ant

Ant is the grandfather of all the Java build tools out there and as such needs a mention. I don't tend to use it directly anymore, but instead use it inside the maven-antrun plugin. This lets you use all the power of Ant to build custom behaviors inside a maven build, using the maven artifacts and dependency tree.

Requirements Management

Diagramming