A curated list of falsehoods programmers believe
github.com
github.com
You can get 95% with no effort at all, 99% with a bit of thought, 99.9% with some effort, 99.99% with a smart design, some research, and a lot of effort, and anything further requires making it your full-time job indefinitely.
It gets thornier when it comes to personal things like names and gender. If you tell a group of people that their identity isn't supported by your system, some people will accept that and work around it, some people will be mad at you, and you'll just have to accept that the latter have a good point. You have to stop developing it at some point, so all you can do is try to cover as many people as possible.
That said, it is incredibly revealing of your personal biases if you design a system that breaks on things like names with "é", or "ñ", or punctuation; or if you implement gender as a boolean that also determines the user's pronouns.
Accents and punctuation are different. There are a lot of English-speaking people whose names don't fit in ASCII. A system that doesn't support them is at the "95% for no effort" stage, if even that.
It's the difference between making a mistake, and getting defensive that it wasn't a mistake. Per old systems, they all fall under bias; it's only with how do the existing support personnel deal with it that you start looking at bigotry, a "I'm sorry, I know, it's just an old system and we don't have the money to update it" is totally understandable and I would argue okay. Digging in that it's not the system that is at fault but the individual wanting a different pronoun, or the person refusing to pick an anglicized name and start using it everywhere, is bigoted.
I think that definition is pretty good, but it also reveals something about the popular usage of the term "bigot".
IIUC, an underlying assumption in the parent comment is a person is at fault for not accommodating the offended party's preferred taxonomy / categories / terminology. That a person is a "bigot" if they see their system's current taxonomy as better or more appropriate.
Merriam-Webster's definition is somewhat different [0]: "a person who is obstinately or intolerantly devoted to his or her own opinions and prejudices".
Note that with MW's definition, either or both persons in that "you missed it" conversation could be labelled a bigot, depending on how obstinately they held onto their views.
What I mean is having reached a conclusion without consideration of all the relevant details. I.e., deciding a matter prematurely. I think this lines up pretty well with the MW definition [0].
I don't see how that's related to the particular opposing stances in your example. Can you elaborate?
What are the relevant details when choosing your own preferred pronouns? Wouldn't all the relevant details be known by the person making the decision? I don't see how that can be prejudice.
I had a different scenario in mind: person A indicates their preferred pronouns to person B, but person B refuses to use those pronouns for well-considered reasons and with a full understanding of the situation. It's this scenario that I was arguing to not be a case of bigotry nor prejudice.
So, yes, "justifiable", as in, "to change that in the system would be a lot of cost and risk and we simply can't justify it, but I agree it sucks that it's that way", not as in "You were assigned male at birth and I refuse to use anything other than he/him when referring to you, because I believe I understand the science, and your personal situation, better than you".
In general, as a singular gender neutral third person pronoun for a person of unknown, unclear, or unspecified gender, they/them is approximately as old as modern english itself, having been clearly used by one of the earliest practitioners of the language, Shakespeare.
What's modern is the idea that it's somehow incorrect to have a pronoun that is both plural and singular, which is funny because 'you' is both singular and plural and people use it every day without incident or confusion.
Use for a person of known but not-binary gender is newer than that, but probably older than you think, and neopronouns are actually probably also quite a bit older than you think too.
Growing up, though, I was taught to use "he or she" / "she or he" in English class and they/them was always used in the context of third person plural. I don't consider it a newfangled thing, but the embrace of it feels new.
I do know that realistically something like that would never catch on, but I can dream...
I think the bigger problem is coming up with an accepted alternative; there are several floating around, none of which have had a Ms. magazine moment.
I think that is an unfair accusation.
I've been coding for over 20 years, and I have only had to enable UTF8 to cover all corners of use cases (web based data/content) to special characters. I work with companies in multiple foreign countries, and my biases are irrelevant to technically working systems.
This is where the accusation crosses into unreasonable for me.
Could there also be bias in the statement "ASCII is not good enough."?
Where in the alphabet does "ö" or "aa" go? Well, it depends on the language AND the word.
Is ø the same as ø? Unicode can encode it in 2 different ways, so you need to normalize all encoding before comparing.
Is ø the same as o when searching? For Americans it is, for others not.
Never implemented a search function?
These aspects can easily creep into an app without you even noticing. Saying "I haven't seem them" is not proof for them not being there.
E.g. web servers had some surprise security bugs because they didn't think about overly long utf-8 codes.
I implemented single fields for personal names, single textareas for addresses and some very basic content format selections and collation and my simple solutions have solved _all_ of my customers needs in these areas.
It seems to be some bizarre assumption that _everyone_ has a bad experience because some code wasn't done they way they would do it. It's absurd to be accused of something that has simply not been a problem for my users.
> Outside of medicine sex is rarely significant
Frankly, even inside of medicine it's usually not terribly relevant, and is often a poor proxy for the information they really want out of it. Half the time a medical form asks you that it's literally just so that cis men won't get mad at you for asking if they're pregnant on a later step.
I won't be at all surprised if I get some kind of kneejerk reaction to this statement suggesting that it might be important in an emergency or something, but for the most part that's not really the case, and even where it is, if it's that important (ie. allergy level), it's not sufficient to avoid harm because you will have situations where neither "sex" or "gender" as commonly formulated on these forms will tell you what you really need to know (hormone balance, organ configuration, medical history). Any one of those could be out of alignment with whichever social construct of sexed traits you pick.
Sex is incredibly important inside medicine. It's probably the most important distinguishing characteristic when determining how to diagnose and treat someone (maybe weight is more).
Here are a few examples:
- 99% of breast cancer occurs in women
- any diseases affecting the female[male] reproductive systems can only impact women[men]
- 4x as many women suffer from osteoporosis
- Roughly 70% of those living with autoimmune diseases are female
- stomach cancer (2:1 men) oesophageal cancer (3:1 men) liver cancer (2:1 to 4:1 men)
These are statistical differences. If you want to know if they apply to an individual you need to know more. A checkbox on a form is not sufficient.
If you're usefully aggregating data for some purpose, say for a study, then go off ask all the relevant indicators you want.
If it's an intake form for an eye doctor appointment, it won't tell you dick all. If a patient came in for a breast exam, you already know they're at risk of cancer. If you're their family doctor figuring out risk factors, you already know their medical history.
And if they're trans or intersex, and you're assuming that either their assigned sex or their self-declared gender tells you which bucket they fall in, you know a lot more than anyone else about how those traits affect those things because they are woefully understudied, and almost certainly complicated by literally everything in their medical history.
Where are you getting your information?
Results: Sex and sex hormones influence the lacrimal system, eyelids and blinking, corneal anatomy and disease, aqueous humor dynamics and glaucoma, crystalline lens and cataract, uveitis and retinal disease, ocular circulation, and optic nerve anatomy and disease. Systemic conditions, particularly autoimmune disease, and conditions that are unique to women, such as pregnancy and menopause, further illustrate the effects of sex hormones on the eye. Gender-based differences in ocular conditions and disease should be considered within the context of the underlying physical and social environment.
Like, I don't think the world would be better if we routinely gave cismen pregnancy tests, would it?
Likewise, asking a cis man if he is or might be pregnant should not be a horrible thing to do, nor a problem for record keeping, though like I alluded to in my initial reply here, it does sometimes cause confusion or even confrontation to ask them.
So, whether they 'need' gender or not, many places 'want' gender.
It is probably revealing of your personal biases that you cannot imagine systems in languages other than English that need to do some of this since multiple parts of the language, including verbs, are necessarily gendered, with a neutral gender usually only reserved for inanimate things. Reference: I happen to speak one such language.
Problems like this are just hard due to generations of built-up cultural context and the associated effects. We can and should do better, but there is no need to get overly enthusiastic about accusing people of biases while we are at it.
To make things short and somewhat anonymous, we had several systems that couldn’t handle people changing the “gender” of their social security number. They could handle you getting a new social security number, but it had to be of the same “gender” as your previous.
This makes no real sense, as it’s just a number and all these systems handle both types of numbers. But there we were, and it took us several years to get to a point where we could accommodate an employee changing the “gender” of their social security number.
So sometimes, developers do weird things because of their assumptions.
Ps. I’ve put “gender” in “”s because I’m unsure what the right word is in English.
Yeah, I only considered English language sites, not other languages that don't support gender-neutrality as easily. I think I should add something about them, though. I don't see how any language could possibly require gender to be implemented as a boolean. If you've got an English-language site you're translating to another language, and you've implemented a selector for "he", "she", and "they" pronouns without direct reference to gender in the English version, you could just re-use the same implementation in your language with different options.
(Also, I can guarantee that there's someone who speaks your language that prefers to be referred to in the neutral/inanimate form. Doesn't matter which language. It's fine not to support that on the site, just wanted to point it out.)
In the case of name, I read an article sometime back that mentioned the problem of getting people's fullname right. Not everyone has a "first name" and a "last name" distinction. So it is better to just have one field of "fullname" and let people enter it as per their locale and tradition instead of having "first name" and "last name" fields. I think gender also falls in the same category.
https://www.kalzumeus.com/2010/06/17/falsehoods-programmers-...
People make mistakes. I think you're opening a can of worms if you try to conflate a lack of robustness in user experience accessibility with some underlying anti-inclusivity bias.
That’s a pretty big if, which itself reveals a bias. While it’s certainly not going to cover every single identity, the following will likely cover vastly more than added effort:
1. Do you need to ask for the data at all?
2. If 1, do you need to require the data?
3. If 1, unless you have to comply with arbitrary external requirements (eg law), use a free form text field.
4. Test that the text field and accompanying information is accessible to assistive tools. This usually comes for free if you use built in tools.
5. If not 2, affirmatively indicate that entering anything is optional.
6. Ask for feedback on how you can do it better, again making this obviously optional. If the feedback is meaningful (i.e. “I cannot use this”, rather than “I would prefer this be less inclusive”), accommodate it.
No, these "awesome" lists are seldom curated. They are just dumps of hundreds or thousands of links.
This is in no way a list of falsehoods, there is not a single one in the repository. It is a dump of links to other people's articles about falsehoods (or other people's dumps of links to others). I am surprised why they would claim that, maybe they copied another "awesome list" template?
Avoiding all these assumptions will introduce unacceptable complexity for many projects. In many of the listed cases, making the assumption will require a tiny fraction of your addressable market to use a workaround, which they are likely already used to using with other products.
So there is a cost-benefit study to be done here. You have finite engineering time. Which of these assumptions can you avoid with little net increase in complexity? Which ones are actually simplifying? Which ones will cause critical problems for your users? And which ones are too expensive to fix given the return on investment?
I think the content of lists like this are decently useful, but the tone is condescending and unwarranted. I don't "believe" that everyone has a first middle and last name. I do believe that people with fifteen names are capable of leaving out some of the ones in the middle, and it makes my job a lot easier to require them to do so.
Everytime you assume something about a standard, you are making it a tiny bit more true. Before boarding the enterprise together, we will have agreed on a more concise version of what a name/address/email/time is.
Sure, if you handle it gracefully and give them ample space to squeeze their names onto one field and your system not making fuss about it. People that tend to have fiften names also tend to come from areas that may use accented characters, have suffixes and thus spaces in their names and have other weird combinations:
Cristina Fernández de Kirchner, Manuela Maria Lopez Sanchez de Chacon, Juan Carlos Vargas Blanco (given name is Juan Carlos, not Juan), Carla Rodriguez y Calderón (both Rodriguez and Calderón are last names)
In my anecdotal experience from having lots of friends with non-ascii letters in their names there are surprisingly many websites and software that will fail to take into account some or all of those things. And then there are cultures where surname is not necessarily a thing. If you're adamant that users "can leave out" or butcher (because you don't accept Ü or Ł) their names because it's convenient to you then you're creating hard to predict problems for the user. Quite common is to accept all characters but then silently converting them for "convenience" before storing and then use those names next time instead of what the user entered, so that poor Łukasz would have to know to use Lukasz next time without nobody telling him.
I was not aware of this form until I moved to New Mexico several years ago. I had a hyphenated name earlier in life, and have come to think of this as a (roughly) Spanish equivalent of that.
If you can't/don't handle Ortiz y Pino in New Mexico, several fairly powerful people are going to be pretty pissed off! And that's still within the borders of the USA.
A normal email address exactly has one @ character. There is an infinite number of possible weird things everyone has little though non-zero chance to encounter on every corner of their life.
> therefore your implementation should allow this
I wouldn't be sure it should. Implementing support for this has direct and indirect, explicit and implicit costs one will have to consider and decide if that's worth it.
In fact, whatever a human can believe about the world, it won't equal what actually is. So we just take decisions about how precise our models have to be to be practical.
You can never finish a program if you insist it has to be perfect and unbreakable. The only reasonable objective is to make sure it does the job 99.9 % of real-life times.
One of the oldest can be found at http://isemail.info/about, (along with a test suite to write your own implementation and some sage advice about the basic approaches it's reasonable to take when validating email addresses).
Yes, dependencies aren't completely free conceptually, even when they're distributed free of charge, but why write a crappy validator of your own when there are really good ones available?
(I say this as the proud owner of a lastname.email domain, where the .email TLD was made explicitly for this 8 years, and I still have problems with bad validation.)
Also, how many users are actually manually typing their e-mail address into a form, instead of using autofill?
As the referenced page says, a valid email address is one that can receive email. If you really care about the e-mail address being correct, then you need to validate it by sending a verification e-mail.
I personally accept any string that is between 3 bytes and 1 kilobyte, if they click the link in it then it's good.
It reduces the odds of the user giving you a wrong email address then having to either jump through more hoops to get signed up or give up.
You're absolutely right that the acid test is "can they receive email to it?"
As that website I linked says, if the email looks suspicious but is technically valid, ask them "Are you sure you didn't mean this?", but let them choose what they put in.
However, if the address as given is definitely invalid, then you can reject it and explain why. You can offer suggestions here too if any seem reasonable.
Can you provide us with an example?
If you would be writing software for airplanes, or cars, that would mean lots of crashes per day, with millions x 99.9% being still a lot. If it is financial software, people might loose millions regulary.
But if you make a casual game ... who cares (except the person who lost his highscore achievements).
Obviously there are different standards.
I've been using <otherperson@email.to@myemaildomain> to respond to people for ages, and this is a completely normal and supported email flow. Who are you to tell other people what is normal? It is not some possible weird thing that other people can use emails that follow the spec and aren't even all that out there.
Even if the programmer wanted to do that, his boss, and boss's boss would disagree.
It is a falsehood, of course, that "I don't have to handle cases outside of the specification we committed to". Though not always, and not for all cases.
Say that my reuqirements are to write a music engraving program for western notation. Of course, I take it for granted that (that type of) music can be written down; my program is not an expression of my personal belief that all music can be written down, or that it has a composer.
Yup, I used to spend my summers on an island where my address would be: farmstead name, island, country. Zip code was optional. Had to find creative ways to satisfy various web forms.
The thing about postal databases bit me many times being the first owner of a new home, too. So many times some software system didn't believe my address was valid because my builder filed the original deed incorrectly. Actually, this was worse because I couldn't even pay property tax for three years until it was fixed, but believe me software service X that told me my address didn't exist, my house is real and every delivery service I have ever tried to use managed to find it.
Or the hassle of trying to figure out whether a website was gonna list PR under State or Country or just not have it at all. I got really good at modifying web forms with Chrome devtools to inject Puerto Rico into the State drop-downs so I could just get shit shipped.
And for a while I didn't have any way to receive mail at the house I was renting, so I had stuff shipped to work, but they only had a rural box addr, so the addr was "Box 1234....". Anything shipping via UPS/FedEx didn't wanna touch it, so we had an alternate address for each of them (since UPS's system couldn't find one address form and FedEx couldn't find the other) and I'd have to find out who the seller was shipping with.
Wow. I've never thought of this... I can think of three places I've reached out to in order to have a company manually update my address because of this just in the last two months.
I always tried it first, and if needed would reach out to the company afterwards.
Had one company call me after tweaking the form in Chrome and ask how I managed to place the order with that address. After playing dumb for a bit, I sheepishly admitted to altering the form. They were upset at first, but after explaining that they used USPS and USPS handled mail to PR just fine and required no export papers, they actually thanked me and updated their site themselves to handle shipping to PR.
For a good year, my address was something like "KM 5.4 Carr. 635", which was effectively "Kilometer 5.4 Highway 635". And then the put out new kilometer markers and my address changed by 0.2km in one way according to the power company and the other way according to the water company.
And IIRC, the power company had "yellow house in the back" as part of my address, since there were three houses on this lot. Don't know what would've happened if I painted the house!
Edit: Ha! Looks like a few things have changed in Google Maps and a number of things now have addresses showing up with their km marker numbers, which didn't use to be the case. For example, the Caribbean Cinemas location in Arecibo, Puerto Rico [0] has the address "Carr. #2, Km. 81.0 Barrio Hato Abajo, Arecibo, PR 00612"
When you onboard to a new company, they will automatically give you access to whatever systems you need to do your job.
or
It will be automatic or easy to get access to all the systems you need to do your job.
Related: When you're hired to be a computer programmer, the company will have a computer for you on your first day of work.
This happened to me twice. The first time at a low-rent startup where people were expected to bring their own machines. (Company folded months later amid an unrelated government investigation.) The second time was when the previous programmer did something unpleasant to the computer on his way out, and the company's procurement process for getting replacement gear required lots of approvals because dev machines are higher-spec and more expensive than an ordinary office computer.
You will be onboarded to your new company.
When you onboard to a new company, there will be a list of the systems you'll need to do your job.
Once you know what tools you need, you'll have training, and documentation on them. This is especially true for internally written tools.
Don't implement date and time calculations yourself, just use the library, even for things like "add a day".
Don't parse addresses yourself, use a library. Don't validate email yourself, use a library. Don't validate input yourself, use a library.
Unless the runtime or memory space is absolutely critical to your application, using a library won't make things noticeably worse.
- The compiler won’t have bugs.
- The compiler won’t have show-stopping bugs.
- The compiler’s bugs will be fixed quickly.
- The compiler’s bugs can be fixed.
But I think they should have added:
- My code does not work because of bugs in the compiler..
> Because the bugs are in their code, not mine.
Bookmarking poorly organized lists will make you avoid all their pitfalls.
Also:
Lists from the Internet are correct.
(Following my own advice...) For example: https://chiselapp.com/user/ttmrichter/repository/gng/doc/tru...
> 10× programmers exist.
(i.e. saying they don't exist) Maybe a writing prompt for a blog post, but there's nothing else there about it.
- Programming skill is all you need to build great software.
About the only case where I would say this might be true is when your users are other programmers. If the plan is to target a non-technical market, good design and in-depth understanding of the problem space are just as important if not more so.
My favorite example of this is the world's most popular accounting software. Good design and marketing --- mediocre programming.
Partial list:
Falsehoods about Airline Seat Maps https://duffel.com/blog/falsehoods-about-seat-maps
Falsehoods about Biometrics https://shkspr.mobi/blog/2021/01/falsehoods-programmers-beli...
Falsehoods about Plain Text https://jeremyhussell.blogspot.com/2017/11/falsehoods-progra...
Falsehoods about Names https://www.kalzumeus.com/2010/06/17/falsehoods-programmers-...
Falsehoods about Time https://infiniteundo.com/post/25326999628/falsehoods-program...
Falsehoods about Addresses https://www.mjt.me.uk/posts/falsehoods-programmers-believe-a...
I tried to create a nonprofit account at Box.com a few years ago with a .net address. It took almost 3 weeks of back-and-forth with customer support and multiple interactions with higher-ups in their legal dept. to resolve. No one there had ever considered the possibility.
I just put the example into GPT3: Prompt: Can an email address contain more than one @ sign? Answer: No, an email address can only contain one @ sign.
I'm on my phone so it's a bit laborious to test more
> "Time passes at the same speed on top of a mountain and at the bottom of a valley".
Just curious, does this kind of gravitational time dilation bear any consequence in our systems, given that we are building systems with the assumption that system clocks are not always accurate and there is no global time?
Most processors in active use are 32-bit or larger.
16-bit or larger?
8-bit or larger?
OH COME ON!
[1]: https://medium.com/gender-2-0/falsehoods-programmers-believe...
"Eddie Izzard, why do you wear women's clothes?"
Eddie Izzard: "I don't. These are my clothes. I bought them."
And just because you don't understand it doesn't mean that it isn't some peoples' life experience.
Reference: I know a child who is not at all rebellious or attention-seeking but who expresses this as their inner experience.
Dismissing that experience is rude.