
You should also look into Meyer's "Design By Contract" technique for writing "correct" OO and other-paradigm programs. This is of great value in real-world programming.
PS: You might also find another Meyer's book Agile! The Good, the Hype and the Ugly quite instructive - https://learning.acm.org/techtalks/agile
Rightly said!
I learnt "correct" OOD/OOP from his book Object-Oriented Software Construction (https://bertrandmeyer.com/oosc2/). It was one of the few books which actually looked at "Programming in the Large" specifically through the Object-Oriented lens and also instituted "Design By Contract (DbC)" within the Eiffel language to support it. DbC is a "user-friendly" version of the correct programming techniques espoused by Floyd/Hoare/Dijkstra. One can also say that it subsumes other techniques like TDD since a post-condition is like a unit test in itself. It is a shame people no longer study Meyer's works with the seriousness they should (he maybe a pedant but it is the right sort of pedantry) but instead run after buzzwords/fad of the month.
Here is Bertrand Meyer's take (the right one, imo) on Agile from his book Agile! The Good, the Hype and the Ugly - https://learning.acm.org/techtalks/agile.
The "Agile Manifesto" is nothing other than commonsense platitudes elevated to (unbecoming) Insight. There is nothing concrete and actionable in it. The "Rhetorical Devices" engaged by its proponents are (from [0]);
1) Unverifiable claims
2) Proof by anecdote
3) Slander by association
4) Intimidation
5) All-or-nothing
6) Cover-your-behind
[0] - https://learning.acm.org/techtalks/agile and Also see Bertrand Meyer's book Agile!: The Good, the Hype and the Ugly.
The "Agile Manifesto" is just well known platitudes.
Agile!: The Good, the Hype and the Ugly by Bertrand Meyer is a must read.
Summary: https://medium.com/@knL/i-just-read-agile-the-good-the-hype-...
I think also the OP doesn't give agile/XP enough credit for the good things it has mainstreamed. For example:
- Sustainable pace (don't work > 40 hours week). Agile companies, in my experience, tend to have good work/life balance.
- Continuous integration. Release and integrate often.
But "Incremental Design"/"Refactoring" as practiced by XP/Agile/Scrum crowd is not that at all. It is giving up on "Upfront Design" altogether because Requirements/Design is subject to change anyway. The fact that you will have unknowns should not be an excuse to not come up with a blueprint i.e. Design for the overall system. The focus should be on the long-term with decisions/allowances/techniques made for extension/maintainability/refactoring within the blueprint. That is the point of "Upfront Design". The XP/Agile/Scrum crowd have effectively thrown the "baby out with the bathwater" with the result that their methodology has degenerated to "think short-term and make shit up as you go long-term".
See also Bertrand Meyer, "Agile! The Good, The Hype and The Ugly" - https://www.youtube.com/watch?v=ffkIQrq-m34