Last week I was fortunate enough to attend the Nothin' but .NET Developer Boot Camp in London. The course lead by JP Boodhoo covers a lot of ground with topics ranging from core .NET concepts, applied design patterns, Behaviour Driven Development and testability, Domain Driven Design, top-down development, project setup and automation, programmer productivity. JP also packs in some motivational and self-improvement talks to round it all up.
Fourteen people attended the boot camp with varying levels of .NET expertise. Although anybody can take something away from this course (JP's passion for his work and life if nothing else), it is not really suitable for 'junior' programmers. This is an intense course and even the most experienced Developers in the class had difficulties keeping up with the pace. Saying that if you love coding then you will have a blast. One coding session and probably the best we had the whole week lasted till 3 o'clock in the morning.
My advice before anybody attends is to be prepared. Also make sure you tune up and get your laptop ready for this. Mine (which I have not used extensively for months) decided to have a fit from day one and simply could not cope throughout the week. This was tremendously frustrating and bordering on computer rage at times. I can no longer postpone the upgrade and I have started to save for a new high speced machine. I am fed up of trying to develop on sub-standard equipment!
Last week really highlighted a number of fundamental areas I still need to work on. In particular I realised how naïve my use of generics, lambdas, and expressions, is. JP demonstrated brilliantly throughout the week that smarter use of these basic .NET language constructs can help improve your code base significantly.
Aside from all the OO and DDD concepts covered that I still need to digest, the other big think for me was to get a bit of BDD love as thus far I have never managed to get into it. Although I am not yet fully converted to the BDD style of unit testing, I fully embrace it as an Agile Development practice which involves more than just Developers. I have definitely gained a much better understanding of BDD techniques and one of my next steps in this area will be to look at the MSpecs and RSpecs BDD frameworks.
Other things I took away from the course are:
-
Better understanding of some fundamental patterns - Command, Chain of Responsibility, Adapter, Event Aggregator, Strategy, Registry, Null Object, Chaining, Pipeline, Static Gateway, Visitor.
-
Project structure and organisation - one test project, avoid structuring physical assemblies along the lines of logical structure and namespaces.
-
Move over to
Git -
Subversion did not play too well in the class environment and as a result I'll be giving
Git a try and see how it compares.
-
Top down development - I wish I'd done that on a few projects I worked on.
-
Learn functional programming techniques.
-
Start using Vim to improve my productivity at the keyboard.
-
Not everything went smoothly though. Some of the group lab exercises lacked focus and direction or they were simply too broad in scope. Often people lost track of what they were supposed to do and quickly turned away from the exercise altogether. However the ping-pong coding sessions and small code katas JP gave us made up for it. This was really fun. Moreover seeing your code ripped apart and refactored by JP was, in a masochistic kind of way, brilliant. Observing how a top coder approaches problems was truly fascinating. Another thing that worked well was to get students to write tests BDD style based on some made-up user stories. These helped me a lot to get acquainted with BDD unit testing. From time to time, JP would also use well-meaning multimedia artefacts (music, clips and videos) as a light relief from the coding and white-boarding design sessions.
Finally JP introduced us to Typer Shark, a cool little game to improve your typing skills and speed. Love it!
Overall the experience has been very positive and I believe I came out of it a stronger Developer with lots of new ideas and new things to learn.
Develop With Passion