My Code Design Training Reshaped
It is already more than one year and a half since I started to give my Code Design training. I have developed this training as I say here, out of the desire to teach others the way I link the learnings from the best practices books to the code I write and how this helps to write a better code in general, a code that is inexpensive to change.
Along these months I've had the opportunity to give the training to various audiences in different companies. There were cases when the audience was with only really experienced programmers, cases with mixed levels of experience and also with only juniors. Mainly they were .NET or Java developers, but there were also C++, ObjectiveC, JavaScript or Android devs among them. The training, even if it was the same material, had a different dynamic depending on the audience and I enjoyed this a lot. My greatest satisfaction is when I see that "Aha" moment. It may be like "Aha, now I finally get how to apply that into my project", or "Aha, I see now when to apply this technique or to stress on this matter", or "Ah... an interesting solution, I'll try it out" or "Aha, you've just confirmed that I'm not (the only one) crazy". To my satisfaction, after each instance of the training I have got very good and positive feedback. This is also reflected by the testimonials I collect on the training page.
Now, is the time to act on the feedback I've collected and to try to improve it even more. I have spent some time in the last few weeks to reflect and to work on this. I wanted to target the most common improvement suggestions that I've got. Thinks like: "More code would have been nice", "More exercises might have helped", or "More time on the Cross-Cutting concerns rather then on Design Patters".
I think that most of these came either because there were cases when we tried to cover too much material in the allocated time or because in some cases it wasn't very clear what to expect from a lesson or the other. When there is too much material planned, it always feels like there wasn't enough time for discussing over code or exercising. Also, from a lesson titled "Design Patterns" it is quite clear what to expect, which may not be the same for "Separation of Concerns" or for "From Principles and Patterns to Practices". Sometimes it is a pity to allocate a full day to something classic like Design Patterns and maybe not enough to the others, when the others may bring more value since are practices that I've applied and collected from the projects I did along the years.
Many of the above can be addressed through a deeper discussion when planning the training for a specific audience, but I think that restructuring the course helps even more, so here is what I did.
I have taken out from the main course a few lessons and spawned new courses for them. This gives more time to the main course and also makes the courses description more focused, more precise, so it is easier to explain what to expect. The main course remains the "Code Design Practices" of four days, but now there is much more time for coding and exercising. Now, we could start implementing a demo application from day one, and exercise on it each day as we advance through the material. If we can plan the training over four weeks, one day each week, than we can have a very nice learning experience by giving people time to reflect from one course session to the other.
From the lessons that I've taken out I have now the "Design Patterns Explained", the "SOLID Principles Insights" and the "Managing Dependencies with Dependency Injection" courses. They are all for one day, which gives enough time for discussions, debates and exercises. The Dependency Injection, also remains as a lesson in the main course, but because there are teams who maybe can spent only one day and would benefit a lot from understanding and using Dependency Injection and Service Locator I also present it as a stand alone training.
I have updated the outline for all the courses, so if you go here you can see more exactly what changes.
In the end I'd like to thank to all who attended my courses and helped me to improve them through the discussions we had, through the suggestions they gave me and through the feedback and testimonials they have submitted. Thank you!