Seems self-explanatory to me. "Deep module" [0][1] is a well-defined term.
[0]: https://dev.to/gosukiwi/software-design-deep-modules-2on9
[1]: https://www.amazon.com/Philosophy-Software-Design-John-Ouste...
Im on a team that is currently attempting shift left. One part of this has been an argument that testers should review unit tests. I think this is not a good idea. Unit tests tend not to focus on the behaviour of system as a whole.
> Almost every software development organization has at least one developer who takes tactical programming to the extreme: a tactical tornado. The tactical tornado is a prolific programmer who pumps out code far faster than others but works in a totally tactical fashion. When it comes to implementing a quick feature, nobody gets it done faster than the tactical tornado. In some organizations, management treats tactical tornadoes as heroes. However, tactical tornadoes leave behind a wake of destruction. They are rarely considered heroes by the engineers who must work with their code in the future. Typically, other engineers must clean up the messes left behind by the tactical tornado, which makes it appear that those engineers (who are the real heroes) are making slower progress than the tactical tornado.
[1] https://www.amazon.com/Philosophy-Software-Design-John-Ouste...
Ousterhout is saying that we really want deep classes, i.e. the complexity of the implementation a construct hides should be considerably larger than the complexity it takes to use it. Which, at least to me, basically says "search for good abstractions". And what you're describing strikes me as a good way not to achieve that.
Of course, there's considerable wiggle room in that mental model, and one could still endlessly squabble about how (not) to break up the implementation.
[1]: https://www.amazon.com/Philosophy-Software-Design-John-Ouste...
https://www.amazon.com.au/Philosophy-Software-Design-John-Ou...
The main point is that a software developer's job is to fix stuff so you end up introducing complexity, but you will have a much easier life if you realise when you're about to introduce more complexity, and try to minimise it by thinking about your implementation choices. KISS, I guess.
These books will help you day-to-day with your general programming knowledge...
> Philosophy of Software Design https://www.amazon.com/Philosophy-Software-Design-John-Ouste...
> The Pragmatic Programmer https://www.amazon.com/Pragmatic-Programmer-Journeyman-Maste...
> Clean Code https://www.amazon.com/Clean-Code-Handbook-Software-Craftsma...
> Mythical Man-Month https://www.amazon.com/Mythical-Man-Month-Anniversary-Softwa...
Back to Ousterhout though, you might dig his “Philosophy of Software Design”[0] book, or talks associated with it[1].
Lots to like in this space...
[0] https://www.amazon.com/Philosophy-Software-Design-John-Ouste...
Why does this draw me to a platform? Because it leads me to think that I'll be able to use it to solve business problems[1] despite having non-infinite mental abilities[2]. That includes the ability to communicate about timelines with stakeholders.
What makes me think that about a platform?
- Well-written documentation, with appropriate amounts of the 4 types of docs: tutorials, model explanations, how-to guides, and references.[3]
- If applicable, docs which show how to write automated tests with the platform.
- Interfaces which do a good job of containing complexity. The information they require me to learn "pays its rent" for the space it takes up in my mind. The modules are deep enough to have solved problems that would otherwise take up my time.[4]
- An active community so that StackOverflow has a body of high-quality questions and answers.
[1] see https://www.kalzumeus.com/2011/10/28/dont-call-yourself-a-pr...
[2] see https://news.ycombinator.com/item?id=21303314
[3] see https://www.divio.com/blog/documentation/
[4] see https://www.amazon.co.uk/Philosophy-Software-Design-John-Ous... a concise book which is worth the £8 and 150 pages.
A Philosophy of Software Engineering:
https://www.amazon.com/Philosophy-Software-Design-John-Ouste...
This is mentioned as one of the symptoms/appearance of bad code: Shallow/Passthrough methods, which results deep call chains, adding up cognitive overload. The author in this book recommends deep module over shallow module, which tends to end up with more cohesive code.
This applies to the microservice/monolith debate as well. And it basically boils down to the observation that having lots of shallow services doesn't really reduce complexity. Each service may be simple unto itself, but the proliferation of many such services creates complexity at the next level of abstraction. Having well designed services with a simple API, but hide large amounts of complexity beneath, really reduces cognitive load for the system as a whole. And by "simple API" I think it's important to realize that this includes capturing as much of the complexity of error handling and exceptional cases as much as possible, so the user of the services has less to worry about when calling it.
[1]: https://www.amazon.com/Philosophy-Software-Design-John-Ouste...
Use as explanation of intent.
Use as clarification of code.
Use as warning of consequences.
Here's a link to a well-known recent book, half of which is pretty much about why those points are a real and frequent thing, and why code should be much more thoroughly commented than it's recommended by the usual philosophies.https://www.amazon.com/Philosophy-Software-Design-John-Ouste...
Amazon: https://amzn.to/2Rpu6zX
Book review I wrote a while back: https://benmccormick.org/2018/12/31/book-review-philosophy-o...
Robert C. Martin, Clean code: https://www.amazon.com/Clean-Code-Handbook-Software-Craftsma...
Vaughn Vernon, various: https://vaughnvernon.co/?page_id=168
Steve McConnell, Code Complete: https://www.amazon.com/Code-Complete-Practical-Handbook-Cons... 2
Clean coder: https://cleancoders.com/ videos
Hunt and Thomas, The Pragmatic Programmer: https://www.amazon.com/Pragmatic-Programmer-Journeyman-Maste...
Hitchhiker's Guide to Python: https://docs.python-guide.org/
Dustin Boswell The Art of Readable Code: https://www.amazon.com/Art-Readable-Code-Practical-Technique...
John Ousterhout, A Philosophy of Software Design: https://www.amazon.com/Philosophy-Software-Design-John-Ouste... This one looks particularly interesting, thanks AlexCoventry!
Kent Beck, Test Driven Development: https://www.amazon.com/Test-Driven-Development-Kent-Beck/dp/...
Dan Bader, Python Tricks: The Book: https://dbader.org/
Ian Sommerville, Software Engineering: https://www.amazon.com/Software-Engineering-10th-Ian-Sommerv...
Svilen Dobrev, various: http://www.svilendobrev.com/rabota/
[0] https://www.amazon.com/Philosophy-Software-Design-John-Ouste...
Looks like it was just released!
[1] https://www.amazon.com/Philosophy-Software-Design-John-Ouste...
[1] RAMcloud talk by J. Ousterhout:https://www.youtube.com/watch?v=lcUvU3b5co8
[2] RAMcloud paper: https://web.stanford.edu/~ouster/cgi-bin/papers/ramcloud.pdf
[3] A Philosophy of Software Design, https://www.amazon.com/Philosophy-Software-Design-John-Ouste...