# Object Thinking
This is a nice book that presents several interesting and non-obvious ideas about software development philosophy. For instance, the connection with hermeneutics and postmodernism, although not necessarily new, is not usually considered. So, definitely props for looking into the non-formalist direction for inspiration regarding SWE.
But I have some objections to the book and I believe them to be pretty grave ones.
First of all, regarding the aforementioned literary approach to the software development—programming is not literature. While in the terms of creating it this well may be true that the issue of communication is of the utmost importance, and we should concentrate on it instead of formal methods. It is not literature in the sense that we actually do have clear objective metrics to measure the success of a software development project. The cost, the amount of errors discovered post-release, length of development—these are completely measurable and are very important. We do not create software for the sake of art (while we may have to approach the process itself as an art project and not an engineering project, sure, this what the book tries to argue, and I have no real objections to the idea), we create it for purely pragmatic purposes, and hence it can be measured to be a success or a failure objectively. The fact that it can be supplied with explicit numerical metrics makes a perfect case for randomised control trials. We can check whether the formalist approach (even differentiating methods) is worse or better than the literary approach, with experiments. And there is no room for interpretation of such experiments because they fall within the scientific method. The difficult part is that these kinds of experiments to be rigorous would be extremely difficult to perform and incredibly expensive. My point is not that we must abandon the literary approach in favour of the formalist one but only that we do not have proof for either while the proof is actually possible to find (which seems not to be the case for literature and some other language related / semiotic problems in general).
Another critique I have of the text is that it mostly builds its argument by the way of, one, appeal to authority, and, two, by sheer repetition of the claim that the OOP paradigm is the best. It repeats again and again, without any backing up, that this is the way to do stuff, that it will make your software better, that it will make developers better people, that it will make software easier to change, reason about, whatever have you. And then it repeats it again. And then just one more time. And one more. This is supposed to convince me, I guess. Well, it doesn’t. Actually, this doing just the opposite. It rings so many bells, I am now more sceptical of the idea than before reading this book.
Maybe I am too deeply set in my ways but when the book pushes unityped approach I have a kind of a knee-jerk reaction and want to stop reading it immediately. When it continues with the idea of putting all data rich objects in unityped dictionaries (e.g. Map in Java terms), well at this point it becomes really difficult to try to value its advices.
And the ultimate thing, that completely ruined the message for me is that this book, I kid you not, has within it a gem of a very poorly written fan-fiction. There is this “example” of how the development of a project can go within the OOP/XP modality which is in actuality just a story (not an XP story, but a literary one) that tells us about the magical world of OOP/XP in a weird pastoral tone, full of recounts of how everything is good in the OOP kingdom of love. The XP developers in the story program like happy little elves, they know that through the refactoring process they will reach the blissful result of better maintainable software which makes everything in a way it is supposed to, they always nicely refactor their XP stories, and then go smiling to their computers and communicate with them in a rather hermeneutic fashion (they do not even create artefacts of documentation, because the intent of the developer is not transferrable through such means). And, oh my, oh my, the software does well in their hands. It’s now so easy to maintain, so easy to extend and they all hold hands and dance their happy little dance. Moreover, the guys who worked with objects more than the others create something that is even better, and everyone immediately sees that. And this is all BS. Really, it’s nothing more than a fantasy disguised as an “example” text, that has a purpose of staying in my mind as a real historical account of success of OOP/XP. This is a subversion (not the VCS).
Some quotes from these “Forward Thinking” inserts:
> “Developers separate in pairs, select a story, and begin development. Everyone is confident that we can begin development with such sparse definition of requirements and in the absence of any kind of formal modelling. \[…\] No one feels the need to create syntactically precise models, but it is surprising how much gets jotted down and drawn in the process of discussing and writing code. Interestingly enough, those that have been doing objects longer tend to make fewer notes as they proceed \[…\]” (p. 50)
> “One Friday afternoon the team is getting ready to leave, when Sally looks around the room as if seeing it for the first time. ‘You know,’ she says almost to herself, ‘this place is a pretty good visual metaphor.’ (p. 167)
> “Everyone here has confidence—we all have internalised a lot of knowledge \[…\] about object thinking and XP practices.” \[…\] “Somehow we have learned a new way to think about problems, a new vocabulary to think with, and a new way to perform—to work.” “And joy and serenity along with the confidence.” “Hah, sounds like we are all enlightened somehow”. (p. 168)
There is one more or less worked out example with the mortgage application, but it still left me disappointed. Not enough detail, too many weasel words.
All in all, I would recommend this book, there seem to be some deep ideas lurking inside (many of which I believe I have not uncovered, probably due to my lack of mental capacities), but please turn on your sceptic to at least 8 before reading. And always think, “is this claim substantiated by evidence”? If not, you can accept it still, do your own experiments (even of one), but be aware, in the very much postmodern tradition, that this is an act of faith.
Actually all these books about methodology and approaches to software are somewhat tiring. What a software engineer needs to see to actually become convinced or at least to start to think in the direction the proponent of an ideology wants him to? Yet another book, full of words, essays and promises? No, I think what we want now is actually just code. Give us the code, give us big, complex projects open sourced on Github or whatever which we can study, from which we can learn, and decide for ourselves the merits of the approach you want us to subscribe to. It’s hard to write a book, so maybe don’t. Write public code instead, that would be awesome, not lamentations and fan-fiction.