This weekend I read quite possibly one of the most influentual books so far in how I personally look at software development - 'Object Thinking' by David West. I think this book (along with The Pragmatic Programmer) should be on every developers bookshelf.

David West, Ph.D., a professor at New Mexico Highlands School of Business, teaches an object-based curriculum and currently developing an innovative software development apprenticeship program based on agile principles. In this book he attempts to show how the mindset makes the developer and not the tools, languages and techniques. He dives deep into the history, philosophy and politics that have made object-oriented development what it is today.

A lot of the concepts mentioned are by no means new, however here they are explained in a manner to give the reader a greater understanding of eXtreme Programming and Agile software development. It challenges us (as developers) to take responsibility for our development tasks and become less reliant on formal process and methods.

One great analogy that he mentioned [from Robert Glass] categorizes two different cultures in software development. One side he compares to ancient Greece where one would act as his own agent on his own behalf. One would bring their tools to work, do their work, then take their tools home. These Greeks are individuals providing services. One the other hand, the Romans. These go to work and are given the tools to work with and held until the work is completed. They are not individuals, but rather owned by the organization.

I dont know about you, but I'd rather be Greek! He teaches us to not only develop in this manner, by taking more responsibility and being trusted more by management to do so, but also to build our objects this way.

As software continues to move more into this Era of Service Orientation, this makes complete sense. Far too many complex systems are designed in a datacentric fashion, being driven by primitive attributes as that is how it must be persisted within our relational databases. West challenges us to design our objects soley based on behavior rather than as data relations. He also gives much reason for why each object should be able to achieve all of its required tasks as if it was a tiny program all to itself. With merely contracts exposed, our objects should be totally portable from one system to the next with the ability to manage its contracts just the same. This abilty lies all in the decomposition of the domain.

[First,] perceiving and bringing together under one Idea the scattered particulars, so that one makes clear the thing which he wishes to do... [Second,] the seperation of the Idea into classes, by dividing it where the natural joints are, and not trying to break any part, after the manner of a bad carver... I love these processes of division and bringing together, and if I think any other man is able to see things that can naturally be collected into one and divided into many, him I will follow as if he were a god.
- Plato