“All problems in computer science can be solved by another level of indirection” – David Wheeler. In this article, I look at my favourite quotes relating to software development and what we can learn from them.
“All problems in computer science can be solved by another level of indirection”
I opened the article with this one, as it is one of the truest and most insightful quotes that I have ever read about computer science. You can say that this is another way of expressing Dependency Inversion Principle which states:
- High-level modules should not depend on low-level modules. Both should depend on abstractions.
- Abstractions should not depend on details. Details should depend on abstractions.
“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.”
Most new programmers often attempt to chase the wrong thing. They try to make their code as short as possible or sacrifice time and legibility with premature optimisations. Martin Fowler is here to remind us what is really important- making your code easy to understand! I would extend that to APIs, Libraries and Framework design.
“Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.”
John F. Woods
If the gentle words of Martin Fowler were not convincing enough, here is a quote from John F. Woods! Of course, this is an exaggeration, but exposed to the scrutiny of code review- you don’t want to be THAT guy!
“organizations which design systems … are constrained to produce designs which are copies of the communication structures of these organizations.”
This, rather famous quote, is often called the “Conway’s Law”. It comes from a paper that Conway wrote and has another quote (by Eric S. Raymond): “If you have four groups working on a compiler, you’ll get a 4-pass compiler.”
What many organization hope is that by creating independent, empowered teams, they will end up with independent, well-built microservices. While there is some truth to it, software engineering is not that simple! With three independent teams, you just may receive three clusters of “distributed monoliths” rather than nice independent microservices.
“Be conservative in what you send, be liberal in what you accept”
Designing good APIs is crucial for success in the world of services (micro or not). Jon Postel offers a good advice (originally about TCP protocol) on how to approach your communication.
You should try to be as stable as possible while being able to consume APIs even if they change slightly. This way you end up with robust systems.
“The Analytical Engine has no pretensions whatever to originate anything. It can do whatever we know how to order it to perform… But it is likely to exert an indirect and reciprocal influence on science itself.”
Ada Lovelace (1815-1852) is often credited for being the first programmer. She was programming an Analytical Engine rather than a modern computer, but she already recognized its potential.
It is fascinating to see that someone over 150 years ago already expected machines to influence science. A fascinating insight.
“You can mass-produce hardware; you cannot mass-produce software; you cannot mass-produce the human mind.”
This quote should hang on every project manager’s wall! It is still far too common in the 21st century for people to imagine that they can just throw bodies at a software project and it will all work out!
We are constantly seeing small, high performing teams outcompete massive, slow-moving corporations. With the Agile, Lean, DevOps movements there is a light at the end of the tunnel, but there is still much educating to do.
Share that quote with your managers and colleagues, make sure that they don’t forget that!
“Software is a great combination between artistry and engineering.”
I really like this quote from Bill Gates. It sums up how many of us feel about software development. There is skill, engineering, but also an element of beauty in it. Let’s not forget about it!
I hope you enjoyed these quotes as much as I did. If you have your favourite quotes, tweet them at me – @e4developer. Until next time!