
Programming Quotes - chauhankiran
http://quotes.cat-v.org/programming/
======
arethuza
Missing the Ninety-ninety rule?

 _" 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, Bell Labs

[https://en.wikipedia.org/wiki/Ninety-
ninety_rule](https://en.wikipedia.org/wiki/Ninety-ninety_rule)

NB There should probably be a 90-90-90-90-<recurring> rule... could called the
Y-90 rule!

~~~
Bekwnn
Probably because the "and the last 10 is the other 90" quote has existed
longer than programming has. It's borrowed.

------
corodra
"I should have run off with that hippie girl and started a homestead in
Alaska."

Me, every fucking time I look at code.

~~~
corodra
It is funny though. Look at all the physicists and mathematicians in that
quote list. Positive, enlightened, a little snark maybe, but generally, moving
things forward for the betterment of humanity.

All the programmers, "embrace the suck and the light at the end of the tunnel
is an oncoming train".

I picked the wrong career.

~~~
DesiLurker
As an software engineer, NO you did not (unless you actually suck at it). Part
of the problem with software dev as a profession is that often the people
responsible for resource allocation are out of touch and the overall process
is complex enough that you can acquire a lot of technical debt for a short
term gain. this makes bad managers look good while creating a lot of problems
in long term. Since acquiring technical debt does not really breaks anything
in short term its really hard to create a budget line item that allocates
resources to it. this continues until something gives and then you have a
crisis somebody can fix and take credit.

Until there are leaders 'woke' enough to proactively do the right thing I dont
see anything change in computing industry.

~~~
corodra
Lol, dude, I'm 31. I've been doing this for around 10 years now. And I'm
alright at it :P

Have you seen how happy homesteaders are?

On a serious note. I'm aware. That's why I did my own company with a friend.
It cuts a lot of bullshit out I don't have to deal with anymore. As
(essentially) a contractor, it's easy to tear people a new asshole in a
meeting and get away with it. I can't imagine an employee being able to.

First off, people need to stop worshiping the ilk like Jobs, Musk and Bezos.
They're just money makers. Just like Rockefeller, Morgan and Carnegie. None of
them are visionaries as all their ideas are easy to spot from history or other
people. Like the hyperloop... just about 80 years too late to call that one
unique. Ooooo you put colored pieces of plastic on a computer and made a small
digital music player. The Zune was WAY better! The other guy just sold books
and moved on to other shit. Congrates on the better mouse trap. But it's not
like they did it themselves.

Maybe a homestead on a tropical island... I like coconuts.

~~~
HiroshiSan
I think you're trivializing their accomplishments just a tad.

------
vram22
I like this one:

"Debugging a program is twice as hard as writing it in the first place. So, by
definition, if you write the program as cleverly as you can, you will not be
able to debug it."

\- (Maybe by) Brian Kernighan.

~~~
kps
… and/or P J Plauger.

“Everyone knows that debugging is twice as hard as writing a program in the
first place. So if you're as clever as you can be when you write it, how will
you ever debug it?” in _The Elements of Programming Style_ (p10 in the 2nd
edition).

~~~
vram22
Thanks.

I've heard that's a good book, as is _Software Tools_ by Kernighan and
Plauger.

------
justinpombrio
Missing what I think is the most important quote:

"Show me your flowcharts and conceal your tables, and I shall continue to be
mystified. Show me your tables, and I won't usually need your flowcharts;
they'll be obvious."

\- Fred Brooks

~~~
tasuki
My favourite as well!

------
osrec
> If you’re capable of understanding `finalised virtual hyperstationary
> factory class', remembering the Java class hierarchy, and all the details of
> the Java Media Framework, you are (a) a better man than i am (b) capable of
> filling your mind with large chunks of complexity, so concurrent programming
> should be simple by comparison. go for it.

> ps. i made up the hyperstationary, but then again, it’s probably a design
> pattern.
    
    
            — forsyth
    

\---

Reminds me of a great deal of programmers in the banking world, especially
those who used spring. Their software often failed, but their knowledge of
Java design patterns never did!

------
champagnepapi
“Walking on water and developing software from a specification are easy if
both are frozen.”

------
abarrak
I grouped XML quotes to share with my manager:

 _The essence of XML is this: the problem it solves is not hard, and it does
not solve the problem well._

    
    
            — Phil Wadler, POPL 2003
    

_XML is like violence: if it doesn’t solve your problem, you aren’t using
enough of it._

    
    
            — Heard from someone working at Microsoft
    

_XML is like violence. Sure, it seems like a quick and easy solution at first,
but then it spirals out of control into utter chaos._

    
    
            — Sarkos in reddit
    

_Most xml i’ve seen makes me think i’m dyslexic. it also looks constipated,
and two health problems in one standard is just too much._

    
    
            — Charles Forsyth
    

Nobody who uses XML knows what they are doing.

    
    
            — Chris Wenham

~~~
nerdponx
What are some _valid_ complaints about XML? I was talking to one of the older
IT guys at my company a while ago, and he was all about it because it made
serializing data structures very simple. I'm not sure if that's a valid use
case or an example of the kind of monstrosity that XML-haters hate.

~~~
derefr
If all you need to do is serialize data structures, we solved that problem 30
years ago—including all the schema-validation and querying stuff—with ASN.1
(and then re-solved it with Protobufs and Thrift, and solved it again in half-
assed manners with JSON, YAML, etc.)

XML is a markup format, a regularization/minimization of the syntax of SGML.
It's good at being a markup format—the paired named open+close tags allow for
corrupted-stream repair in a way that e.g. Markdown just doesn't. XML is great
in, say, DocBook.

But XML gets used for pretty much everything _except_ actual markup. And for
everything else, it's not solving those problems well.

------
hiccuphippo
Here's one I've seen around:

 _" Often a few hours of trial and error will save you minutes of looking
through manuals."_

~~~
falcor84
Seems to be a corollary of Frank Westheimer's "A couple of months in the
laboratory can frequently save a couple of hours in the library".

------
johnvega
Part of why I like Golang as I interpret beauty as readability.

"Beauty is more important in computing than anywhere else in technology
because software is so complicated. Beauty is the ultimate defense against
complexity."

    
    
            — David Gelernter

------
aard
One of my favorites:

"If you know what’s in it, you don’t know when it will ship. If you know when
it will ship, you don’t know what’s in it."

------
LargeWu
There's nothing more permanent than a temporary fix.

~~~
scandox
Basically all the really useful code I've written

------
petercooper
If you'd like to be drip fed stuff like this, we've been running a programming
quotes Twitter account for several years at
[https://twitter.com/codewisdom](https://twitter.com/codewisdom)

------
jeffwass
LOL, 40 years later and some things never change :

“The most effective debugging tool is still careful thought, coupled with
judiciously placed print statements.”

\- Brian W. Kernighan, in the paper _Unix for Beginners_ (1979)

------
tanklessmilk
This is fantastic. Whenever I'm at work, I always look at deltas on commits to
judge personal success. The more lines removed, the better!

> Deleted code is debugged code.
    
    
            — Jeff Sickel

~~~
bjpbakker
> The more lines removed, the better

I programmed Perl for a while so I like to make this more about _characters_
removed rather than lines :)

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

------
equalunique
Everyone post your favorites.

 _> What's wrong with perl?

It combines all the worst aspects of C and Lisp: a billion different
sublanguages in one monolithic executable. It combines the power of C with the
readability of PostScript.

> To me perl is the triumph of utalitarianism.

So are cockroaches. So is `sendmail'.

    
    
            — jwz [http://groups.google.com/groups?selm=33F4D777.7BF84EA3%40netscape.com]*
    
     ~ and ~
    

_If the designers of X Windows built cars, there would be no fewer than five
steering wheels hidden about the cockpit, none of which followed the same
principles – but you’d be able to shift gears with your car stereo. Useful
feature that. _

~~~
kps
> _but you’d be able to shift gears with your car stereo._

Many modern cars get pretty close.

------
belltyler
"If debugging is the art of finding bugs, programming must be the art of
creating them."

------
waynecochran
"Given enough thrust pigs will fly" \-- I will use this for my next code
review. Gold.

------
AdmiralAsshat
Missing the infamous "It compiles! Ship it!" quote.

~~~
gnulinux
For something like rust or haskell it's not outrageous. But yeah...

~~~
kazinator
It's not outrageous _to hear_ from a Rust or Haskell fanatic, in any case.

Given that a subtraction will easily compile where an addition should have
been coded, so the content of the remark is outrageous.

~~~
rspeele
I'm sure if you _just_ use the right experimental language extensions and
strangle your program under a mountain of indecipherable nonsense, performing
arithmetic at the type-level, you can trivially prevent that though!

~~~
gnulinux
> arithmetic at the type-level

See, the whole type-level and value-level is a false dichotomy, that's the
whole idea behind dependent types. There shouldn't be a difference between a
type and a value.

~~~
kazinator
A (data) type is a set, and a value is an element in that set. So you're
arguing that set versus element is a false dichotomy, which is preposterous.
Even a set which contains just one element is still distinct from that element
itself.

Rather, the whole idea behind dependent types (if dependent types can be
glibly summarized by a "whole idea") is that logical predicates give rise to
sets. E.g. "all integers that are squares" or "prime numbers". Or all points
<x, y> such that x^2 + y^2 <= r^2.

A proposition is not the same thing as the domain of that proposition's
parameters; but it does denote a subset of that domain.

A dependent type can contain a large number of values and that will often be
the case.

If we have a situation in the program where we must calculate a value that is
the member of some dependent type that contains billions of values, and only
one values is correct, there is the threat that we can calculate the wrong
value which is still in that set. That dependent type will not save our butt
in that case.

We have to isolate the interesting value to a dependent type which only
contains that value. "correct value" is synonymous with "element of that set
which contains just the correct value".

Still, that doesn't mean that the set is the same thing as that value.

A big problem with dependent types is that if the propositions on values which
define types can make use of the full programming language, then the dependent
type system is Turing complete. This means that it has its own run-time; the
idea that the program can always be type checked at compile time in a fixed
amount of time has gone out the window. Not to mention that the program can
encode a self reference like "My type structure is not correct". If that
compiles, then it must be true, but then the program should not have compiled
...

~~~
joel_ms
> A (data) type is a set, and a value is an element in that set.

Nope, a type is not a set. Type theories are separate formal systems designed
to be (among other things) computationally aware alternatives to set theory,
and they are defined by "terms", "types" and "rewrite rules". The whole point
of a dependent type theory is to be able to encode things like sets and
propositions in the same formal system.

The rest of your comment is wildly off based on this misunderstanding.

What the GP was probably referring to is the persepctive of dependent types
from the lambda cube, where you have three different extensions to simply
typed lambda calculus's regular functions from value to value:

    
    
        1. Parametric polymorphism, which are functions from type to value
        2. Type operators, which are functions from type to type
        3. Dependent types which are fubnction from *value to type*
    

Since dependent types allows functions from value to type, it kinda erases the
artificial barrier between type-level and value-level. In reality it doesn't
really erase it, somuch as replace it with an infinte hierarchy of levels to
avoid Girrard's paradox.

------
spion
Ah, quotes, the method of taking wisdom out of context and greatly increasing
the chances of incorrect interpretation. The ancient form of twitter.

~~~
olooney
"Epigrams are more like vitamins than protein." \- Alan Perlis

------
chewzerita
> {ajh} I always viewed HURD development like the Special Olympics of free
> software.

yikes

------
Jun8
Obligatory list of some good quotes that are not included:

Rules of Optimization: Rule 1: Don't do it. Rule 2 (for experts only): Don't
do it yet. \- M.A. Jackson

Never test for an error condition you don't know how to handle. \- Steinbach

Choose mnemonic identifiers. If you can't remember what mnemonic means, you've
got a problem. \- perldoc perlstyle

Every program has (at least) two purposes: the one for which it was written,
and another for which it wasn't. \- Alan Perlis

Should array indices start at 0 or 1? My compromise of 0.5 was rejected
without, I thought, proper consideration. \- Stan Kelly-Bootle

~~~
andrepd
>Rules of Optimization: Rule 1: Don't do it.

Well that explains the modern web, and a great deal of modern software.

~~~
paedupeax
There is a huge difference between not optimizing (say, purge formatting white
space from HTML) and putting out five megabyte of JavaScript junk for static
website.

~~~
hoppelhase
Well, optimization could also mean to remove unnecessary JS.

~~~
cakebrewery
I think removing unnecessary code and generalizing redundant parts should be a
given. On the other hand, early optimizations such as caching or in-lining
should be avoided unless needed.

------
yesenadam
That's a great collection! Thank you.

~~~
yesenadam
Downvoter, please get a life. It's hard not to feel soured by such miserable
gestures as yours. Mine was the first comment on here, I thought maybe there
wouldn't be _any_ comments - it was a great collection and I wanted people to
check it out, and express my gratefulness; not sure what else I should've
done. I guess I should just accept that such spiteful downvotes happen, but
it's shame. Maybe you wouldn't even have seen the page had I not upvoted and
commented...

------
f2f
Pity the list isn't updated anymore, or uriel would've sure put these gems by
Charles Forsyth in it:

 _[B]y treating "compiling C" as a subset problem of "compiling C++", gcc and
especially clang are vast whales whistling at the wrong frequency for the
problem._

 _Plan 9 C implements C by attempting to follow the programmer’s instructions,
which is surprisingly useful in systems programming. The big fat compilers
work hard to find grounds to interpret those instructions as ‘undefined
behaviour’._

~~~
nerdponx
It is interesting that compilers try to be so damn smart. Is -O0 still not
faithful enough to the programmer's instructions?

~~~
derefr
Often the generalized parsing/lexing/codegen/etc. algorithm that exists in
service of -O1 through -O3 can be turned "down to a trivial level" with -O0,
but not "off"—as that would require an entirely separate code-path.

------
rypskar
I could not find one of mine favorites The two hardest things in programming
are: 1\. Naming variables 2\. Cache invalidation 3\. Off by one errors

------
dahart
For the sinner deserves not life but death, according to the disk devices. For
example, start with Plan 9, which is free of sin, the case is different from
His perspective.

    
    
            — Mark V. Shaney
    

Hey, that one’s a bot.

I’m also trying to figure out what’s left if you take out all the “avoid
complexity” and “avoid XML” quotes...

------
canhascodez
There's a lot of negativity here. A lot of these quotes seem to offer more
heat than light.

~~~
emmanueloga_
I believe a more appropriate noun is "contempt" :-)

I found this page [1] some time ago, maybe someone can find some good quotes
in here but the page is kind of long and heavy and not super quotable, maybe
some of you will find some gems in there.

Top of the page is Xah Lee, a lovable, and sometimes a bit weird, cranky
master of contempt:

    
    
        > The basis of computer languages' merit lies in their mathematical properties.
        > It is this metric, that we should use as a guide for direction.
        > As an analogy, we measure the quality of a hammer by scientific principles:
        > ergonomics, material (weight, hardness. . .), construction, statistical
        > analysis of accidents/productivity/… …etc., not by vogue or lore.
        > If we go by feelings and preferences, hammer's future will deviate
        > and perhaps become dildos or maces. (Xah Lee in comp.lang.lisp, July 2000)
    
    

I think Xah is cranky but many times on to something. For instance, point 6 in
his list of "Python Doc Idiocies" [2] is hard to disagree with :-).

1:
[http://www.schnada.de/quotes/contempt.html](http://www.schnada.de/quotes/contempt.html)

2:
[http://xahlee.info/python/python_doc_index.html](http://xahlee.info/python/python_doc_index.html)

P.S.: if you enjoy Xah's writing you should pay for his excellent emacs manual
[3]. It is actually openly available but he accepts contributions.

3:
[http://ergoemacs.org/emacs/buy_xah_emacs_tutorial.html](http://ergoemacs.org/emacs/buy_xah_emacs_tutorial.html)

UPDATE: he actually has a Patreon account too! [4]

4: [https://www.patreon.com/xahlee](https://www.patreon.com/xahlee)

~~~
canhascodez
I don't value contempt. I don't think that contempt is strongly associated
with programming or computer science. I would consider that to be a problem. I
can't condone the expression of contempt in the public discourse related to
computer science. I do not typically have much free money for donations, but I
would on principle refuse to financially support contempt. I would wonder that
anyone would consider that a positive trait. I certainly think that this
attitude would discourage newcomers to the field, and I think it's worth
working to promote a different image and mindset.

~~~
emmanueloga_
I'm not suggesting that you support "contempt", but the person behind the
writings, and only if you enjoy the writing style.

Also, Xah also has all sorts of other documents were he carefully tries to
avoid the mistakes he criticizes in other documents, and were contempt is not
the main driver. I'm sure he spent countless hours writing those materials and
he's made those documents available for absolutely free! [1]

The best intellectual and artistic endeavors are deeply flavored by the
emotions of their authors, which gives the works a measure of authenticity. I
personally can appreciate that, the same way I can also appreciate a lot of
forms of dark humor.

Also, I'm OK with others not sharing that appreciation.

1:
[http://xahlee.info/comp/comp_lang_tutorials_index.html](http://xahlee.info/comp/comp_lang_tutorials_index.html)

------
brudgers

      You can't build an airplane from bricks.
        -- Steve McConnell, *Code Complete*

------
carapace
"CS can be described as the post-Turing decline in the study of formal
systems."

I don't know who said it originally.

------
gnulinux
> A data structure is just a stupid programming language.

> — R. Wm. Gosper

What's this supposed to mean?

~~~
JadeNB
One interpretation: I think there's a dictum (due to Dijkstra, maybe?) that
says something like programming = data structures + algorithms. If you remove
the 'algorithms' part, then you're left with data structures on the right,
and, presumably, an impoverished programming language on the left.

~~~
samatman
Algorithms + Data Structures = Programs is a book by Niklaus Wirth.

~~~
JadeNB
Thanks! Wirth was going to be my second guess. For some reason, possibly
because I had the order switched (or because the '+' itself, rather than just
the words, is key to the phrase), I couldn't find the phrase by Googling.

------
napoleonIV
This is an absolute gem.

