My Apprenticeship - Tuesday, July 20, 2004
This summer I'm revisiting my short apprenticeship at Object Mentor. I'll be posting commentary on all my posts from the summer of 2004 exactly 5 years later to the day.
Second day of A.O.O.D. and I'm getting pretty good with UML. Today we discussed the various principles of software development: Single responsibility, Open/closed, Liskov, Interface segregation, and Dependency inversion (Which, all together, spells S.O.L.I.D. - you can learn things from XPAU mouse pads).
Paul an I spent an hour or so trying to design an system that could take in information about a bunch of different types of employees. Then, after we designed a system with enough interfaces and uses of inheritance to avoid violation of the principles, more user stories were added and we had to refactor. It was an initially frustrating, but ultimately fun project to take a system and make it do something new without, hopefully, coupling the classes together too much. I think we got it, but we'll find out tomorrow morning if we did.
Bob said he liked my blog, especially the bit where Micah came back after a week, looked at out project and asked us what we thought we were supposed to do. Apparently this is a pretty common experience in software -- after a few weeks the customer looks at what you've produced and either realizes that what you did isn't what s/he asked, or what they asked for isn't what they really want. One of the big points of XP is trying to make this conflict between intent and execution happen earlier rather than later. There's always going to be changes to the system, but big ones need to happen early (changing the look and feel of the GUI -- not so bad, changing a 2-D side scroller into a 3-D first person shooter? Little bit more difficult).
I still have one of those 'S.O.L.I.D.' mouse pads - I don't really need it for my optical mouse but I have it. Also nice to have an Uncle Bob (Martin) sighting. People often ask me about all the Object Mentor employees I must know, but most of them were off teaching classes at the client site or doing agile/xp coaching during the summer of 2004. I mostly hung around with David, Paul, and Micah that summer and had shorter interactions with the rest. The same thing happened at ThoughtWorks were people would assume I knew this, that, or the other person who worked there while I did. But often person 'X' was in Texas while I was in New Jersey and our interaction was limited to possible bumping into each other at a company function.