Awesome Falsehood
A curated list of awesome falsehoods programmers believe in.
The logic of the world is prior to all truth and falsehood.
- Ludwig Wittgenstein
Contents
- Meta
- Arts
- Business
- Dates and Time
- Emails
- Geography
- Human Identity
- Internationalization
- Multimedia
- Networks
- Phone Numbers
- Postal Addresses
- Science
- Society
- Software Engineering
- Typography
Foreword
Falsehood articles are a form of commentary on a particular subject, and are appreciated by the developer community at large for their effectiveness and terseness. They're a convenient written form to approach an unfamiliar domain by dispelling myths, point out common pitfalls, show inconsistencies and subtleties.
In a sense, Falsehood articles are a suite of wordy unit-tests covering extensive edge-cases provided by real-world usage.
Meta
- Falsehoods Programmers Believe - A brief list of common falsehoods. A great overview and quick introduction into the world of falsehoods.
- Falsehoods About Programming - A humbling and fun list on programming and programmers themselves.
- Falsehoods About Falsehoods Lists - Meta commentary on how these falsehoods shouldn't be handled.
Arts
- Falsehoods About Music - False assumption that might be made in codifying music.
- Falsehoods About Art – Common misconceptions about art.
Business
- Falsehoods About Online Shopping - Covers prices, currencies and inventory.
- Falsehoods About Prices - Covers currencies, amounts and localization.
- Falsehoods About IBANs - International Bank Account Numbers are not immune to mistakes.
- Falsehoods About Job Applicants - Assumptions about job applicants and their job histories aren’t necessarily true.
- Falsehoods About Economics - Economics are not simple or rational.
- CLDR currency definitions - Currency validity date ranges overlap due to revolts, invasions, new constitutions, and slow planned adoption.
tax
- A PHP 5.4+ tax management library.
Dates and Time
- Falsehoods About Time - Seminal article on dates and time.
- More Falsehoods About Time - Part. 2 of the article above.
- Falsehoods About Time and Time Zones - Another takes on time-related falsehoods, with an emphasis on time zones.
- Critique of Falsehoods About Time - Takes on the first article above and provides an explanation of each falsehood, with more context and external resources.
- Your Calendrical Fallacy Is Thinking… - List covering intercalation and cultural influence, made by a community of iOS and macOS developers.
- Time Zone Database - Code and data that represent the history of local time for many representative locations around the globe.
- The Long, Painful History of Time - Most of the idiosyncrasies in time keeping can find an explanation in history.
- You Advocate a Calendar Reform - Your idea will not work. This article tells you why.
- So You Want to Abolish Time Zones – Abolishing timezones may sound like a good idea, but there are quite a few complications that make it not quite so.
- The Problem with Time & Timezones - A video about why you should never, ever deal with timezones if you can help it.
- $26,000 Overcollection by Labor Department - The consequence of wrong calendar accounting.
- ISO-8601, YYYY, yyyy, and why your year may be wrong - String formatting of date is hard.
Emails
- I Knew How to Validate an Email Address Until I Read the RFC - Provides intricate examples that are unsuspected valid email addresses according the RFC-822.
- So you think you can validate email addresses (FOSDEM 2018) - Presentation of edge-case email addresses and why you should not use regex to parse them.
Geography
- Falsehoods About Geography - Takes on places, their names and locations.
- Falsehoods About Maps - Covers coordinates, projection and GIS.
Human Identity
- Falsehoods About Names - The article that started it all.
- Falsehoods About Gender - Gender is part of human identity and has its own subtleties.
- Gay Marriage: The Database Engineering Perspective - How to store a marriage in a database while addressing most of the falsehoods about gender, naming and relationships.
- Falsehoods Programmers Believe About Families - You can't really define a family with strict rules.
- Personal Names Around the World - How do people's names differ around the world, and what are the implications for the Web?
- XKCD #327: Exploits of a Mom - Funny take on how implementation of a falsehood might lead to security holes.
- Hello, I’m Mr. Null. My Name Makes Me Invisible to Computers - Real-life example on how implemented falsehood has negative impact on someone's life.
- HL7 v3 RIM - A flexible data model for representing human names.
- Apple iOS
NSPersonNameComponentsFormatter
- Localized representations of the components of a person’s name. - Falsehoods About Me - Issues at the intersection of names and gender and internationalisation.
Internationalization
- Falsehoods About Language - Translating a software from English is not as straightforward as it seems to be.
- i18n Testing Data - Real-word international and diverse name data for unit testing and QA.
- Internationalis(z)ing Code - A video about things you need to keep in mind when internationalizing your code.
Multimedia
- Falsehoods About Video - Cover it all: video decoding and playback, files, image scaling, color spaces and conversion, displays and subtitles.
Networks
- Falsehoods About Networks - Covers TCP, DHCP, DNS, VLANs and IPv4/v6.
- Fallacies of Distributed Computing - Assumptions that programmers new to distributed applications invariably make.
Phone Numbers
- Falsehoods About Phone Numbers - Covers phone numbers, their representation and meaning.
libphonenumber
- Google's common Java, C++ and JavaScript library for parsing, formatting, and validating international phone numbers. Also available for C#, Objective-C, Python, Ruby and PHP.
Postal Addresses
- Falsehoods About Addresses - Covers streets, postal codes, buildings, cities and countries.
- Letter Delivered Despite No Name, No Address - Ultimate falsehood about postal addresses: you do not need one.
- Regex and Postal Addresses - Why regular expressions and street addresses do not mix.
libaddressinput
- Google's common C++ and Java library for parsing, formatting, and validating international postal addresses.addressing
- A PHP 5.4+ addressing library, powered by Google's dataset.postal-address
- Python module to parse, normalize and render postal addresses.address
- Go library to validate and format addresses using Google's dataset.
Science
- Falsehoods About Systems of Measurement - On working with systems of measurement and converting between them.
Society
- Falsehoods About Political Appointments - Designing election systems has its own tricks.
- Falsehoods About Women In Tech - Myth about women in STEM (Science, Technology, Engineering, Math) industries.
Software Engineering
- Falsehoods About Versions - Attributing an identity to a software release might be harder than thought.
- Falsehoods About Build Systems - Building software is hard. Building software that builds software is harder.
- Myths About File Paths - Diversity of file-systems and OSes makes file paths a little harder than we might think of.
- Falsehoods About REST APIs - Pitfalls to be mindful of when creating and documenting APIs.
- Falsehoods About CSVs - While RFC4180 to exists, it is far from definitive and goes largely ignored.
- Falsehoods About Package Managers - Covers package and their managers.
- Falsehoods About Testing - An attempt to establish a list of falsehoods about testing.
- Big List of Naughty Strings - Challenge your assumptions about strings.
- Popular misconceptions about mtime - Part of a post on why file mtime comparison could be considered harmful.
- Falsehoods About Pagination - Why your pagination algorithm is giving someone (possibly you) a headache.
- 9999999999999999.0 - 9999999999999998.0 - A kind of falsehood on numbers, and floats vs decimals.
Typography
- Falsehoods About Fonts - Assumptions about typography on the web and in desktop applications.
Contributing
Your contributions are always welcome! Please take a look at the contribution guidelines first.
Good Candidates
Here is a non-restrictive list of items which are good candidates for inclusion in this awesome list.
Falsehood Articles
Articles following the falsehood scheme are prime candidates for inclusion in this awesome list.
These articles starts with the hypothesis that developers have a naive, simple view of the subject at hand. Then proceed to list a set of candid assumptions that might be held by such programmers. Each one is intentionally false, and sometimes illustrated by a counter-example.
A list of falsehood is crafted as a progression that is designed to refine concepts. Having read the whole list of falsehood, the reader should possess a global, if not complete, overview of the domain being targeted by the article, including most, if not all, its pitfalls, edges-cases and inconsistencies.
In the worst case, these articles might provoke an emotional reaction and cause
flipping table. (╯°□°)╯︵ ┻━┻
Articles featuring items that are applicable to a product and a product only can't really be considered as generic falsehood articles and should be avoided.
Libraries
When possible, we provide a list of programming libraries or modules that may solve, or try to, the complexities and idiosyncrasies pointed by the falsehood articles above.
So we can put back tables in place. ┬─┬ ノ( ゜-゜ノ)
Data Structures
Data models and structures generic enough to cover and address most of the falsehoods are also welcome in this page.
License
Content of this repository is licensed under the Creative Commons CC0 license.
To the extent possible under law, Kevin Deldycke has waived all copyright and related or neighboring rights to this work.