The ThoughWorks Anthology 2 consists of a few essays on topics of interest for software developers.
The essays
– The Most interesting languages – covers a few languages with why they are used, basics on what is different about them and some examples.
- Clojure – which has a nice transactional memory system and runs in the JVM.
- CoffeeScript – A layer on top of JavaScript that compiles to Javascript, which is inspired by Python and Ruby.
- Erlang – Great fault-tolerance and resources for creating scalable servers.
- Factor – stack oriented.
- Fantom – runs on JVM and CLR – interesting system for inferences of types, nullable types.
- Haskell – pure functional language, great concurrency support.
- Io – pure OO, without classes, coroutines.
– Object-Oriented Programming: Objects over Classes
Interesting essay on how using an object focus vs a class focus, and thinking about object roles and avoid inheritance when possible. This helps reuses at runtime and makes it easier to change dependencies while running. Reminds me a lot of Ruby and ignoring types vs what the object can effectively do. It also makes mocking much easier. It also lists languages with object-focused features, such as Ruby, Javascript , Groovy and Scala.
– Functional Programming Techniques in Object-Oriented Languages
Talks about functional programming techniques, such as using the transformational mind-set on collections and the patterns on which it usually appear, higher-order functions and others.
– Extreme Performance Testing
How to apply a more XP stance to performance testing. Recommendations on making performance testing part of the regular work on an agile way, including applying user stories, automated deployment, keeping a result repository and continuous performance testing in continuous integration.
– Take your Javascript for a Test Drive
Ideas and tools for testing JS code.
– Building Better Acceptance Tests
Various useful ideas and suggestions for acceptance tests.
– Modern Java Web Application
Some useful suggestions on building web application. Mostly about Java, although some of it applies to all languages, such as server and client-side aggregation of contents, CDNs and the post redirect GET pattern (which is a common pattern on Rails, BTW).
– Taming the Integration Problem
Nice techniques on making integration easier.
– Feature Toggles in Practice
Easier ways to work on multiple new features at the same time, while keeping deploying new versions. Conditionals, using inheritance or compositions, annotations, run-time and build time toggles (the last is the one I've used the most)
– Driving Innovation into Delivery
Valuable ideas for making it easier for companies to innovate.
– A Thousand Words
Essay on Data Visualization. I am interested in the topic, and found the article somewhat useful.
Conclusion
Overall, I really liked the book and learned a lot. I have dozens and dozens of highlighted passages on my iPad Kindle app (Mobi version). The code listings are a bit hard to read, but they have an online link for a very readable version (you do have to be online, though).
Several of the essays were interesting or useful, but I feel that Object-Oriented Programming: Objects over Classes is the one that I can learn the most from in getting simpler designs for my projects.