Can you write code that is both minimal (no overdesign) and flexible (we won't regret this code tomorrow?) Would you like to learn a bit of object-oriented philosophy, the way that was taught back in the '90s? Would you like to know what it feels to be an object?
In this session we learn a bit of object-oriented design with CRC (Class-Responsibilities-Collaboration) cards. This is a style of design that was invented by Ward Cunningham and Kent Beck. This was the state of the art for communicating OO design at the time that Extreme Programming was invented. This (I believe) is still useful today.
|Goal of the session:||An "aha!" moment on how to use objects to model a business problem|
|Intended audience:||Jan, Leo, Bram, Ellen (see Personas)|
|Experience level:||all levels|
|Topic:||technology and technique.|
Every generation of programmers forgets the hard-won conquests of the earlier generations. OOP seems to have "won", but a lot of OO code you see is just ugly and unmaintainable. TDD helps us write "clean code that works", but not always. Sometimes our code turns out ugly despite our best efforts. Sometimes even our attempts to refactor make things worse! Why is it so?
My opinion is that the great people who invented TDD were raised in a primordial broth of object-oriented programming, design and analysis. They gave this OO knowledge for granted. In TDD I should let design emerge, but this works only if I have an internal vocabulary of design options that will come effortlessly to me when I need it. I think that we should spend (much) more time thinking and learning about design. And design patterns are but a small part of it; it's more about learning to write code that is a model (a simulation) of the problem domain.
Our goal is to be able to write code that is both minimal (no overdesign) and flexible (we won't regret this code tomorrow :-) If you do OOP, then Object Thinking is the answer. In this workshop we'll try firsthand a design technique from that long-forgotten era; we'll learn a little bit of Object Thinking.