Hacker News new | past | comments | ask | show | jobs | submit login
Bumper Sticker Computer Science (1985) [pdf] (bowdoin.edu)
231 points by kamaal 8 months ago | hide | past | web | favorite | 49 comments

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.

Don’t make the user provide information that the system already knows.... well, in several systems that I've worked on we "knew" several different versions of the information we were asking from the user. The question was : what did the user think right now. Truth... that's a different thing!

In that case, you could present all known versions and ask the user to simply select one instead of re-entering redundant information. Amazon, for example, remembers multiple mailing addresses and let's you select one (or enter a new address) when placing a new order.

>>Why can't the doctor's office, which already knows all of that, just print out 15 forms with all of that pre-populated?

Which brings us the principle:

Never ask a question whose answer you already know

If you know the answer already, why does the question exist on a form?

Because you don't know it for everyone.

The medical thing is an interesting cross-over though -- if a nurse walks into your hospital room because your name is on the outside and administers an injection that kills you because you were accidentally put in the wrong room, whose fault is that?

For the CS/programming side of it -- do you really know what you think you know? A smart form should let you put in house address and ZIP and look up the rest, but frequently developers think they know more than they actually do, and it's not a bad idea to have the user confirm or possibly override the information. Depends on the situation, really.


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

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.

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

> some proxy that your check is good

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

Hmm. I wonder if shady car dealers have ever abused approval of that form. That would be interesting to find out about.

Because, considering it sounds like you bought the car outright, there's absolutely no reason for that form to need signing.

Fun fact: Car dealerships are actually considered financial institutions under FinCEN regulations. Depending on the cost of the car/cash amount, they may need your SSN for reporting purposes.

No, they still do not. Banks don't even need your SSN...

> You are not required to have a social security number to open a checking or savings account.

Source: https://www.consumerfinance.gov/ask-cfpb/can-i-get-a-checkin...

“To open a checking or savings account, the bank or credit union will need to verify your name, date of birth, address, and ID number. An ID number can be a social security number or an Individual Taxpayer Identification Number (ITIN).“

Having spent more than a few years in FinTech, I know these things can vary from company to company as companies generally are required to design their own “risk-based” policies for AML and KYC.

"can be" not "must be". Driver License number or just about anything else is legal, it's just up to the bank whether or not they want to accept it.

What do you do if they say you have to fill it out? I realize it hasn't happened in your case, but it very well can to someone else.

Tell them that I'm undocumented and paying with cash?

(I'm not undocumented, but I imagine they see that enough which is why they don't bother saying anything when I leave it blank.)

I'm pretty sure they just want your SSN for collections/credit-reporting purposes.

I don't know the law in the US, but here your medical information is private so they legally aren't allowed to give it to others

Yet it happens, while this anecdotal. I know of a married couple that broke HIPPA and actively admitted they will be doing so. One was a pharmacist one was a doctor and it involved a couple of patients and herpes. I barely knew then and I should not have heard the information. They definitely should not have shared it even as husband and wife.

Every single time I wonder, why not ask me for zip first then lookup city and state if possible.

In the 80's I made a database routine to do just this - take a zip and turn it into a city - and as well, to go the other direction. I sold it to another software company for a rather fat amount of cash, and they used it to make their production-line data entry 80% faster. In the cases where it failed and produced wrong results, it was cheaper for them to ship me the dud records for correction in the database than it was to go back to the old way.

Yet still, today, its a very rarely encountered technique. I wonder if so much has changed in the Zip+4 world to make it an efficiency sink...

I wouldn't personally trust whatever service provides this lookup to be 100% accurate, especially because there's so many weird edge cases with addresses. If the user gets it wrong, at least it's their fault and not mine.

Healthcare is an abomination. If the will existed, the situation could be radically different, but it never seems to change. "Obamacare" was just another (effective) tax increase in disguise, like adding the fees for a new thing, but never actually changing the thing itself. Sheeple one and all.

Backwards paper systems serving the moneyed interests.

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.

Do you have a link to it for the Russians in the audience?


Is it publicly available? Can you please share it?

What's wrong with !important?

Succinct but pretty thorough - https://j11y.io/css/dont-use-important/

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

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.

What would you say are the biggest pain points?

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

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.

I googled "css specificity" and it autocompleted "calculator", which led me to https://specificity.keegan.st/.

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


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

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.

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.

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

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

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

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

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!

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.

Link to the podcasts you recommend

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.

"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) and how nobody cares about it yet

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact