||New Reviews| |Software Methodologies| |Popular Science| |AI/Machine Learning| |Programming| |Java| |Linux/Open Source| |XML| |Software Tools| |Other| |Web| |Tutorials| |All By Date| |All By Title| |Resources| |About||
Keywords: Objects, agile development, XP, modelling
Title: Object Thinking
Author: David West
Publisher: Microsoft Press
Level: Intermediate and advanced
Verdict: A thought-provoking and controversial read
This is a very different sort of book on object oriented development. It begins with the basic premise that there is much more to the object oriented paradigm than mastering the mechanics of a programming language - whether that language be Java, C#, Python or anything else. So far so good, this isn't a particularly controversial point to make, and most practitioners would agree that it takes a few years to really 'get' objects, unlike the weeks or months it takes to learn the syntax of a language. However, rather than produce a computer science book on object oriented theory - encapsulation, polymorphism, inheritance etc - author David West takes the reader on a kind of philosophical journey towards an understanding of 'object thinking.
Perhaps we lead a sheltered life here at TechBookReport, but there are few books that we get to see that will include discussions of post-modernist thinking, philosophical hermeneutics, Heidegger and the intricacies of object oriented software development. While this might seem like theoretical muscle-flexing on West's part, it is in fact central to his contention that object thinking is part and parcel of a wider approach to problem solving (indeed wider than that, for West this is a world-view rather than something specific to software development).
The book takes a partisan line, attacking rationalist/determinism thinking which favours tools, mathematics and rigid formalism as opposed to a 'post-modernist' line which favours emergent behaviour, hermeneutics (the art or science of interpretation) and agile techniques. In more workaday terms it's the contrast between those who see software development as being people-led (i.e. the proponents of agile methodologies, including extreme programming and SCRUM), and those who see it as tools-led (the proponents of modelling, UML and Rational Rose). Even though we strongly dispute West's characterisation of rationalism (which he equates to determinism) - complexity theory is firmly rooted in rationalism and the scientific method, for example - the main thrust of his argument is sound. Object thinking is grounded in a particular view of the world and in a set of (agile) practices that build on this.
However this is only one strand of the book. Having discussed the philosophical and historical background to object thinking, the book moves forward to looking at what this means in practice. Based on the world-view previously outlined, West looks at how we derive objects. The answer to the question 'where do objects come from?', reveals another deep split between agilistas and more traditional developers. Instead of relying on processes and tools West suggests that it is a behavioural approach that produces the most elegant and useful designs. Here we take a step back to look at the historical roots of object oriented development, particular in relation to Smalltalk. Again the author makes a convincing case for the use of CRC cards and other methods for picking out the dynamics of object behaviour. It's a view of objects as dynamic rather than as static that is fundamental here.
Finally, the book moves to some practical examples, showing how object thinking can solve a number of real-world problems. We suspect that for many readers this will be the real meat of this book, which is a shame as the more theoretical sections also provide real insight.
While the text might sound dry and academic, it is well-argued, passionate and backed up with copious footnotes and side-bars. This is a book that forces you to think hard about the craft of object oriented software development. The resolutely agnostic approach to implementation language helps a good deal - there's no getting lost in the specifics of this or that programming language. It's by no means a light read, but it's though-provoking (and infuriating at times), and it really does help the reader get to grips with some of the deeper concepts of object oriented design.