Sometimes in life you really come down to earth with a bump!
This is what happened to me on the first day of J.P. Boodhoo's recent
Nothin But .NET bootcamp in Dusseldorf.
I like to think that I've been developing applications in the right way. I've been trying to follow good design principles, using design patterns and following best practice agile processes such as automated unit testing. Not only that, but trying to encourage others to do the same and championing some of these processes within my project. I don't think I'm the best developer in the world but I do pride myself on developing quality solutions in a professional manner. I try to keep up with new trends, tools and techniques and new language features and products.
This is however, a very fast moving industry and it doesn't take long to fall behind. This was the first lesson I learnt on day 1 of JP's course.
JP is a consummate professional. He is probably the most capable developer I have ever met. All of the course attendees were in awe of him, and these are no ordinary developers. The attendees were all very talented developers too, some of the best in Europe. JP writes code at the speed of light, having complete command of the keyboard (he never uses a mouse). In fact it seems that the only thing that's slowing him down is the speed of the virtual machine which is struggling to keep up with the ferocious battering of the keyboard. This is not only due to the fact that JP is fast at typing but more due to the fact that he has configured his development environment for optimum performance, using any tools at his disposal and learning every aspect of them. Resharper is his main tool of choice, as it is for many of us, but JP knows it inside out. He has an encyclopedic knowledge of keyboard shortcuts, it's a joy to watch.
Not only is he fast but the quality and design of the code is very high. JP is very well read and has extensive knowledge of design patterns and OO design principles, but the impressive bit is that he knows exactly when to use them. In the past I've worked with developers who have learnt a new pattern and then decided to use it everywhere like it's a silver bullet. Not so with JP. So what do we end up with? A very well designed application. Small classes containing small methods adhering to the Single Responsibility and Open Closed principles amongst others.
The way JP works is also very efficient. He takes a top down approach to development, starting with the UI, working down to the domain layer, introducing stubs as early as possible. Taking this approach the client gets very early visibility to the UI and is able to see if it works for them. Let's face it, a lot of the time the UI is the main part of the application that the client is interested in, so it makes sense to get this to them as early as possible. And let me be clear here, we're not talking about a prototype UI, but production quality code. Once the UI is finished, we can then move on to the Service and Domain layers. Taking a top down approach also stops you from over engineering a solution and being too reliant on underlying legacy data structures.
JP is also a vociferous proponent of Test Driven Design, or more specifically Behaviour Driven Design. Not only does he "talk the talk" but he also "walks the walk". JP never writes a line of production code without first writing a failing test, no excuses. In the past I’ve worked with developers who are very resistant to concepts such as TDD and good design principles, always having an excuse for not doing it (haven’t got enough time, the managers/clients aren’t interested etc.). This is not the case with JP. The tests are written using human readable English and fluent interfaces and constructed using interfaces and mocks meaning even the least technical of us can understand the functionality of the code we are testing. Writing the tests in this way helps to flesh out the design.
By now you're probably thinking that JP's bootcamp course is some kind of a cult, and this is the start of a big recruitment drive! Well, you'd be wrong. In fact one of the things that JP discourages is putting people on a pedestal. It's not healthy and it holds you back. Everybody has something to offer and improvements can always be made.
I learnt an awful lot about C#, OO Design, patterns, and best practice development on the course, and got to spend the week with a fantastic group of talented developers. However, the main thing I've learnt is that you can't rest on you laurels or past glories in this industry. Every single one of us can improve. We'll never know everything, we may never be a big shot in the industry, but that shouldn't stop us putting in the effort to improve ourselves.
Attending JP's course was like a big kick up the backside for me. That's enough talking for now. I'm wasting valuable study time!
For a more detailed and humorous account of JP's Dusseldorf course, checkout Michel Grootjans blog at
http://geekswithblogs.net/alternativedotnet.
Talking of humour, I said I'd dedicate my first blog post to my good friend Ciaran Roarty, a fellow developer and the hottest new act on the Glasgow comedy scene! Check out his blog at
http://www.ciaranroarty.com.