I’m senior software engineer specialized in declarative designs and S.O.L.I.D. and Agile lover.
Sometimes a short thought can bring amazing ideas. There are some great quotes I’ve been collecting. I use them as inspiration or motto for some articles.
There are only two hard things in Computer Science: cache invalidation and naming things.
Make illegal states unrepresentable.
First make the change easy (warning: this might be hard), then make the easy change.
Simple things should be simple, complex things should be possible.
Before software can be reusable it first has to be usable.
Simplicity is prerequisite for reliability.
Edsger W. Dijkstra
Most software today is very much like an Egyptian pyramid with millions of bricks piled on top of each other, with no structural integrity, but just done by brute force and thousands of slaves.
Premature optimization is the root of all evil
Any problem in computer science can be solved with another level of indirection.
The best performance improvement is the transition from the nonworking state to the working state.
I can’t be as confident about computer science as I can about biology. Biology easily has 500 years of exciting problems to work on. It’s at that level
Object-oriented programming languages support encapsulation, thereby improving the ability of software to be reused, refined, tested, maintained, and extended. The full benefit of this support can only be realized if encapsulation is maximized during the design process.
Computer science is not about machines, in the same way that astronomy is not about telescopes. There is an essential unity of mathematics and computer science
Michael R. Fellows
A computer lets you make more mistakes faster than any other invention with the possible exceptions of handguns and Tequila.
Many people tend to look at programming styles and languages like religions: if you belong to one, you cannot belong to others. But this analogy is another fallacy.
More good code has been written in languages denounced as “bad” than in languages proclaimed “wonderful” — much more.
Sun Microsystems had the right people to make Java into a first-class language, and I believe it was the Sun marketing people who rushed the thing out before it should have gotten out.
There are only two kinds of languages: the ones people complain about and the ones nobody uses.
Planning / Management
The cost of adding a feature isn’t just the time it takes to code it. The cost also includes the addition of an obstacle to future expansion. The trick is to pick the features that don’t fight each other.
Einstein repeatedly argued that there must be simplified explanations of nature, because God is not capricious or arbitrary. No such faith comforts the software engineer.
You can mass-produce hardware; you cannot mass-produce software; you cannot mass-produce the human mind.
Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization’s communication structure.
Optimism is an occupational hazard of programming: feedback is the treatment.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.
Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
Deleted code is debugged code.
Some people, when confronted with a problem, think “I know, I’ll use regular expressions.” Now they have two problems.
Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.
Don’t comment bad code — rewrite it.
Code is like humor. When you have to explain it, it’s bad.
One day my daughter came in, looked over my shoulder at some Perl 4 code, and said, “What is that, swearing?”
A long descriptive name is better than a short enigmatic name. A long descriptive name is better than a long descriptive comment. –
Talk is cheap. Show me the code.
Legacy code is code without tests.
Software testing is not only ensuring absence of bugs but also ensuring presence of value.
Quality is free, but only to those who are willing to pay heavily for it.
DeMarco and Lister
Nothing makes a system more flexible than a suite of tests –
There are two ways to write error-free programs; only the third one works.
Alan J. Perlis
As a rule, software systems do not work well until they have been used, and have failed repeatedly, in real applications.
Whenever I have to think to understand what the code is doing, I ask myself if I can refactor the code to make that understanding more immediately apparent.
Let there be no doubt that object-oriented design is fundamentally different than traditional structured design approaches: it requires different ways of thinking about decomposition, and it produces software architectures that are largely outside the realm of the structured design culture.
I invented the term ‘object oriented’, and C++ was not what I had in mind
Part of the objective of this series of articles is to generate spaces for debate and discussion on software design.
We look forward to comments and suggestions on this article.