Software Engineering Great Quotes
Tags: codenewbie, programming, quotes, software
Published: 2020-12-28 15:45:54

## 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.

# Software Design

> There are only two hard things in Computer Science: cache invalidation and naming things.

_Phil Karlton_

{% post https://dev.to/mcsee/code-smell-49-caches-2734 %}

> Make illegal states unrepresentable.

_Yaron Minsky_

{% post https://dev.to/mcsee/the-evil-powers-of-mutants-1noo %}

* * *

> First make the change easy (warning: this might be hard), then make the easy change.

_Kent Beck_

{% post https://dev.to/mcsee/code-smell-35-state-as-properties-4kbn %}

* * *

> 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.

_Rebecca Wirfs-Brock_

{% post https://dev.to/mcsee/code-smell-28-setters-2hih %}

* * *

> Science is what we understand well enough to explain to a computer. Art is everything else we do.

_Donald Knuth_

* * *

> The biggest issue on software teams is making sure everyone understands what everyone else is doing.

_Martin Fowler_

* * *

> Object thinking focuses our attention on the problem space rather than the solution space.

_David West_

* * *

> We comfort ourselves with the belief that if the customers had just been happy with what they said they needed, the design would have been fine. It’s the customer’s fault for changing the requirements on us.

_Robert Martin_

* * *

> There is an art to knowing where things should be checked and making sure that the program fails fast if you make a mistake. That kind of choosing is part of the art of simplification.

_Ward Cunningham_

* * *

> You cannot teach beginners top-down programming, because they don't know which end is up.

_Tony Hoare_

* * *

> Writing a class without its contract would be similar to producing an engineering component (electrical circuit, VLSI (Very Large Scale Integration) chip, bridge, engine...) without a spec. No professional engineer would even consider the idea.

_Bertrand Meyer_

* * *

> A cache with a bad policy is another name for a memory leak.

_Rico Mariani_

* * *

> The value of a prototype is in the education it gives you, not in the code itself.

_Alan Cooper_

* * *

> When someone says, "I want a programming language in which I need only say what I want done," give him a lollipop.

_Alan Perlis_

* * *

> Simple things should be simple, complex things should be possible.

_Alan Kay_

{% post https://dev.to/mcsee/code-smell-31-accidental-methods-on-business-objects-gpm %}

* * *

> Object-oriented programming increases the value of these metrics by managing this complexity. The most effective tool available for dealing with complexity is abstraction. Many types of abstraction can be used, but encapsulation is the main form of abstraction by which complexity is managed in object-oriented programming.

_Rebecca Wirfs-Brock_

{% post https://dev.to/mcsee/code-smell-21-anonymous-functions-abusers-47f5 %}

* * *

> Make it correct, make it clear, make it concise, make it fast. In that order.

_Wes Dyer_

* * *

> Indeed, the woes of Software Engineering are not due to lack of tools, or proper management, but largely due to lack of sufficient technical competence.

_Niklaus Wirth_

* * *

> Hackers are arrogant geek romantics. They lack the attentive spirit of inquiry.

_Bruce Sterling_

{% post https://dev.to/mcsee/code-smell-44-magic-corrections-4dpl %}

* * *

> If someone claims to have the perfect programming language, he is either a fool or a salesman or both. 

_Bjarne Stroustrup_

* * *

> Thinking is not the ability to manipulate language; it's the ability to manipulate concepts.

_Leslie Lamport_

* * *

> Programming is not about typing, it's about thinking.

_Rich Hickey_

* * *

> There’s nothing more permanent than a temporary hack.

_Kyle Simpson_

{% post https://dev.to/mcsee/code-smell-27-associative-arrays-2n7j %}

* * *

> The purpose of software engineering is to control complexity, not to create it.

_Pamela Zave_

* * *

> The purpose of computing is insight, not numbers.

_Richard Hamming_

* * *

> The trick is to fix the problem you have, rather than the problem you want.

_Bram Cohen_

{% post https://dev.to/mcsee/singleton-the-root-of-all-evil-50bh %}

* * *

> Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification.

_Bertrand Meyer_

* * *

> Software and cathedrals are much the same. First we build them, then we pray.

_Sam Redwine_

* * *

Software is a gas; it expands to fill its container.

Nathan Myhrvold

{% post https://dev.to/mcsee/code-smell-43-concrete-classes-subclassified-40fp %}

* * *

> 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

_Donald Knuth_

* * *

> I couldn't resist the temptation to put in a null reference, simply because it was so easy to implement. This has led to innumerable errors, vulnerabilities, and system crashes, which have probably caused a billion dollars of pain and damage in the last forty years.

_Tony Hoare_

{% post https://dev.to/mcsee/code-smell-12-null-la4 %}

* * *

> Simplicity is prerequisite for reliability.

_Edsger W. Dijkstra_

* * *

> Types are essentially assertions about a program.  And I think it’s valuable to have things be as absolutely simple as possible, including not even saying what the types are.

_Dan Ingalls_

* * *

> Before software can be reusable it first has to be usable.

_Ralph Johnson_

* * *

> 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.

_Alan Kay_

* * *

> The Scrum idea of a separated Scrum Master is good for Scrum, but not appropriate for most projects. Good development requires not just talkers but doers.

_Bertrand Meyer_

* * *

> Premature optimization is the root of all evil

_Donald Knuth_

{% post https://dev.to/mcsee/code-smell-20-premature-optimization-4moe %}

* * *

> When in doubt, use brute force.

_Ken Thompson_

* * *

> Any problem in computer science can be solved with another level of indirection.

_David Wheeler_

{% post https://dev.to/mcsee/code-smell-50-object-keys-2bd6 %}

* * *

> 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_

* * *

> Computer scientists have so far worked on developing powerful programming languages that make it possible to solve the technical problems of computation. Little effort has gone toward devising the languages of interaction.

_Don Norman_

* * *

> Developers are drawn to complexity like moths to a flame, frequently with the same result. 

_Neal Ford_

* * *

> In programming, the hard part isn't solving problems, but deciding what problems to solve.

_Paul Graham_

{% post https://dev.to/mcsee/code-smell-39-new-date-75g %}

* * *

> Walking on water and developing software from a specification are easy if both are frozen.

_Edward V Berard_

* * *

> The Diagram is Not the Model. The model is not the diagram. It is an abstraction, a set of concepts and relationships between them.

_Eric Evans_

{% post https://dev.to/mcsee/code-smell-47-diagrams-3ho7 %}

* * *

> The best performance improvement is the transition from the nonworking state to the working state. 

_J. Osterhout_

* * *

I’m not a great programmer; I’m just a good programmer with great habits.

_Kent Beck_

* * *

> 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.

_Donald Knuth_

* * *

> Architecture is the tension between coupling and cohesion.

_Neal Ford_

{% post https://dev.to/mcsee/code-smell-16-ripple-effect-3881 %}

* * *

> The role of a trainer or consultant is to empower the customer, not to make himself indispensable.

_Bertrand Meyer_

* * *

> It is very hard to predict, especially the future.

_Niels Bohr_

* * *

> A computer lets you make more mistakes faster than any other invention with the possible exceptions of handguns and Tequila.

_Mitch Ratcliffe_

{% post https://dev.to/mcsee/fail-fast-48dm %}

![Programming Languages](https://dev-to-uploads.s3.amazonaws.com/i/sc388xmiufillpr7zan1.jpeg) Photo by [Shahadat Rahman](https://unsplash.com/@hishahadat) on [Unsplash](https://unsplash.com/s/photos/programming-languages)

# Programming Languages

> 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.

_Niklaus Wirth_

* * *

> If debugging is the process of removing software bugs, then programming must be the process of putting them in.

_Edsger Dijkstra_

{% post https://dev.to/mcsee/code-smell-36-switch-case-elseif-else-if-statements-h6c %}

* * *

> More good code has been written in languages denounced as “bad” than in languages proclaimed “wonderful” — much more.

_Bjarne Stroustrup_

* * *

> Computers are good at following instructions, but not at reading your mind.

_Donald Knuth_

* * *

> 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.

_Alan Kay_

* * *

> There are only two kinds of languages: the ones people complain about and the ones nobody uses.

_Bjarne Stroustrup_

* * *

![Planning](https://dev-to-uploads.s3.amazonaws.com/i/hu1wis9y39owuuegjtgi.jpeg)

Photo by [You X Ventures](https://unsplash.com/@youxventures) on [Unsplash](https://unsplash.com/s/photos/planning)

# 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.

_John Carmack_

* * *

> 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.

_Fred Brooks_

{% post https://dev.to/mcsee/no-silver-bullet-320 %}

* * *

Subclasses shouldn’t always share all characteristics of their parent class but will do so with inheritance. This can make a program’s design less flexible. It also introduces the possibility of calling methods on subclasses that don’t make sense or that cause errors because the methods don’t apply to the subclass.

Steve Klabnik

{% post https://dev.to/mcsee/code-smell-37-protected-attributes-4n4 %}

* * *

> Programmers are as emotional and irrational as normal people.

_Douglas Crockford_

* * *

> There is nothing so useless as doing efficiently that which should not be done at all.

_Peter Drucker_

* * *

> You can mass-produce hardware; you cannot mass-produce software; you cannot mass-produce the human mind.

_Michio Kaku_

* * *

> Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization’s communication structure.

_Melvin Conway_

* * *

> Optimism is an occupational hazard of programming: feedback is the treatment.

_Kent Beck_

* * *

![Clean Code](https://dev-to-uploads.s3.amazonaws.com/i/mtivi2qu501qugyp8onv.jpeg) Photo by [Bench Accounting](https://unsplash.com/@benchaccounting) on [Unsplash](https://unsplash.com/s/photos/clean)

# Clean Code

> Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.

_John Woods_

* * *

> Successful software always gets changed.     

_Fred Brooks_

* * *

> Thinking about my experience of modifying code, I see that I spend much more time reading the existing code than I do writing new code. If I want to make my code cheap, therefore, I should make it easy to read.

_Kent Beck_

* * *

> If you have to spend effort looking at a fragment of code and figuring out what it’s doing, then you should extract it into a function and name the function after the what.

_Martin Fowler_

{% post https://dev.to/mcsee/code-smell-05-comment-abusers-2ba5 %}

* * *

> The nice thing about standards is that there are so many to choose from.

_Andrew S. Tannenbaum_

{% post https://dev.to/mcsee/code-smell-48-code-without-standards-2f5m %}

* * *

> It’s harder to read code than to write it.

_Joel Spolsky_

{% post https://dev.to/mcsee/code-smell-51-double-negatives-4fh0 %}

* * *

> Complexity kills.  It sucks the life out of developers, it makes products difficult to plan, build and test, it introduces security challenges, and it causes end-user and administrator frustration.

_Ray Ozzie_

* * *

> It is not the language that makes programs appear simple. It is the programmer that make the language appear simple.

_Robert Martin_

* * *

> We have to stop optimizing for programmers and start optimizing for users.

_Jeff Atwood_

* * *

> If you have three pet dogs, give them names. If you have 10,000 head of cattle, don't bother. Nowadays, the idea of giving a name to every file on your computer is ridiculous.

_David Gelernter_

{% post https://dev.to/mcsee/code-smell-45-not-polymorphic-388g %}

* * *

> Error handling is important, but if it obscures logic, it’s wrong.

_Robert Martin_

* * *

> When debugging, novices insert corrective code; experts remove defective code.

_Richard Pattis_

* * *

> A good programmer is someone who always looks both ways before crossing a one-way street. 

_Doug Linder_

* * *

> The cleaner and nicer the program, the faster it's going to run. And if it doesn't, it'll be easy to make it fast. 

_Joshua Bloch_

* * *

> Writing software as if we are the only person that ever has to comprehend it is one of the biggest mistakes and false assumptions that can be made.

_Karolina Szczur_

* * *

> The best smells are something that's easy to spot and most of time lead you to really interesting problems. Data classes (classes with all data and no behavior) are good examples of this. You look at them and ask yourself what behavior should be in this class.

_Martin Fowler_

* * *

> It's not at all important to get it right the first time. It's vitally important to get it right the last time.

_Andrew Hunt and David Thomas_

* * *

> Prolific developers don’t always write a lot of code, instead they solve a lot of problems. The two things are not the same.

_J. Chambers_

* * *

> Programs are meant to be read by humans and only incidentally for computers to execute.

_Donald Knuth_

* * *

> A programming language is low level when its programs require attention to the irrelevant. 

_Alan Perlis_

* * *

> This will surprise some of your readers, but my primary interest is not with computer security. I am primarily interested in writing software that works as intended.

_Wietse Venema_

* * * 

> You will fall to ruin because you believe that exceptions to the rule make new rules.

_Pierce Brown_

{% post https://dev.to/mcsee/code-smell-26-exceptions-polluting-pbn %}

* * *

> Every time you write a comment, you should grimace and feel the failure of your ability of expression

_Robert Martin_

* * * 

> Simplicity is the soul of efficiency.

_Austin Freeman_

{% post https://dev.to/mcsee/code-smell-29-settings-configs-3eh3 %}

* * *

> Programming can be fun, so can cryptography; however they should not be combined.

_Kreitzberg & Shneiderman_

{% post https://dev.to/mcsee/code-smell-06-too-clever-programmer-37lb %}

* * *

> So much complexity in software comes from trying to make one thing do two things.

_Ryan Singer_

{% post https://dev.to/mcsee/code-smell-34-too-many-attributes-584p %}

* * *

> Deleted code is debugged code.

_Jeff Sickel_

* * *

> Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

_Martin Fowler_

* * *

> The ratio of time spent reading (code) versus writing is well over 10 to 1 ... (therefore) making it easy to read makes it easier to write.

_Robert Martin_

* * *

>Any code of your own that you haven’t looked at for six or more months might as well have been written by someone else.

_Eagleson’s Law_

* * *

> One day my daughter came in, looked over my shoulder at some Perl 4 code, and said, "What is that, swearing?"

_Larry Wall_

* * *

> 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.

_Brian Kernighan_

* * *

> If you say “I told you so”, you are the one who has failed. Because you knew, but did not manage to stop the train wreck.

_Robert Martin_

* * *

>Some people, when confronted with a problem, think “I know, I’ll use regular expressions.” Now they have two problems.

_Jamie Zawinski_

* * * 

> Don’t comment bad code — rewrite it.

_Brian Kernighan_

* * *

> Code is like humor. When you have to explain it, it’s bad.

_Cory House_

* * *

> A long descriptive name is better than a short enigmatic name. A long descriptive name is better than a long descriptive comment.

_Robert Martin_

{% post https://dev.to/mcsee/code-smell-33-abbreviations-356o %}

* * *

> Talk is cheap. Show me the code.

_Linus Torvalds_

* * *

![Quality](https://dev-to-uploads.s3.amazonaws.com/i/oh63gu4v9le9eudjcoz0.jpeg)

Photo by [Raquel Martínez](https://unsplash.com/@fiteka) on [Unsplash](https://unsplash.com/s/photos/quality)

# Software Quality

> Legacy code is code without tests.

_Michael Feathers_

* * *

> Somebody will say they have a program that’s verified and it’s only verified because it met its specification according to some verifier.  But the verifier might have bugs in it. The specifications might have bugs in them

_Donald Knuth_

* * *

> The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time

_Tom Cargill_

* * *

> One man's crappy software is another man's full time job.     

_Jessica Gaston_

{% post https://dev.to/mcsee/code-smell-42-warnings-strict-mode-off-c4d %}

* * *

> The pesticide paradox. Every method you use to prevent or find bugs leaves a residue of subtler bugs against which those methods are ineffective.

_Boris Beizer_

{% post https://dev.to/mcsee/code-smell-30-mocking-business-3glm %}

* * *

I try to think mostly in terms of preconditions, and checking things in the constructor and the beginning of a function.

_Brad Fitzpatrick_

* * *

> Good software, like wine, takes time.

_Joel Spolsky_

* * *

> Pasting code from the internet into production code is like chewing gum found in the street.

_Mike Johnson_

* * *

> Discovering the unexpected is more important than confirming the known.

_George E. P. Box_

* * *

> Pay attention to zeros. If there is a zero, someone will divide by it.

_Cem Kaner_

* * *

> Beta testing is a symptom of weak testing practices and poor communication with customers

_Kent Beck_

* * *

> Beware of bugs in the above code; I have only proved it correct, not tried it. 

_Donald Knuth_

* * *

> The key to building a great product is building a great team first. To me, great teams aren’t bound by roles, but they’re driven by moving forward.

_Alan Page_

* * * 

> With tests, we can change the behavior of our code quickly and verifiably.
> Without them, we really don’t know if our code is getting better or worse.”

_Michael Feathers_

{% post https://dev.to/mcsee/how-to-squeeze-test-driven-development-on-legacy-systems-8m9 %}

* * *

> Correctness is clearly the prime quality. If a system does not do what it is supposed to do, then everything else about it matters little.

_Bertrand Meyer_

* * *

> A Perl program is correct if it gets the job done before your boss fires you.

_Larry Wall_

{% post https://dev.to/mcsee/code-smell-41-regular-expression-abusers-5gn0 %}

* * *

> As the Tests get more Specific, the Code gets more Generic.

_Robert Martin_

* * *

> Software testing is not only ensuring absence of bugs but also ensuring presence of value.

_Amit Kalantri_

* * *

> Quality is free, but only to those who are willing to pay heavily for it.

_DeMarco and Lister_

* * *

> Developer testing is an important step towards accountability. It gives developers a way to demonstrate the quality of the software they produce.

_Kent Beck_

* * *

> Nothing makes a system more flexible than a suite of tests.

_Robert Martin_

* * *

> As a rule, software systems do not work well until they have been used, and have failed repeatedly, in real applications.

_David Parnas_

* * *

> There are two ways to write error-free programs; only the third one works.

_Alan J. Perlis_

* * *

![Refactoring](https://dev-to-uploads.s3.amazonaws.com/i/wokp41x4ajg2ct9fskyd.jpeg)

Photo by [Kelvyn Ornettte Sol Marte](https://unsplash.com/@kelvyn) on [Unsplash](https://unsplash.com/s/photos/sorting)

# Refactoring

> 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.

_Martin Fowler_

* * *

![Object oriented](https://dev-to-uploads.s3.amazonaws.com/i/92ko00elyvzwls3xi04v.jpeg)

Photo by [National Cancer Institute](https://unsplash.com/@nci) on [Unsplash](https://unsplash.com/s/photos/cells)

# Object Oriented

> 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.

_Grady Booch_

* * *

> I invented the term ‘object oriented’, and C++ was not what I had in mind.

_Alan Kay_

* * *

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.

Original Thread on [Twitter](https://twitter.com/mcsee1/status/1303347397775560705)