Every so often in my career, I find that I have been using a set of tools for a long enough period of time that they have been surpassed by the market. For me, this has been Eclipse for Java development, and SVN for code check-in and check-out. All the cool kids are using IntelliJ and git these days, so with some time off between contracts, I have spent the week getting familiar and functional with these tools. I wish I had done so sooner.
Even with Eclipse at release Neon, it still has some ways to go to catch IntelliJ. While the environments have very dissimilar setups, some conventions are alike enough that a few tutorials is all it takes to get up to speed. IntelliJ does more for the developer and in doing so saves a lot of time. Eclipse, continues the tradition of an open ended environment made better through many many plugins. It doesn't get too opinionated but that sometimes leaves the way forward for a particular path a little less clear. IntelliJ, by contrast, seems to have a slightly more opinionated view of how things should be done, so while there is much to learn to move from one to the other, in reality, there isn't as much to learn to become productive.
SVN, a long time bacon-saver for many developers, including myself, is a central repository system. While it is simple to understand and use, it is often the case that if you want to fork and merge code, the work is not as straight forward as it otherwise could be. You can check out from a certain branch, but merging has always felt like surgery to me. Git, and specifically the very nice website built around it, Git-hub, makes this a bit more clear and automated. While the git console paired especially with certificate base authentication can be cryptic and frustrating, using Git-Hub and the integrated support in IntelliJ-IDEA makes it as painless to use as SVN, but much more painless when it comes to merging branches.
Another tool I have been longing to embrace for some years now is JUnit. I didn't even know what assertive testing was a few years ago. I've always written my own test code but never thought much beyond automating the calling of my API to make sure things did what I expected. There are a whole bevy of testing techniques that go much more beyond this and I've picked them up one at a time as client driven work has allowed. While I've been trying to get a recent client to let me re-baseline a few projects taken in from the off-shore labs and built them as Test Driven Development projects from the ground up, I have now had the time to do this on my own and find the experience to be gratifying. Knowing that you are thinking about your code from a testing perspective puts new mental focus on lean code that follows the DRY and SOLID approaches.
This meshes very well with my shift to daily workouts this year. Self discipline, I find, suites me, and using these technologies has made that both easier and more meaningful in terms of improving the consistency and reliability of my code. I'm looking forward to future projects and contracts, and expect the future to bring more improvements to the tools we love and use.