Every week here and in our newsletter, we feature a new developer/blogger from the DZone community to catch up and find out what he or she is working on now and what's coming next. This week we're talking to Roger Hughes, a software developer at Bet365 in Stoke-on-Trent, UK. Some of his most recent DZone posts include:
- Tracking Exceptions - Part 6 - Building an Executable Jar
- Tracking Application Exceptions With Spring
- Optimising Your ApplicationContext
1. What have you been working on lately?
I’ve been working on an internal bet365 project called “Forensic Monitoring”. This a multi-node Spring based application employing an eclectic mix of technologies aimed at reducing the impact of automated bots on the bet365 website. The challenge in this project has been creating something that can handle, filter and process a couple of hundred million messages per day and funnelling them in to an Esper Processor for analysis. The one thing I’ve learnt in processing such a large number of messages is that code that’s ‘okay’ usually falls over; on this project code just doesn’t have to be ‘okay’, it has to be as perfect as possible.
2. You write a lot about debugging and performance optimization. Do you have a few main tips you can offer on how to keep software running smoothly?
From a psychological point of view, I really think that you have to develop a clear, logical way of thinking; clarity of thought is key to good code. Muddled thinking equals muddled code no matter what language or which techniques you use.
On a more practical level, there are three things you need to keep code running smoothly: unit tests, unit tests and unit tests. How you define unit tests is down to you, so long as you have the confidence that your code is fit for purpose and are able to jump in and change or add functionality. I like being able to rip out, change and refactor code knowing that if I’m wrong it won’t pass my test suite. I hate working on code that doesn’t have any tests, and you can’t change it because you’ll never know what you’re breaking.
3. Are there any particular developer tools or resources you couldn't live without?
I couldn't live without eclipse or more precisely Spring's STS version of eclipse, though I have to confess that I don't use a large proportion of its features. The other tool I really can’t live without is Mockito - although I have a rule that says you should only mock when appropriate and always to the appropriate level. Never over mock.
4. Do you have a favourite open source project (or projects) that you've contributed to recently?
I haven't contributed to open source since I started writing my blog; there just aren't enough hours in the day.
5. Do you follow any blogs or Twitter feeds that you would recommend to developers?
I read a wide range of blogs, they’re a really good way of learning how to solve a problem and will probably be the demise of the technical manual / book. Blogs I follow include:
Jeff Atwood's Coding Horror
David Megginson at Quoderat
Norris Shelton, Jr at Java Ninja Chronicles By Norris Shelton
Julian Birch at Colour Coding
Erik van Oosten at Day to day stuff
As for Twitter, I follow a lot of the usual suspects from the world of software: such as @martinfowler, @kentbeck and @grady_booch etc… but I like to temper this with other inspirational non-software people such as @carolynporco, @profbriancox and @jimmy_wales. I also like to sprinkle in some comedy with @EricIdle, @JeremyClarkson and @TheRealJackDee plus, probably the best barista in the world: @Dinkyccino.
6. Did you have a coding first love -- a particular program, gadget, game, or language that set you on the path to life as a developer?
When I left university I was an electronic engineer for a while and one of the projects I worked on required some control software. This I wrote on an Apple IIe in AppleSoft Basic, filling in the bits that Basic couldn't handle with 6502 assembler. The Apple IIe was a top of the range model with 128Kb RAM and a duo 5 ½ inch drives. Those few thousand lines of Basic got me in to programming and lead to Java via 8085 assembler, Turbo Pascal, C and C++.
7. Is there anything else you'd like to mention?
I currently love the current “Is TTD Dead” #IsTDDDead debate between @dhh and @martinfowler and @kentbeck, where @dhh is proposing that TDD is applied in such a fanatical way that it’s hurting design. I really think that the business of developing software needs this kind of thing from time to time. We constantly need to steer away from fanaticism and Cargo Cult programming, and remember to question everything.