
Bumper Sticker Computer Science (1985) [pdf] - kamaal
http://www.bowdoin.edu/~ltoma/teaching/cs340/spring05/coursestuff/Bentley_BumperSticker.pdf
======
reaperducer
It's amazing that 33 years later, nearly all of these still apply. And nearly
all are mistakes that are still being made.

Theses gems stuck out for me:

 _Eighty percent of all input forms ask questions they have no business
asking._

 _A procedure should fit on a page._

And especially: _Don’t make the user provide information that the system
already knows._

This happens all the time, especially in e-commerce. And even moreso in paper
form. For example, every time I go to a new doctor, I have to fill out 15
forms and 15 times I have to write down my name, address, SSN, insurance id,
etc... Why can't the doctor's office, which already knows all of that, just
print out 15 forms with all of that pre-populated?

Somewhat related: We build so many input forms demanding people provide data
to the computer in a form that the computer can immediately read. The computer
should work for the user, not the other way around.

Example: The FCC's Do Not Call web site has notes on its input fields that
phone numbers have to be entered as numbers only. No dashes, parentheses,
etc... How about the web site take whatever is input and strip out anything
that's not a number? So basic, but I see this all the time.

~~~
Casseres
> every time I go to a new doctor, I have to fill out 15 forms and 15 times I
> have to write down my ... SSN

No you do not.

Anecdotal: I always leave that field blank and have never been asked for it.

Anyone can ask you for anything, anywhere. It doesn't mean they actually need
it, or that you have to give it to them.

~~~
otp124
I 100% agree.

I went to a dealer to buy a car in cash (well, a cashier's check). They had a
touch-screen computer with all their forms for me to fill out. It came to a
credit approval/application form, and I refused to fill it out because I
wasn't opening a loan. The lady assured me it was "standard" and that it
wouldn't be used for anything, because I didn't need the loan/credit. I kept
refusing, and she kept insisting they only needed it because the software
required it to continue. After this impasse, I stood to walk out, and she
suddenly changed her tune and somehow "figured out" how to bypass the form.
Classy.

~~~
lscotte
Even if you pay cash, a dealer may require a credit check, however you have no
obligation to provide any financial details. I think they just want to make
sure your credit is good enough for some proxy that your check is good. I've
also heard it's for identity purposes. Also, this all might vary by state
laws, too...

~~~
niij
> some proxy that your check is good

That's why they had a cashier's check and not a personal check.

------
icebraining
Here's in HTML form: [http://quotes.cat-v.org/programming/bumper-sticker-
computer-...](http://quotes.cat-v.org/programming/bumper-sticker-computer-
science)

------
hkai
Some Russian people I know started a project that gives random obvious advice,
along with a profanity to make you pay attention.

Examples include:

\- change your damn passwords!

\- reset the damn cache!

\- say no to your damn project manager!

\- use the damn frameworks!

\- stop creating the damn global variables!

\- don't use the damn "!important"!

They've assembled a database of probably a few thousands of those wisdoms for
different industries and it's truly entertaining. They've added an API too.

Sadly it's not in English.

~~~
jimmaswell
What's wrong with !important?

~~~
coldtea
It's an exceptional bypass, so if you use it frequently, it means you didn't
get the base class design right.

~~~
freehunter
Case in point, I extensively use !important in the very rare situation I'm
doing front-end work, because I struggle immensely with CSS and can never seem
to get it to render properly. And in almost every situation, !important leads
to more problems than it solves. Yet I keep doing it, because I fundamentally
don't understand CSS.

If you use !important, you either understand CSS very well, or don't
understand it at all.

~~~
exikyut
What would you say are the biggest pain points?

Someone probably knows of a targeted resource or two that may help.

~~~
freehunter
I think honestly my biggest problem is just lack of familiarity. I don't do a
lot of front-end work, and when I am doing front-end work it's probably a side
project that I'm not getting paid for. If I'm working on my own time, the
back-end stuff is more interesting to me so I spend as little time as possible
on front-end.

Order of precedence is the hardest thing for me to figure out, if I have three
nested <div>s and a couple of <li> elements and all of them with a conflicting
fontColor property, which one takes precedence? If I think really hard and
trace back all the code, I can figure it out. Or I can put an !important on it
and future me will deal with the consequences.

~~~
exikyut
I googled "css specificity" and it autocompleted "calculator", which led me to
[https://specificity.keegan.st/](https://specificity.keegan.st/).

You can paste in a series of selectors (getting new boxes by clicking
"duplicate"), then hit "Sort by specificity".

------
pasbesoin
From TFPDF:

"If you lie to the computer, it will get you."

From my observation at work, I'd change this to:

"If you lie to the computer, it will let you."

Lots of people who take computer output as gospel. They never get, GIGO.

~~~
freehunter
I think the original comment was the natural extension of "it will let you".
Yeah, it will let you, and you might not notice. And then a week later, a
month later, suddenly something doesn't work right. There's no immediate cause
for the error you're seeing. The debug output isn't pointing to anything
you've worked on recently. Why isn't this working? The change you just made is
absolutely flawless. But it calls a function you wrote last month and forgot
about, and that function is wrong.

It let you lie to it, and then it got you.

------
chestervonwinch
I enjoyed:

> [Conservation of Code Size] When you turn an ordinary page of code into just
> a handful of instructions for speed, expand the comments to keep the number
> of source lines, constant.

------
microtherion
I remember that column. I was always particularly fond of the first bumper
stickers cited "π seconds is a nanocentury"

------
olooney
A few of my favorites, not found in the linked article:

"There are two ways of constructing software. One way is to make it so simple
that there are obviously no deficiencies. The other is to make it so complex
that there are no obvious deficiencies." C.A.R. Hoare

"The purpose of software engineering is to control complexity, not to create
it." Dr. Pamela Zave

"The most important single aspect of software development is to be clear about
what you are trying to build." Bjarne Stroustrup

"The cardinal sin is to make a choice without knowing you are making one."
Jonathan Shewchuk

"Good code is short, simple, and symmetrical - the challenge is figuring out
how to get there." Sean Parent

"The ability to simplify means to eliminate the unnecessary so that the
necessary may speak." Hans Hoffman

"Any intelligent fool can make things bigger, more complex, more violent. It
takes a touch of genius - and a lot of courage - to move in the opposite
direction." Albert Einstein

"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 features that don't fight each other." John Carmack

"If we'd asked the customers what they wanted, they would have said, "faster
horses." Henry Ford

"What I cannot create, I do not understand." Richard Feynman

"Such is modern computing: everything simple is made too complicated because
it's easy to fiddle with: everything complicated stays complicated because it
is hard to fix." Rob Pike

"A program is a poem: you cannot write a poem without writing it. Yet people
talk about programming as if it were a production process and measure
"programmer productivity" in terms of "number of lines of code produced." In
doing so they book that number on the wrong side of the ledger: We should
always refer to "the number of lines of code spent." Edsger Dijkstra

"As a programmer, it's your job to put yourself out-of-business. What you can
do today can be automated tomorrow." Doug Mcilroy

"The whole point of getting things done is knowing what to leave undone."
Oswalf Chambers

"Simplicity is hard to build, easy to use, and hard to charge for. Complexity
is easy to build, hard to use, and easy to charge for." Chris Sacca

"Knowledge is a process of piling up facts. Wisdom lies in simplification."
Martin Luther King, Jr.

"Measuring programming progress by lines of code is like measuring aircraft
building progress by weight." Bill Gates

"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 Kernigham

"It ain't what you don't know that gets you in trouble. It's what you know for
sure that just ain't so." Josh Billings

"Be careful that victories do not carry the seeds of future defeats." Ralph
Stockman

"The most effective debugging tool is still careful thought, coupled with
judiciously placed print statements." Brian Kernigham

"Controlling complexity is the essence of computer programming." Brian
Kernigham

"Simplicity is prerequisite for reliability." Edsger Dijkstra

"...but there is one quality that cannot be purchased that way - and that is
reliability. The price of reliability is the pursuit of the utmost simplicity.
It is a price which the very rich find most hard to pay." C.A.R. Hoare

"UNIX is simple. It just takes a genius to understand its simplicity." Dennis
Ritchie

"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-users and administrators frustration." Ray Ozzie

"A charlatan makes obscure what is clear; a thinker makes clear what is
obscure." Hugh Kingsmill

"Fools ignore complexity, pragmatists suffer it. Some can avoid it. Geniuses
remove it." Alan Perlis

~~~
Gibbon1
> "The purpose of software engineering is to control complexity, not to create
> it." Dr. Pamela Zave

Them: We need to add this feature for completeness.

Me: We do not need that feature to ship and make money.

Them: If we don't we're creating technical debt!

Me: You want to create a feature that needs to be maintained that isn't used
in production. That's worse.

Them: It won't be finished until this feature is added.

Me: The program will never be finished.

Them: You're being unnecessarily difficult.

^^ conversation last week.

------
opnitro
One I always liked: weeks of programming can save hours of planning.

------
pacaro
OMG I remember this being passed around in the late 80s early 90s but I lost
my copy long ago. Thank you for finding this gem!

------
ehudla
I've recently become fond short 2-5 minute podcasts as part of my daily
routine, which makes me think that a short, 3 minute, daily podcast consisting
of one "bumper sticker" plus maybe a little explanation or an example is
definitely something someone should produce.

~~~
samstave
Link to the podcasts you recommend

~~~
ehudla
Alas, most short ones I find are too long (~10 min). Really short: Stoic
Meditations; Le Mot du Jour. Planet Money indicator is longer but still short
enough to listen to (1.5 speed...) while shaving.

------
invalidusernam3
"Allocate four digits for the year part of a date: a new millenium is coming"

Interesting that people were aware about the Y2K problem 15 years before, but
it still required so much work to correct. I guess it's kind of similar to the
Year 2038 problem
([https://en.wikipedia.org/wiki/Year_2038_problem](https://en.wikipedia.org/wiki/Year_2038_problem))
and how nobody cares about it yet

------
dang
Discussed in 2014:
[https://news.ycombinator.com/item?id=8676982](https://news.ycombinator.com/item?id=8676982)

