├── .github ├── ISSUE_TEMPLATE │ ├── config.yml │ └── new-link.yaml ├── code-of-conduct.md ├── contributing.md ├── contributing.zh.md ├── dependabot.yaml ├── funding.yml ├── pull_request_template.md └── workflows │ ├── autofix.yaml │ ├── autolock.yaml │ ├── docs.yaml │ ├── label-sponsors.yaml │ ├── labels.yaml │ └── lint.yaml ├── assets ├── awesome-falsehood-header-source.xcf ├── awesome-falsehood-header.jpg └── awesome-falsehood-header.png ├── license ├── readme.md └── readme.zh.md /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: true -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/new-link.yaml: -------------------------------------------------------------------------------- 1 | name: Add new link 2 | description: You would like to add a new link to the collection 3 | labels: ["🆕 new link"] 4 | body: 5 | 6 | - type: input 7 | id: link 8 | attributes: 9 | label: URL of the article or project 10 | validations: 11 | required: true 12 | 13 | - type: textarea 14 | id: motivation 15 | attributes: 16 | label: Motivation 17 | description: > 18 | Explain the motivation for adding this link to the current collection. What's special about it? 19 | placeholder: | 20 | This new link is special because... 21 | validations: 22 | required: true 23 | 24 | - type: checkboxes 25 | id: affiliation 26 | attributes: 27 | label: Affiliation 28 | description: > 29 | Please indicate how you are associated with the new proposed content. 30 | options: 31 | - label: "I am the author of the article or project" 32 | - label: "I am working for/with the company which is publishing the article or project" 33 | - label: "I'm just a rando who stumbled upon this via social networks" 34 | validations: 35 | required: true 36 | 37 | - type: checkboxes 38 | id: self-checks 39 | attributes: 40 | label: Self checks 41 | options: 42 | - label: > 43 | I have [read the Code of 44 | Conduct](https://github.com/kdeldycke/awesome-falsehood/blob/main/.github/code-of-conduct.md) 45 | - label: > 46 | I applied all rules from the [Contributing 47 | guide](https://github.com/kdeldycke/awesome-falsehood/blob/main/.github/contributing.md) 48 | - label: > 49 | I have checked there is no other [Issues](https://github.com/kdeldycke/awesome-falsehood/issues) or [Pull 50 | Requests](https://github.com/kdeldycke/awesome-falsehood/pulls) covering the same topic to open 51 | validations: 52 | required: true -------------------------------------------------------------------------------- /.github/code-of-conduct.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, gender identity and expression, level of experience, 9 | nationality, personal appearance, race, religion, or sexual identity and 10 | orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | - Using welcoming and inclusive language 18 | - Being respectful of differing viewpoints and experiences 19 | - Gracefully accepting constructive criticism 20 | - Focusing on what is best for the community 21 | - Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | - The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | - Trolling, insulting/derogatory comments, and personal or political attacks 28 | - Public or private harassment 29 | - Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | - Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at . All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at [https://contributor-covenant.org/version/1/4][version] 72 | 73 | [homepage]: https://contributor-covenant.org 74 | [version]: https://contributor-covenant.org/version/1/4/ 75 | -------------------------------------------------------------------------------- /.github/contributing.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Your contributions are always welcome! Here are some guidelines. 4 | 5 | ## Good Candidates 6 | 7 | Before contributing, make sure the new link you'd like to add is a good 8 | candidate. 9 | 10 | Here is a non-restrictive list of items which are good candidates for inclusion 11 | in this awesome list. 12 | 13 | ### Falsehood Articles 14 | 15 | Articles following the *falsehood* schema are prime candidates for inclusion in 16 | this awesome list. 17 | 18 | These articles starts with the hypothesis that developers have a naive and 19 | simple view of a domain. Then proceed to list a set of candid assumptions that 20 | might be held by programmers. Each one is intentionally false, and in their 21 | best form are illustrated with a counter-example. 22 | 23 | A list of falsehood is crafted as a progression that is designed to refine 24 | concepts. Having read the whole list of falsehood, the reader should possess a 25 | better overview of a domain while dispelling its myths, point out common 26 | pitfalls and demonstrate its subtleties. 27 | 28 | *falsehood* articles are, in a sense, a suite of wordy unit-tests covering 29 | extensive edge-cases provided by real-world usage. The world is messy. 30 | Discovering a domain to be much more complex than anticipated will lead to 31 | frustrations. And cause flipping tables `(╯°□°)╯︵ ┻━┻`. This is the sign of a 32 | great candidate for that list! 33 | 34 | Articles featuring items that are applicable to one product (or a service) and 35 | one only can't be considered as generic enough and should be avoided. 36 | 37 | ### Libraries 38 | 39 | Programming libraries or modules are good candidates too, if they solve or 40 | reduce the complexities pointed to by *falsehood* articles above. 41 | 42 | That way we can put back tables in place. `┬─┬ ノ( ゜-゜ノ)` 43 | 44 | ### Data Structures 45 | 46 | Data models and structures generic enough to cover and address most of the 47 | falsehoods are also welcome in this page. 48 | 49 | ## Pull-requests and issues 50 | 51 | - Search past and current issues and pull-requests for previous suggestions before making a new one. Yours may be a duplicate or a work in progress. 52 | 53 | - Only one list item per commit. 54 | 55 | - Only one commit per pull-request. Always squash commits after applying changes. 56 | 57 | - Check your spelling and grammar. 58 | 59 | - Add the reason why the linked resource is awesome. And what it adds to the existing corpus. 60 | 61 | - Keep the translated content up-to-date with your proposal. Propagate changes to all `readme.*.md` files. Rely on automatic translation tools. Bilingual contributors will refine the result later. 62 | 63 | ## Linting 64 | 65 | Have your pull-request pass the [official Awesome List's linter](https://github.com/sindresorhus/awesome-lint). 66 | 67 | No extra work is required here as it is [already integrated by the way of GitHub actions](https://github.com/kdeldycke/awesome-falsehood/tree/main/.github/workflows). 68 | 69 | To run the linter locally, do: 70 | 71 | ```shell-session 72 | $ npm i npx 73 | $ npx awesome-lint 74 | ``` 75 | 76 | ## Formatting 77 | 78 | Additional rules not covered by `awesome-lint`, to keep the content clean and tidy. 79 | 80 | If one of these rule conflict with the linter, the linter's rule should takes precedence. Apply it. 81 | 82 | ### General content 83 | 84 | - Remove any trailing whitespaces. 85 | 86 | - Use spaces, no tabs, for indention. 87 | 88 | - Apostrophes should be using the single ASCII mark: `'`. 89 | 90 | - Try to quote the original content as-is to summarize the point of the linked content. 91 | 92 | - If a straight quote doesn't cut it, feel free to paraphrase both the item's title and description. Remember, this is curation: we are increasing the value of the original content by aggregation and categorization. And also by smart editorializing. You just need to respect the spirit of the original content. 93 | 94 | ### Sections 95 | 96 | - Sections are in alphabetical order, as all topics are independent from each others. 97 | 98 | - Section might feature one paragraph introduction and a figure (graph, drawing, photo). 99 | 100 | ### Item title 101 | 102 | - Link title must be stripped out of the "*Programmers believe*" part to keep it compact. 103 | 104 | - URLs must use HTTPs protocol, if available. 105 | 106 | - No `“` and `”` curved quotation marks. This is reserved for original content quotation in descriptions. 107 | 108 | - To quote, use either the single or double variations: `'` and `"`. Keep them properly balanced. 109 | 110 | ### Item description 111 | 112 | - Try to provide an actionable TL;DR as a description, quoting the original text if it stands by itself. 113 | 114 | - [Removes `TL;DR:` prefix in description](https://github.com/kdeldycke/awesome-iam/commit/537cbfd8beaca18d44a0962e107a6db9171a0345). Every description is a short summary anyway. 115 | 116 | - Quotes should be properly delimited with the `“` and `”` curved quotation marks. 117 | 118 | - You can reduce the original text by using an ellipsis in parenthesis `(…)`. 119 | 120 | - For quoting inside a quote, use single or double `'` and `"` ASCII marks. Keep them properly balanced. 121 | 122 | - To serialize a list into a description, use the following format: 123 | 124 | > Text of a description summarizing the item. And here is a list coming from the original content about **“a random subject: 1. Blah blah blah; 2. Blah blah blah? 3. Blah blah blah.”** And a bit more text to conclude. 125 | 126 | This format provides visual anchor points that help readability and quick content scanning. 127 | 128 | - You can skip some items from the original list and renumber it. 129 | 130 | - You shouldn't have to re-order it though. 131 | 132 | - An additional link in the description is allowed. This must be limited to some rare cases. Like pointing to a bigger concept, an acronym definition, or reference material (book, biography, …). 133 | 134 | ### CLI helpers 135 | 136 | One-liners to fix-up some common formatting mistakes. Use with great caution and always double-check and edit the results. 137 | 138 | - Replaces star list item markers by dashes: 139 | 140 | ```shell-session 141 | $ sed -i 's/^* /- /g' ./README.md 142 | ``` 143 | 144 | - Replaces typographic quotes with ASCII ones: 145 | 146 | ```shell-session 147 | $ sed -i "s/‘/\'/g" ./readme.md 148 | $ sed -i "s/’/\'/g" ./readme.md 149 | ``` 150 | 151 | - Forces quotes to end with a dot: 152 | 153 | ```shell-session 154 | $ sed -i 's/`$/`\./g' ./readme.md 155 | ``` 156 | 157 | [Other one-liners are available](https://kevin.deldycke.com/2006/12/text-date-document-processing-commands/) on my blog. 158 | -------------------------------------------------------------------------------- /.github/contributing.zh.md: -------------------------------------------------------------------------------- 1 | # 贡献 2 | 3 | 随时欢迎你提供贡献!以下是一些指南. 4 | 5 | ## 合适的候选项 6 | 7 | 在贡献之前,请确保您要添加的新链接符合合适候选项的标准. 8 | 9 | 以下是一个非限制性列表, 这些项目是适合纳入awesome列表的. 10 | 11 | ### 错误认知类文章 12 | 13 | 遵循*谬误*认知定义的文章是该awesome列表的首选候选项。 14 | 15 | 此类文章以假设开发者对某个领域存在简单而天真的看法为开端,接着列出一系列程序员可能持有的误解性假设。每个假设故意是错误的,并且在最佳情况下配有反例来加以说明。 16 | 17 | 一份错误认知列表通常是逐步设计的,旨在精炼相关概念。 18 | 在阅读了整个谬误列表后,读者应该对某个领域有更好的了解,同时消除其错误认知, 指出常见的陷阱并展示其微妙之处 19 | 20 | 21 | 从某种意义上说,*谬误*文章是一套冗长的单元测试,涵盖了现实世界使用提供的广泛边缘情况 22 | 世界很混乱。发现一个领域比预期复杂得多会导致挫败感。可能会破防,直接掀桌 `(╯°□°)╯︵ ┻━┻`。这是该名单的优秀候选项的标志! 23 | 24 | 包含仅适用于一种产品(或一项服务)的项目的文章不能被视为足够通用,应避免使用. 25 | 26 | ### 库 27 | 28 | 如果编程库或模块能够解决或减少上述*谬误*文章指出的复杂性,那么它们也是不错的选择 29 | 30 | 这样可以把刚才掀起的桌子放下. `┬─┬ ノ( ゜-゜ノ)` 31 | 32 | ### 数据结构 33 | 34 | 本页也欢迎足够通用的数据模型和数据结构来涵盖和解决大多数谎言。 35 | 36 | ## PR和issues 37 | 38 | - 在提出新issue/PR之前,请先搜索以前的issue/PR。你在做的可能是重复或者是已经在进行的工作 39 | 40 | - 每次提交仅包含一个列表项. 41 | 42 | - 每个PR只有一个commit. 应用修改的之后总是会squash commits. 43 | 44 | - 检查你的拼写和语法. 45 | 46 | - 补充说明为何该链接资源值得推荐。以及它对现有内容的补充或提升 47 | 48 | - 保持翻译内容与您的提案同步更新. 将更改传播到所有 `readme.*.md` 文件. 依赖自动翻译工具,之后会由双语贡献者进一步完善结果. 49 | 50 | ## 代码规范检查 51 | 52 | 请确保你的PR通过 [官方Awesome List的代码规范检查](https://github.com/sindresorhus/awesome-lint). 53 | 54 | 55 | 不需要额外的工作,因为它[已经通过GitHub actions集成了](https://github.com/kdeldycke/awesome-falsehood/tree/main/.github/workflows) 56 | 57 | 在本地执行代码规范检查,执行以下命令: 58 | 59 | ```shell-session 60 | $ npm i npx 61 | $ npx awesome-lint 62 | ``` 63 | 64 | ## 格式化 65 | 66 | 额外规则未被`awesome-lint`覆盖,以保持内容整洁。 67 | 68 | 如果这些规则与代码规范检查冲突,代码规范检查的规则应优先。请应用它. 69 | 70 | ### 通用内容 71 | 72 | - 删除任何尾部空格. 73 | 74 | - 使用空格,不要使用制表符进行缩进. 75 | 76 | - 使用单个ASCII标记的撇号:`'`. 77 | 78 | - 尝试引用原始内容以总结链接内容的要点. 79 | 80 | - 如果直接引用不合适,可以对项目的标题和描述进行改写.请记住,这是一种精选过程:我们通过聚合和分类来提升原始内容的价值,同时进行恰当的编辑优化。只需尊重原始内容的精神即可. 81 | 82 | ### 章节 83 | 84 | - 各章节按字母顺序排列,因为所有主题都是相互独立的。 85 | 86 | - 章节可能包含一段介绍和一张图片(图表、绘图、照片). 87 | 88 | ### 项目标题 89 | 90 | - 链接标题需去除 "*程序员认为*" 部分,以保持简洁 91 | 92 | - 如果可以,URL必须用HTTPS协议. 93 | 94 | - 不要用弧形引号 `“` 和 `”`. 它们仅保留用于描述中的原始内容引用. 95 | 96 | - 引用时请使用单引号或双引号:' 和 ",并确保它们成对使用. 97 | 98 | ### 项目描述 99 | 100 | - 尽量提供可操作的简短总结作为描述,如果原文已足够完整,可直接引用. 101 | 102 | - [删除描述中的 103 | `TL;DR:` 前缀](https://github.com/kdeldycke/awesome-iam/commit/537cbfd8beaca18d44a0962e107a6db9171a0345). 104 | 每个描述都应该是简短的摘要. 105 | 106 | - 引用内容应使用 `“` 和 `”` 弧形引号正确分隔 107 | 108 | - 你可以使用括号内的省略号 `(…)` 来缩减原文. 109 | 110 | - 对于引用内部的引文,使用单引号 `'` 或双引号 `"`,并确保它们成对出现 111 | 112 | - 要将列表序列化为描述,请使用以下格式: 113 | 114 | 115 | > 描述性文字总结该条目。以下是关于 **"一个随机主题:1. xxx;2. xxx?3. xxx。"** 的原始内容列表,并在最后添加一些总结文字. 116 | 117 | 此格式为视觉上提供了锚点,有助于提升可读性和快速内容浏览. 118 | 119 | - 您可以跳过原始列表中的某些项目并重新编号. 120 | 121 | - 但不应重新排序原始列表的顺序. 122 | 123 | - 描述中允许附加链接,但应限于少数情况,例如指向更大的概念、首字母缩写的定义或参考资料(如书籍、传记等). 124 | 125 | ### 命令行助手 126 | 127 | 用于修复一些常见格式错误的单行命令。请谨慎使用,并始终仔细检查和编辑结果. 128 | 129 | - 将星号列表项标记替换为短横线: 130 | 131 | ```shell-session 132 | $ sed -i 's/^* /- /g' ./README.md 133 | ``` 134 | 135 | - 将排版引号替换为 ASCII 引号: 136 | 137 | ```shell-session 138 | $ sed -i "s/‘/\'/g" ./readme.md 139 | $ sed -i "s/’/\'/g" ./readme.md 140 | ``` 141 | 142 | - 强制引号以句点结尾: 143 | 144 | ```shell-session 145 | $ sed -i 's/`$/`\./g' ./readme.md 146 | ``` 147 | 148 | [其他可用的单行命令](https://kevin.deldycke.com/2006/12/text-date-document-processing-commands/) 在我的博客上. 149 | -------------------------------------------------------------------------------- /.github/dependabot.yaml: -------------------------------------------------------------------------------- 1 | # https://docs.github.com/en/github/administering-a-repository 2 | # /configuration-options-for-dependency-updates 3 | --- 4 | version: 2 5 | updates: 6 | 7 | - package-ecosystem: "github-actions" 8 | directory: "/" 9 | schedule: 10 | interval: "daily" 11 | labels: 12 | - "📦 dependencies" 13 | assignees: 14 | - "kdeldycke" 15 | -------------------------------------------------------------------------------- /.github/funding.yml: -------------------------------------------------------------------------------- 1 | --- 2 | github: kdeldycke 3 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ### Motivation 2 | 3 | 10 | 11 | This new link is special because... 12 | 13 | ### Affiliation 14 | 15 | 16 | 17 | - [ ] I am the author of the article or project 18 | - [ ] I am working for/with the company which is publishing the article or project 19 | - [ ] I'm just a rando who stumbled upon this via social networks 20 | 21 | ### Self checks 22 | 23 | - [ ] I have [read the Code of Conduct](https://github.com/kdeldycke/awesome-falsehood/blob/main/.github/code-of-conduct.md) 24 | - [ ] I applied all rules from the [Contributing guide](https://github.com/kdeldycke/awesome-falsehood/blob/main/.github/contributing.md) 25 | - [ ] I have checked there is no other [Issues](https://github.com/kdeldycke/awesome-falsehood/issues) or [Pull Requests](https://github.com/kdeldycke/awesome-falsehood/pulls) covering the same topic to open 26 | -------------------------------------------------------------------------------- /.github/workflows/autofix.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Autofix 3 | "on": 4 | push: 5 | # Only targets main branch to avoid amplification effects of auto-fixing 6 | # the exact same stuff in multiple non-rebased branches. 7 | branches: 8 | - main 9 | 10 | jobs: 11 | 12 | autofix: 13 | uses: kdeldycke/workflows/.github/workflows/autofix.yaml@v3.4.7 -------------------------------------------------------------------------------- /.github/workflows/autolock.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Autolock 3 | "on": 4 | schedule: 5 | # Run weekly, every Monday at 8:43. 6 | - cron: "43 8 * * 1" 7 | 8 | jobs: 9 | 10 | autolock: 11 | uses: kdeldycke/workflows/.github/workflows/autolock.yaml@v3.4.7 12 | -------------------------------------------------------------------------------- /.github/workflows/docs.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Docs 3 | "on": 4 | push: 5 | # Only targets main branch to avoid amplification effects of auto-fixing 6 | # the exact same stuff in multiple non-rebased branches. 7 | branches: 8 | - main 9 | 10 | jobs: 11 | 12 | docs: 13 | uses: kdeldycke/workflows/.github/workflows/docs.yaml@v3.4.7 14 | secrets: inherit -------------------------------------------------------------------------------- /.github/workflows/label-sponsors.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Label sponsors 3 | "on": 4 | pull_request: 5 | types: 6 | - opened 7 | issues: 8 | types: 9 | - opened 10 | 11 | jobs: 12 | 13 | label-sponsors: 14 | uses: kdeldycke/workflows/.github/workflows/label-sponsors.yaml@v3.4.7 -------------------------------------------------------------------------------- /.github/workflows/labels.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Labels 3 | "on": 4 | push: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | 10 | labels: 11 | uses: kdeldycke/workflows/.github/workflows/labels.yaml@v3.4.7 -------------------------------------------------------------------------------- /.github/workflows/lint.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Lint 3 | "on": 4 | push: 5 | 6 | jobs: 7 | 8 | lint: 9 | uses: kdeldycke/workflows/.github/workflows/lint.yaml@v3.4.7 -------------------------------------------------------------------------------- /assets/awesome-falsehood-header-source.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kdeldycke/awesome-falsehood/11470da509faa070e4d6684dd71251bd019972e9/assets/awesome-falsehood-header-source.xcf -------------------------------------------------------------------------------- /assets/awesome-falsehood-header.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kdeldycke/awesome-falsehood/11470da509faa070e4d6684dd71251bd019972e9/assets/awesome-falsehood-header.jpg -------------------------------------------------------------------------------- /assets/awesome-falsehood-header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kdeldycke/awesome-falsehood/11470da509faa070e4d6684dd71251bd019972e9/assets/awesome-falsehood-header.png -------------------------------------------------------------------------------- /license: -------------------------------------------------------------------------------- 1 | Creative Commons Legal Code 2 | 3 | CC0 1.0 Universal 4 | 5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE 6 | LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN 7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS 8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES 9 | REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS 10 | PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM 11 | THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED 12 | HEREUNDER. 13 | 14 | Statement of Purpose 15 | 16 | The laws of most jurisdictions throughout the world automatically confer 17 | exclusive Copyright and Related Rights (defined below) upon the creator 18 | and subsequent owner(s) (each and all, an "owner") of an original work of 19 | authorship and/or a database (each, a "Work"). 20 | 21 | Certain owners wish to permanently relinquish those rights to a Work for 22 | the purpose of contributing to a commons of creative, cultural and 23 | scientific works ("Commons") that the public can reliably and without fear 24 | of later claims of infringement build upon, modify, incorporate in other 25 | works, reuse and redistribute as freely as possible in any form whatsoever 26 | and for any purposes, including without limitation commercial purposes. 27 | These owners may contribute to the Commons to promote the ideal of a free 28 | culture and the further production of creative, cultural and scientific 29 | works, or to gain reputation or greater distribution for their Work in 30 | part through the use and efforts of others. 31 | 32 | For these and/or other purposes and motivations, and without any 33 | expectation of additional consideration or compensation, the person 34 | associating CC0 with a Work (the "Affirmer"), to the extent that he or she 35 | is an owner of Copyright and Related Rights in the Work, voluntarily 36 | elects to apply CC0 to the Work and publicly distribute the Work under its 37 | terms, with knowledge of his or her Copyright and Related Rights in the 38 | Work and the meaning and intended legal effect of CC0 on those rights. 39 | 40 | 1. Copyright and Related Rights. A Work made available under CC0 may be 41 | protected by copyright and related or neighboring rights ("Copyright and 42 | Related Rights"). Copyright and Related Rights include, but are not 43 | limited to, the following: 44 | 45 | i. the right to reproduce, adapt, distribute, perform, display, 46 | communicate, and translate a Work; 47 | ii. moral rights retained by the original author(s) and/or performer(s); 48 | iii. publicity and privacy rights pertaining to a person's image or 49 | likeness depicted in a Work; 50 | iv. rights protecting against unfair competition in regards to a Work, 51 | subject to the limitations in paragraph 4(a), below; 52 | v. rights protecting the extraction, dissemination, use and reuse of data 53 | in a Work; 54 | vi. database rights (such as those arising under Directive 96/9/EC of the 55 | European Parliament and of the Council of 11 March 1996 on the legal 56 | protection of databases, and under any national implementation 57 | thereof, including any amended or successor version of such 58 | directive); and 59 | vii. other similar, equivalent or corresponding rights throughout the 60 | world based on applicable law or treaty, and any national 61 | implementations thereof. 62 | 63 | 2. Waiver. To the greatest extent permitted by, but not in contravention 64 | of, applicable law, Affirmer hereby overtly, fully, permanently, 65 | irrevocably and unconditionally waives, abandons, and surrenders all of 66 | Affirmer's Copyright and Related Rights and associated claims and causes 67 | of action, whether now known or unknown (including existing as well as 68 | future claims and causes of action), in the Work (i) in all territories 69 | worldwide, (ii) for the maximum duration provided by applicable law or 70 | treaty (including future time extensions), (iii) in any current or future 71 | medium and for any number of copies, and (iv) for any purpose whatsoever, 72 | including without limitation commercial, advertising or promotional 73 | purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each 74 | member of the public at large and to the detriment of Affirmer's heirs and 75 | successors, fully intending that such Waiver shall not be subject to 76 | revocation, rescission, cancellation, termination, or any other legal or 77 | equitable action to disrupt the quiet enjoyment of the Work by the public 78 | as contemplated by Affirmer's express Statement of Purpose. 79 | 80 | 3. Public License Fallback. Should any part of the Waiver for any reason 81 | be judged legally invalid or ineffective under applicable law, then the 82 | Waiver shall be preserved to the maximum extent permitted taking into 83 | account Affirmer's express Statement of Purpose. In addition, to the 84 | extent the Waiver is so judged Affirmer hereby grants to each affected 85 | person a royalty-free, non transferable, non sublicensable, non exclusive, 86 | irrevocable and unconditional license to exercise Affirmer's Copyright and 87 | Related Rights in the Work (i) in all territories worldwide, (ii) for the 88 | maximum duration provided by applicable law or treaty (including future 89 | time extensions), (iii) in any current or future medium and for any number 90 | of copies, and (iv) for any purpose whatsoever, including without 91 | limitation commercial, advertising or promotional purposes (the 92 | "License"). The License shall be deemed effective as of the date CC0 was 93 | applied by Affirmer to the Work. Should any part of the License for any 94 | reason be judged legally invalid or ineffective under applicable law, such 95 | partial invalidity or ineffectiveness shall not invalidate the remainder 96 | of the License, and in such case Affirmer hereby affirms that he or she 97 | will not (i) exercise any of his or her remaining Copyright and Related 98 | Rights in the Work or (ii) assert any associated claims and causes of 99 | action with respect to the Work, in either case contrary to Affirmer's 100 | express Statement of Purpose. 101 | 102 | 4. Limitations and Disclaimers. 103 | 104 | a. No trademark or patent rights held by Affirmer are waived, abandoned, 105 | surrendered, licensed or otherwise affected by this document. 106 | b. Affirmer offers the Work as-is and makes no representations or 107 | warranties of any kind concerning the Work, express, implied, 108 | statutory or otherwise, including without limitation warranties of 109 | title, merchantability, fitness for a particular purpose, non 110 | infringement, or the absence of latent or other defects, accuracy, or 111 | the present or absence of errors, whether or not discoverable, all to 112 | the greatest extent permissible under applicable law. 113 | c. Affirmer disclaims responsibility for clearing rights of other persons 114 | that may apply to the Work or any use thereof, including without 115 | limitation any person's Copyright and Related Rights in the Work. 116 | Further, Affirmer disclaims responsibility for obtaining any necessary 117 | consents, permissions or other rights required for any use of the 118 | Work. 119 | d. Affirmer understands and acknowledges that Creative Commons is not a 120 | party to this document and has no duty or obligation with respect to 121 | this CC0 or use of the Work. 122 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | 2 | 3 |

4 | 5 | Awesome Falsehood header image 6 | 7 |

8 | 9 |

10 | 11 | Yᴏᴜʀ Pʀᴏᴅᴜᴄᴛ ʜᴇʀᴇ! 12 |
13 | Add a link to your company or project here: purchase a GitHub sponsorship. 14 |
15 |

16 | 17 | --- 18 | 19 |

20 | English 21 | 中文 22 |

23 | 24 |

25 | The logic of the world is prior to all truth and falsehood.
26 | — Ludwig Wittgenstein[1] 27 |

28 | 29 | A curated [![Awesome](https://awesome.re/badge-flat.svg)](https://github.com/sindresorhus/awesome) list of falsehoods programmers believe in. A *falsehood* is an ***idea* that you initially believed was true**, but in reality, it is **proven to be false**. 30 | 31 | E.g. of an *idea*: valid email address exactly has one `@` character. So, you will use this rule to implement your email-field validation logic. Right? Wrong! The *reality* is: emails can have multiple `@` chars. Therefore your implementation should allow this. The initial *idea* is a falsehood you believed in. 32 | 33 | The *falsehood* articles listed below will have a comprehensive list of those false-beliefs that you should be aware of, to help you become a better programmer. 34 | 35 | ## Contents 36 | 37 | 38 | 39 | - [Meta](#meta) 40 | - [Arts](#arts) 41 | - [Business](#business) 42 | - [Cryptocurrency](#cryptocurrency) 43 | - [Dates and Time](#dates-and-time) 44 | - [Education](#education) 45 | - [Emails](#emails) 46 | - [Geography](#geography) 47 | - [Human Identity](#human-identity) 48 | - [Internationalization](#internationalization) 49 | - [Management](#management) 50 | - [Multimedia](#multimedia) 51 | - [Networks](#networks) 52 | - [Phone Numbers](#phone-numbers) 53 | - [Postal Addresses](#postal-addresses) 54 | - [Science](#science) 55 | - [Society](#society) 56 | - [Software Engineering](#software-engineering) 57 | - [Transportation](#transportation) 58 | - [Typography](#typography) 59 | - [Video Games](#video-games) 60 | - [Web](#web) 61 | 62 | 63 | 64 | ## Meta 65 | 66 | - [Falsehoods Programmers Believe](https://spaceninja.com/2015/12/07/falsehoods-programmers-believe/) - A brief list of common falsehoods. A great overview and quick introduction into the world of falsehoods. 67 | - [Falsehoods about Programming](https://chiselapp.com/user/ttmrichter/repository/gng/doc/trunk/output/falsehoods.html) - A humbling and fun list on programming and programmers themselves. 68 | - [Falsehoods about Falsehoods Lists](https://kevin.deldycke.com/2016/falsehoods-programmers-believe-about-falsehoods-lists) - Meta commentary on how these falsehoods shouldn't be handled. 69 | 70 | ## Arts 71 | 72 | - [Falsehoods about Music](https://literateprogrammer.blogspot.fr/2016/07/falsehoods-programmers-believe-about.html) - False assumption that might be made in codifying music. 73 | - [Falsehoods about Art](http://artsy.github.io/blog/2018/04/18/programmer-misconceptions-about-art/) - Common misconceptions about art. 74 | 75 | ## Business 76 | 77 | - [Falsehoods about Online Shopping](https://wiesmann.codiferes.net/wordpress/archives/22201) - Covers prices, currencies and inventory. 78 | - [Falsehoods about Prices](https://gist.github.com/rgs/6509585) - Covers currencies, amounts and localization. 79 | - [Falsehoods about IBANs](https://github.com/globalcitizen/php-iban/blob/master/docs/FALSEHOODS.md) - International Bank Account Numbers are not international. 80 | - [Falsehoods about Economics](http://exple.tive.org/blarg/2016/09/22/falsehoods-programmers-believe-about-economics/) - Economics are not simple or rational. 81 | - [Decimal Point Error in Etsy's Accounting System](https://www.reddit.com/r/Etsy/comments/hz4877/if_you_are_an_etsy_seller_do_not_purchase_postage/) - The importance of types in accounting software: missing the decimal point ends up with 100x over-charges. 82 | - [Twenty five thousand dollars of funny money](http://rachelbythebay.com/w/2022/12/02/25k/) - Same error as above at Google Ads, or the danger of separating your pennies from your dollars, where $250 internal coupons turned into $25,000. My advice: [get rid of integers and floats for monetary values. Use decimals. Or fallback to strings and parse them, don't validate.](https://twitter.com/kdeldycke/status/1599113889093890049) 83 | - [Characters `<` and `>` in company names lead to XSS attacks](https://forum.aws.chdev.org/t/cross-site-scripting-xss-software-attack/3355) - Because [UK allows companies to be registered with special characters](https://www.legislation.gov.uk/uksi/2015/17/schedule/1/made), a hacker leveraged them to register `\"> LTD`, but also `; DROP TABLE "COMPANIES";-- LTD`, `BETTS & TWINE LTD` and `SAFDASD & SFSAF \' SFDAASF\" LTD`. 84 | - [Minutiae of company names](https://twitter.com/nthnmsmth/status/1587880523124408322) - How the rules of the State of Delaware and the IRS does not intersects. 85 | - [CLDR currency definitions](https://github.com/unicode-org/cldr/blob/release-40/common/supplemental/supplementalData.xml#L87-L94) - Currency validity date ranges overlap due to revolts, invasions, new constitutions, and slow planned adoption. 86 | - [`tax`](https://github.com/commerceguys/tax) - A PHP 5.4+ tax management library. 87 | 88 | ## Cryptocurrency 89 | 90 | - [Falsehoods about Bitcoin](https://github.com/theborakompanioni/spring-boot-bitcoin-starter/blob/master/docs/FALSEHOODS.md) - A list of mistaken perspectives on Bitcoin. 91 | - [Falsehoods about Ethereum](https://gist.github.com/spalladino/a349f0ca53dbb5fc3914243aaf7ea8c6) - Misconceptions and common pitfalls in contract programming. 92 | 93 | ## Dates and Time 94 | 95 | - [Falsehoods about Time](http://infiniteundo.com/post/25326999628/falsehoods-programmers-believe-about-time) - Seminal article on dates and time. 96 | - [More Falsehoods about Time](http://infiniteundo.com/post/25509354022/more-falsehoods-programmers-believe-about-time) - Part. 2 of the article above. 97 | - [Falsehoods about Time and Time Zones](https://www.creativedeletion.com/2015/01/28/falsehoods-programmers-date-time-zones.html) - Another takes on time-related falsehoods, with an emphasis on time zones. 98 | - [Critique of Falsehoods about Time](https://gist.github.com/thanatos/eee17100476a336a711e) - Takes on the first article above and provides an explanation of each falsehood, with more context and external resources. 99 | - [Falsehoods about Unix Time](https://alexwlchan.net/2019/05/falsehoods-programmers-believe-about-unix-time/) - Mind the leap second! 100 | - [Falsehoods about Time Zones](https://www.zainrizvi.io/blog/falsehoods-programmers-believe-about-time-zones/) - Has some nice points regarding the edge-cases of DST transitions. 101 | - [Your Calendrical Fallacy Is Thinking…](http://yourcalendricalfallacyis.com) - List covering intercalation and cultural influence, made by a community of iOS and macOS developers. 102 | - [Time Zone Database](https://www.iana.org/time-zones) - Code and data that represent the history of local time for many representative locations around the globe. 103 | - [The Long, Painful History of Time](http://naggum.no/lugm-time.html) - Most of the idiosyncrasies in timekeeping can find an explanation in history. 104 | - [You Advocate a Calendar Reform](https://qntm.org/calendar) - Your idea will not work. This article tells you why. 105 | - [So You Want to Abolish Time Zones](https://qntm.org/abolish) - Abolishing timezones may sound like a good idea, but there are quite a few complications that make it not quite so. 106 | - [The Problem with Time & Timezones](https://www.youtube.com/watch?v=-5wpm-gesOY) - A video about why you should never, ever deal with timezones if you can help it. 107 | - [\$26,000 Overcollection by Labor Department](http://digital.vpr.net/post/rounding-error-computer-code-leads-26000-overcollection-labor-department) - The consequence of wrong calendar accounting. 108 | - [RFC-3339 vs ISO-8601](https://ijmacd.github.io/rfc3339-iso8601/) - An giant list of formats from the two standards, how they overlaps, and live examples. 109 | - [ISO-8601, `YYYY`, `yyyy`, and why your year may be wrong](https://ericasadun.com/2018/12/25/iso-8601-yyyy-yyyy-and-why-your-year-may-be-wrong/) - String formatting of date is hard. 110 | - [UTC is Enough for everyone, right?](https://zachholman.com/talk/utc-is-enough-for-everyone-right) - There are edge cases about dates and time (specifically UTC) that you probably haven't thought of. 111 | - [Storing UTC is not a silver bullet](https://codeblog.jonskeet.uk/2019/03/27/storing-utc-is-not-a-silver-bullet/) - “Just store dates in UTC” is not always the right approach. 112 | - [How to choose between UT1, TAI and UTC](https://news.ycombinator.com/item?id=28047376) - Depends on your priorities between SI seconds, earth rotation sync, leap seconds avoidance. 113 | - [Why is subtracting these two times (in 1927) giving a strange result?](https://stackoverflow.com/a/6841479/57311) - Infamous Stack Overflow answer about both complicated historical timezones, and how historical dates can be re-interpreted by newer versions of software. 114 | - [Critical and Significant Dates](https://web.archive.org/web/20150908004245/http://www.merlyn.demon.co.uk/critdate.htm) - From Y2K to the overflow of 32-bit seconds from Unix epoch, a list of special date to watch for depending on the system. 115 | - “I'm going to a commune in Vermont and will deal with no unit of time shorter than a season.” - Is the note left on his terminal by a quitting engineer in the 70s, after too much effort toiling away on sub-second timing concerns. Source: [The Soul of a New Machine](https://www.amazon.com/dp/0316491705?&linkCode=ll1&tag=kevideld-20&linkId=ec2881e22fb26c2d43de0daeebd5424d&language=en_US&ref_=as_li_ss_tl). 116 | 117 | ## Education 118 | 119 | - [Falsehoods CS Students (Still) Believe Upon Graduating](https://www.netmeister.org/blog/cs-falsehoods.html) - A list of things (not only) computer science students tend to erroneously and at times surprisingly believe even though they (probably) should know better. 120 | - [Postdoc myths](https://www.cs.kent.ac.uk/people/staff/srk21/blog/2019/12/02/) - “Lots of things are said, written and believed about postdoctoral researchers that are simply not true.” 121 | 122 | ## Emails 123 | 124 | - [Falsehoods about Email](https://beesbuzz.biz/code/439-Falsehoods-programmers-believe-about-email) - On addresses, content and delivery. 125 | - [I Knew How to Validate an Email Address Until I Read the RFC](https://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx/) - Provides intricate examples that are unsuspected valid email addresses according the RFC-822. 126 | - [So you think you can validate email addresses (FOSDEM 2018)](https://fosdem.org/2018/schedule/event/email_address_quiz/) - Presentation of edge-case email addresses and why you should not use regex to parse them. 127 | - [Your E-Mail Validation Logic is Wrong](https://www.netmeister.org/blog/email.html) - A summary of the various, surprising things that are allowed in an email address. 128 | - [`libvldmail`](https://github.com/dertuxmalwieder/libvldmail) - A library that implements RFC-based checks for e-mail addresses. 129 | 130 | ## Geography 131 | 132 | - [Falsehoods about Geography](https://wiesmann.codiferes.net/wordpress/archives/15187) - Takes on places, their names and locations. 133 | - [Falsehoods about Maps](http://www.atlefren.net/post/2014/09/falsehoods-programmers-believe-about-maps/) - Covers coordinates, projection and GIS. 134 | - [I Hate Coordinate Systems](https://ihatecoordinatesystems.com) - A guide for geospatial practitioners on diagnosing and fixing common issues with coordinate systems. 135 | - [Top 5 most insane kanji place names in Japan](https://web.archive.org/web/20210310050932/https://soranews24.com/2016/12/01/w-t-f-japan-top-5-most-insane-kanji-place-names-in-japan%E3%80%90weird-top-five%E3%80%91/) - “There's one special group of kanji that's hard even for Japanese people to read: place names.” 136 | 137 | ## Human Identity 138 | 139 | - [Falsehoods about Names](https://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/) - The article that started it all. 140 | - [Falsehoods about Names – With Examples](https://shinesolutions.com/2018/01/08/falsehoods-programmers-believe-about-names-with-examples/) - A revisited version of the article above, this time with detailed explanations. 141 | - [Falsehoods about Biometrics](https://shkspr.mobi/blog/2021/01/falsehoods-programmers-believe-about-biometrics/) - Fingerprints are not unique. 142 | - [Falsehoods about Families](https://shkspr.mobi/blog/2017/03/falsehoods-programmers-believe-about-families/) - You can't really define a family with strict rules. 143 | - Falsehoods about Gender: [#1](https://gist.github.com/garbados/f82604ea639e0e47bf44) & [#2](https://medium.com/gender-2-0/falsehoods-programmers-believe-about-gender-f9a3512b4c9c) - Gender is part of human identity and has its own subtleties. 144 | - [Falsehoods about Me](https://skylarmacdonald.com/falsehoods/) - Issues at the intersection of names and gender and internationalization. 145 | - [Gay Marriage: The Database Engineering Perspective](https://web.archive.org/web/20170914014648/https://qntm.org/gay) - How to store a marriage in a database while addressing most of the falsehoods about gender, naming and relationships. 146 | - [Personal Names Around the World](https://www.w3.org/International/questions/qa-personal-names) - How do people's names differ around the world, and what are the implications for the Web? 147 | - [XKCD #327: Exploits of a Mom](https://xkcd.com/327/) - Funny take on how implementation of a falsehood might lead to security holes. 148 | - [Hello, I'm Mr. Null. My Name Makes Me Invisible to Computers](https://www.wired.com/2015/11/null/) - Real-life example on how implemented falsehood has negative impact on someone's life. 149 | - [HL7 v3 RIM](https://www.hl7.org/implement/standards/product_brief.cfm?product_id=186) - A flexible data model for representing human names. 150 | - [Apple iOS `NSPersonNameComponentsFormatter`](https://developer.apple.com/library/ios/documentation/Miscellaneous/Reference/NSPersonNameComponentsFormatter_Class/index.html) - Localized representations of the components of a person's name. 151 | 152 | ## Internationalization 153 | 154 | On character encoding, string formatting, unicode and internationalization. 155 | 156 | - [Falsehoods about Language](http://garbled.benhamill.com/2017/04/18/falsehoods-programmers-believe-about-language) - Translating a software from English is not as straightforward as it seems to be. 157 | - [Falsehoods about Language](https://www.lexiconista.com/falsehoods-about-languages/) - Additional cases to complement the previous article. 158 | - [Falsehoods about Plain Text](https://jeremyhussell.blogspot.com/2017/11/falsehoods-programmers-believe-about.html#main) - Plain text can't cut it, which makes Unicode even more incredible for its ability to just work well. 159 | - [Falsehoods about text](https://wiesmann.codiferes.net/wordpress/archives/30296) - A subset of the falsehoods from above, illustrated with some examples. 160 | - [Internationalis(z)ing Code](https://www.youtube.com/watch?v=0j74jcxSunY) - A video about things you need to keep in mind when internationalizing your code. 161 | - [Minimum to Know About Unicode and Character Sets](https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/) - A good introduction to unicode, its historical context and origins, followed by an overview of its inner working. 162 | - [Awesome Unicode](https://github.com/Wisdom/Awesome-Unicode) - A curated list of delightful Unicode tidbits, packages and resources. 163 | - [Dark corners of Unicode](https://eev.ee/blog/2015/09/12/dark-corners-of-unicode/) - Unicode is extensive, here be dragons. 164 | - [Let's Stop Ascribing Meaning to Code Points](https://manishearth.github.io/blog/2017/01/14/stop-ascribing-meaning-to-unicode-code-points/) - Dives deeper in Unicode and dispels myths about code points. 165 | - [Unicode misconceptions](https://jean.abou-samra.fr/blog/unicode-misconceptions/) - A collection of falsehoods on case, encodings, string length, and more. 166 | - [Breaking Our `Latin-1` Assumptions](https://manishearth.github.io/blog/2017/01/15/breaking-our-latin-1-assumptions/) - Most programmers spend so much time with `Latin-1` they forgets about other's scripts quirks. 167 | - [Ode to a shipping label](http://i.imgur.com/4J7Il0m.jpg) - Character encoding is hard, more so when each broken layer of data input adds its own spice. 168 | - [Localization Failure: Temperature is Hard](https://randomascii.wordpress.com/2023/10/17/localization-failure-temperature-is-hard/) - You cannot localize temperature differences as-is. 169 | - [i18n Testing Data](https://github.com/patch/i18n-testing) - Compilation of real-word international and diverse name data for unit testing and QA. 170 | - [Big List of Naughty Strings](https://github.com/minimaxir/big-list-of-naughty-strings) - A huge corpus of strings which have a high probability of causing issues when used as user-input data. A must have set of practical edge-cases to test your software against. 171 | 172 | ## Management 173 | 174 | - [Falsehoods about Job Applicants](https://web.archive.org/web/20170114022820/https://medium.com/@creatrixtiara/falsehoods-programmers-believe-about-job-applicants-99280437c616) - Assumptions about job applicants and their job histories aren't necessarily true. 175 | 176 | ## Multimedia 177 | 178 | - [Falsehoods about Video](https://haasn.xyz/posts/2016-12-25-falsehoods-programmers-believe-about-%5Bvideo-stuff%5D.html) - Cover it all: video decoding and playback, files, image scaling, color spaces and conversion, displays and subtitles. 179 | - [Horrible edge cases to consider when dealing with music](https://dustri.org/b/horrible-edge-cases-to-consider-when-dealing-with-music.html) - Music catalogs data are full of crazy stuff. 180 | - [MusicBrainz database schema](https://musicbrainz.org/doc/MusicBrainz_Database/Schema) - An open-source project and database that seems to have solved the complexity of music catalog management. 181 | - [DDEX](https://ddex.net/standards/) - The industry standard for music metadata, including archiving, sound recording, sales and usage reporting, royalties and license deals. 182 | - [Apple Music Style Guide](https://help.apple.com/itc/musicstyleguide/en.lproj/static.html) - Quality insurance guidelines to format music, art, and metadata to increase discoverability. 183 | 184 | ## Networks 185 | 186 | - [Falsehoods about Networks](http://blog.erratasec.com/2012/06/falsehoods-programmers-believe-about.html) - Covers TCP, DHCP, DNS, VLANs and IPv4/v6. 187 | - [Fallacies of Distributed Computing](https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing) - Assumptions that programmers new to distributed applications invariably make. 188 | - [There's more than one way to write an IP address](https://ma.ttias.be/theres-more-than-one-way-to-write-an-ip-address/) - Some parts of the address are optional, mind the decimal and octal notations, and [don't forget IPv6](https://news.ycombinator.com/item?id=20390981) either. 189 | - [IDN is crazy](https://daniel.haxx.se/blog/2022/12/14/idn-is-crazy/) - International characters in domain names mean support of homographs and heterographs. 190 | - [`hostname-validate`](https://github.com/jakeogh/hostname-validate) - An attempt to validate hostnames in Python. 191 | 192 | ## Phone Numbers 193 | 194 | - [Falsehoods about Phone Numbers](https://github.com/googlei18n/libphonenumber/blob/master/FALSEHOODS.md) - Covers phone numbers, their representation and meaning. 195 | - [`libphonenumber`](https://github.com/googlei18n/libphonenumber) - Google's common Java, C++ and JavaScript library for parsing, formatting, and validating international phone numbers. Also available for [C#](https://github.com/twcclegg/libphonenumber-csharp), [Objective-C](https://github.com/iziz/libPhoneNumber-iOS), [Python](https://github.com/daviddrysdale/python-phonenumbers), [Ruby](https://github.com/sstephenson/global_phone) and [PHP](https://github.com/giggsey/libphonenumber-for-php). 196 | 197 | ## Postal Addresses 198 | 199 | - [Falsehoods about Addresses](https://www.mjt.me.uk/posts/falsehoods-programmers-believe-about-addresses/) - Covers streets, postal codes, buildings, cities and countries. 200 | - [Falsehoods about Residence](https://twitter.com/samphippen/status/813896916534784004) - It's not only about the address itself, but the relationship between a person and its residence. 201 | - [Letter Delivered Despite No Name, No Address](https://twitter.com/loriskumo/status/735851511331356672) - Ultimate falsehood about postal addresses: you do not need one. 202 | - [UK Address Oddities](https://paulplowman.com/stuff/uk-address-oddities/) - Quirks extracted from a list of most residential property sales in England and Wales since 1995. 203 | - [What is the Most Minimal UK Address Possible?](https://microblog.vladh.net/posts/most-minimal-uk-address/) - The trick is to rely on postcodes, which in the UK are pretty specific and “often identify one or a few specific buildings, unlike countries where a postcode represents an entire neighbourhood”. 204 | - [The Bear with Its Own ZIP Code](https://kottke.org/19/08/the-bear-with-its-own-zip-code) - Smokey Bear has his own ZIP Code (`20252`) because he gets so much mail. 205 | - [Why doesn't Costa Rica use real addresses?](https://www.crcdaily.com/p/why-doesnt-costa-rica-use-real-addresses) - Costa Rican uses an idiosyncratic system of addresses that relies on landmarks, history and quite a bit of guesswork. 206 | - [Regex and Postal Addresses](https://smartystreets.com/articles/regular-expressions-for-street-addresses) - Why regular expressions and street addresses do not mix. 207 | - [Parsing the Infamous Japanese Postal CSV](https://www.dampfkraft.com/posuto.html) - “I saw many horrors, but I've never seen this particular formatting choice anywhere else.” 208 | - [USPS Postal Addressing Standards](https://pe.usps.com/text/pub28/welcome.htm) - Describes both standardized address formats and content. 209 | - [`libaddressinput`](https://github.com/googlei18n/libaddressinput) - Google's common C++ and Java library for parsing, formatting, and validating international postal addresses. 210 | - [`addressing`](https://github.com/commerceguys/addressing) - A PHP 5.4+ addressing library, powered by Google's dataset. 211 | - [`postal-address`](https://github.com/scaleway/postal-address) - Python module to parse, normalize and render postal addresses. 212 | - [`address`](https://github.com/Boostport/address) - Go library to validate and format addresses using Google's dataset. 213 | 214 | ## Science 215 | 216 | - [Falsehoods about Systems of Measurement](https://www.stevemoser.org/posts/dev/falsehoods-programmers-believe-about-systems-of-measurement.html) - On working with systems of measurement and converting between them. 217 | 218 | ## Society 219 | 220 | - [Falsehoods about Political Appointments](https://twitter.com/oliver_dw/status/737930439575404544) - Designing election systems has its own tricks. 221 | - [Falsehoods about Women In Tech](https://gist.github.com/Su-Shee/5d1a417fa9de19c15477) - Myth about women in STEM (Science, Technology, Engineering, Math) industries. 222 | 223 | ## Software Engineering 224 | 225 | - [Falsehoods about Versions](https://github.com/xenoterracide/falsehoods/blob/master/versions.md) - Attributing an identity to a software release might be harder than thought. 226 | - [Falsehoods about Build Systems](https://pozorvlak.livejournal.com/174763.html) - Building software is hard. Building software that builds software is harder. 227 | - [Falsehoods about Undefined Behavior](https://predr.ag/blog/falsehoods-programmers-believe-about-undefined-behavior/) - Invoking undefined behavior can cause *anything* to happen, for a much broader definition of "anything" than one might think. 228 | - [Myths about CPU Caches](https://software.rajivprab.com/2018/04/29/myths-programmers-believe-about-cpu-caches/) - Misconceptions about caches often lead to false assertions, especially when it comes to concurrency and race conditions. 229 | - [Falsehoods about null pointers](https://purplesyringa.moe/blog/falsehoods-programmers-believe-about-null-pointers/) - Null pointers are even more cursed than pointers in general, and provenance already makes pointers quite complicated. 230 | - [Falsehoods about CSVs](https://donatstudios.com/Falsehoods-Programmers-Believe-About-CSVs) - While RFC4180 to exists, it is far from definitive and goes largely ignored. 231 | - [Falsehoods about Package Managers](https://kdeldycke.github.io/meta-package-manager/falsehoods.html) - Covers package and their managers. 232 | - [Falsehoods about Testing](https://club.ministryoftesting.com/t/falsehoods-testers-believe/1371) - An attempt to establish a list of falsehoods about testing. 233 | - [Falsehoods about Search](https://opensourceconnections.com/blog/2019/05/29/falsehoods-programmers-believe-about-search/) - Why search (including analysis, tokenization, highlighting) is deceptively complex. 234 | - [What every software engineer should know about search](https://scribe.rip/p/what-every-software-engineer-should-know-about-search-27d1df99f80d) - A better sourced article on the difficulty of implementing search engines. 235 | - [Falsehoods about Pagination](https://www.hezmatt.org/~mpalmer/blog/2018/12/12/falsehoods-programmers-believe-about-pagination.html) - Why your pagination algorithm is giving someone (possibly you) a headache. 236 | - [Falsehoods about garbage collection](https://paul.bone.id.au/blog/2018/10/19/gc-falsehoods/) - Misconceptions about the predictability and performance of garbage collection. 237 | - [Myths about File Paths](https://yakking.branchable.com/posts/falsehoods-programmers-believe-about-file-paths/) - Diversity of file-systems and OSes makes file paths a little harder than we might think of. 238 | - [The weird world of Windows file paths](https://www.fileside.app/blog/2023-03-17_windows-file-paths/) - “On any Unix-derived system, a path is an admirably simple thing: if it starts with a `/`, it's a path. Not so on Windows.” 239 | - [Myths about `/dev/urandom`](https://www.2uo.de/myths-about-urandom) - There are a few things about `/dev/urandom` and `/dev/random` that are repeated again and again. Still they are false. 240 | - [Facts about State Machines](https://codeberg.org/catseye/The-Dossier/src/branch/master/article/Facts-about-State-Machines/README.md) - State machines are often misunderstood and under-applied. 241 | - [Hi! My name is…](https://www.youtube.com/watch?v=NIebelIpdYk) - This talk could have been named *falsehoods about usernames (and other identifiers)*. 242 | - [Popular misconceptions about `mtime`](https://apenwarr.ca/log/20181113) - Part of a post on why file's `mtime` comparison could be considered harmful. 243 | - [Rules for Autocomplete](http://jeremymikkola.com/posts/2019_03_19_rules_for_autocomplete.html) - Not falsehoods *per se*, but still a great list of good practices to implement autocompletion. 244 | - [Floating Point Math](https://0.30000000000000004.com) - “Your language isn't broken, it's doing floating point math. (…) This is why, more often than not, `0.1 + 0.2 != 0.3`.” 245 | - [The yaml document from hell](https://ruudvanasseldonk.com/2023/01/11/the-yaml-document-from-hell) - YAML is full of obscure complexity like accidental numbers and non-string keys. 246 | - [I am endlessly fascinated with content tagging systems](https://twitter.com/hillelogram/status/1534301374166474752) - There are edge-cases even in tagging systems which are supposed to be barebone. 247 | - [Falsehoods about Quantum Technology](https://github.com/gottfriedsz/falsehoods-quantum) - Common misconceptions about quantum technology and computers. 248 | - [Falsehoods about Event-Driven Systems](https://dimtion.fr/blog/falsehoods-event-driven/) - Misconceptions about event driven systems and message passing. 249 | - [Falsehoods about Digital Object Identifiers (DOIs)](https://pardalotus.tech/posts/2024-10-02-falsehoods-programmers-believe-about-dois/) - False conceptions about the identifiers that are used to identify and link research outputs (and a lot of other things). 250 | - [Falsehoods about CVE](https://medium.com/@jonathan.leitschuh/falsehoods-people-believe-about-cves-85c1d063ffda) - CVE ≠ vulnerability (and 36 other confusions). 251 | 252 | ## Transportation 253 | 254 | - [Falsehoods about Cars](https://github.com/driveto/falsehoods-about-cars) - Even something as common as defining a car is full of pitfalls. 255 | - [Falsehoods about Airline Seat Maps](https://duffel.com/blog/falsehoods-about-seat-maps) - Airline seat maps are far more complex than just neat rows and columns of seats. 256 | - [The Maddening Mess of Airport Codes](https://www.youtube.com/watch?v=jfOUVYQnuhw) - Having multiple international and national agencies trying to reconcile history, practicality and logistics makes codes follow arcane rules. 257 | - [My name causes an issue with any booking!](https://travel.stackexchange.com/questions/149323/my-name-causes-an-issue-with-any-booking-names-end-with-mr-and-mrs) - Old airline reservation systems considers the `MR` suffix as `Mister` and drops it. 258 | 259 | ## Typography 260 | 261 | - [Falsehoods about Fonts](https://github.com/RoelN/Font-Falsehoods) - Assumptions about typography on the web and in desktop applications. 262 | - [Truths programmers should know about case](https://www.b-list.org/weblog/2018/nov/26/case/) - A complete reverse of the falsehoods format, on the topic of case (as in uppercase and lowercase text). 263 | 264 | ## Video Games 265 | 266 | - [The Door Problem](https://lizengland.com/blog/2014/04/the-door-problem/) - All the things you have not considered implementing for your doors in games. 267 | 268 | ## Web 269 | 270 | - [Falsehoods about HTML](https://www.aartaka.me.eu.org/falsehoods-html) - “Web is beautiful. Web is ugly. Web is astonishing. A part of this appeal is HTML, with its historical quirks.” 271 | - [Falsehoods about REST APIs](https://web.archive.org/web/20201112010147/http://slinkp.com/falsehoods-programmers-believe-about-apis.html) - Pitfalls to be mindful of when creating and documenting APIs. 272 | - [URLs: It's complicated…](https://www.netmeister.org/blog/urls.html) - There's a lot of components in an URL, and all have their own logic. 273 | - [The Hidden Complexity of Downloading Favicons, Told in 15+ Edge Cases](https://web.archive.org/web/20230604033340/https://www.simplecto.com/complexity-downloading-favicons-told-in-15-plus-edge-cases/) - Downloading that little icon you see in you browser tabs should be a simple exercise. It turned out to be a lot more complicated than you think. Be vigilant that you are not shaving a Yak. 274 | 275 | ## Contributing 276 | 277 | Your contributions are always welcome! Please take a look at the [contribution guidelines](https://github.com/kdeldycke/awesome-falsehood/blob/main/.github/contributing.md) first. 278 | 279 | ## Footnotes 280 | 281 | This list gathered some popularity in social medias over the past few years. See it being [discussed and mentioned elsewhere](https://github.com/kdeldycke/kdeldycke/blob/main/in-the-media.md). 282 | 283 | The [header image](https://github.com/kdeldycke/awesome-falsehood/blob/main/assets/awesome-falsehood-header.jpg) is based on a modified [photo taken in February 2010 by Iza Bella](https://commons.wikimedia.org/wiki/File:BLW_Truth_and_Falsehood.jpg), distributed under a [Creative Commons BY-SA 2.0 UK license](https://creativecommons.org/licenses/by-sa/2.0/uk/deed.en). 284 | 285 | 286 | 287 | \[1\]: [*Notebooks, 1914-1916*](https://www.amazon.com/dp/1324090804?&linkCode=ll1&tag=kevideld-20&linkId=a1903c3fbfdc82fbe2e566fca40718fb&language=en_US&ref_=as_li_ss_tl) (Liveright, 2022) - [source: page 14e](https://archive.org/details/notebooks191419100witt/page/n35). [\[↑\]](#intro-quote-ref) 288 | -------------------------------------------------------------------------------- /readme.zh.md: -------------------------------------------------------------------------------- 1 | 2 | 3 |

4 | 5 | Awesome Falsehood header image 6 | 7 |

8 | 9 |

10 | 11 | 产品展示! 12 |
13 | 使用GitHub赞助可以在这添加你的公司或产品链接. 14 |
15 |

16 | 17 | --- 18 | 19 |

20 | English 21 | 中文 22 |

23 | 24 |

25 | 世界的逻辑在所有真理和虚假之前.
26 | — 路德维希·维特根斯坦[1] 27 |

28 | 29 | 一个精心策划的 [![Awesome](https://awesome.re/badge-flat.svg)](https://github.com/sindresorhus/awesome) 程序员谬误清单. *谬误* 指的是你最初相信的 *观点*,但是它被证明是错的. 30 | 31 | 举个例子, 一个*观点*: 有效的电子邮件地址恰好有一个 `@` 字符. 因此,你会使用这个规则来实现你的电子邮件字段验证逻辑。对吗?错了! *实际* 是: 电子邮件可以有多个 `@` 字符. 32 | 因此,你的实现应该允许这种情况。最初的*观点*是你曾经相信的一个谬误. 33 | 34 | 下面列出的*谬误*文章将提供一个全面的列表,帮助你了解这些错误信念,以便让你成为一个更优秀的程序员. 35 | 36 | ## 目录 37 | 38 | 39 | 40 | - [元](#元) 41 | - [艺术](#艺术) 42 | - [业务](#业务) 43 | - [加密货币](#加密货币) 44 | - [日期和时间](#日期和时间) 45 | - [教育](#教育) 46 | - [邮件](#邮件) 47 | - [地理](#地理) 48 | - [人类身份](#人类身份) 49 | - [国际化](#国际化) 50 | - [管理](#管理) 51 | - [多媒体](#多媒体) 52 | - [网络](#网络) 53 | - [电话号码](#电话号码) 54 | - [邮政编码](#邮政编码) 55 | - [科学](#科学) 56 | - [社会](#社会) 57 | - [软件工程](#软件工程) 58 | - [交通](#交通) 59 | - [排版](#排版) 60 | - [视频游戏](#视频游戏) 61 | - [Web](#web) 62 | 63 | 64 | 65 | ## 元 66 | 67 | - [程序员的谬误](https://spaceninja.com/2015/12/07/falsehoods-programmers-believe/) - 常见谬误的简要清单. 对谬误世界的精彩概述与快速入门介绍. 68 | - [编程的谬误](https://chiselapp.com/user/ttmrichter/repository/gng/doc/trunk/output/falsehoods.html) - 让程序员有点丢人但有趣谬误列表. 69 | - [对谬误列表的误解](https://kevin.deldycke.com/2016/falsehoods-programmers-believe-about-falsehoods-lists) - "不应该这么对待谬误的说明". 70 | 71 | ## 艺术 72 | 73 | - [音乐的谬误](https://literateprogrammer.blogspot.fr/2016/07/falsehoods-programmers-believe-about.html) - 在编纂音乐时可能产生的错误假设. 74 | - [艺术的谬误](http://artsy.github.io/blog/2018/04/18/programmer-misconceptions-about-art/) - 对艺术的常见误解. 75 | 76 | ## 业务 77 | 78 | - [网上购物的谬误](https://wiesmann.codiferes.net/wordpress/archives/22201) - 涵盖价格、货币和库存. 79 | - [价格谬误](https://gist.github.com/rgs/6509585) - 涵盖货币、金额和本地化. 80 | - [IBAN谬误](https://github.com/globalcitizen/php-iban/blob/master/docs/FALSEHOODS.md) - 国际银行账户号码并不是全球统一的. 81 | - [经济学谬误](http://exple.tive.org/blarg/2016/09/22/falsehoods-programmers-believe-about-economics/) - 经济学不简单,也不理性. 82 | - [Etsy会计系统的小数点错误](https://www.reddit.com/r/Etsy/comments/hz4877/if_you_are_an_etsy_seller_do_not_purchase_postage/) - 会计软件中类型的重要性:漏掉小数点会导致多收费100倍. 83 | - [两万五千刀的水分资金](http://rachelbythebay.com/w/2022/12/02/25k/) - 这种把美元和美分切割的错误同样出现在谷歌广告中,把 250美元的内部优惠券变成了 25000美元. 我的建议是: [货币值抛弃小数和浮点数. 用 decimals. 或者用回字符串解析, 而不校验.](https://twitter.com/kdeldycke/status/1599113889093890049) 84 | - [公司名称中的`<` 和 `>`会导致XSS攻击](https://forum.aws.chdev.org/t/cross-site-scripting-xss-software-attack/3355) - 因为 [英国允许用特殊字符注册公司](https://www.legislation.gov.uk/uksi/2015/17/schedule/1/made), 一个骇客利用这种方式注册 `\"> LTD`, but also `; DROP TABLE "COMPANIES";-- LTD`, `BETTS & TWINE LTD` and `SAFDASD & SFSAF \' SFDAASF\" LTD`. 85 | - [公司名称的细节](https://twitter.com/nthnmsmth/status/1587880523124408322) - 怎么让特拉华州和国税局的规则不冲突. 86 | - [CLDR货币定义](https://github.com/unicode-org/cldr/blob/release-40/common/supplemental/supplementalData.xml#L87-L94) - 由于 叛乱、侵略、新法和缓慢的推进的计划,货币的有效日期范围出现重叠. 87 | - [`税`](https://github.com/commerceguys/tax) - 一个PHP 5.4 的税务管理库. 88 | 89 | ## 加密货币 90 | 91 | - [比特币谬误](https://github.com/theborakompanioni/spring-boot-bitcoin-starter/blob/master/docs/FALSEHOODS.md) - 关于比特币的错误观点列表. 92 | - [以太坊谬误](https://gist.github.com/spalladino/a349f0ca53dbb5fc3914243aaf7ea8c6) - 合约编程的误解和常见陷阱. 93 | 94 | ## 日期和时间 95 | 96 | - [时间谬误](http://infiniteundo.com/post/25326999628/falsehoods-programmers-believe-about-time) - 关于时间和日期的开创性文章. 97 | - [更多的时间谬误](http://infiniteundo.com/post/25509354022/more-falsehoods-programmers-believe-about-time) - 上文的第二部分. 98 | - [时间和时区谬误](https://www.creativedeletion.com/2015/01/28/falsehoods-programmers-date-time-zones.html) - 另一个关于时间的谬误,重点在于时区. 99 | - [对时间谬误的批判](https://gist.github.com/thanatos/eee17100476a336a711e) - 源自上文的第一篇文章,对每一个谬误进行了解释, 有更多的背景和外部资源. 100 | - [Unix时间谬误](https://alexwlchan.net/2019/05/falsehoods-programmers-believe-about-unix-time/) - 注意润秒! 101 | - [时区谬误](https://www.zainrizvi.io/blog/falsehoods-programmers-believe-about-time-zones/) - 关于 DST 转换的边缘情况有一些不错的观点. 102 | - [日历谬误](http://yourcalendricalfallacyis.com) - 一个涵盖插值和文化影响的清单,由 iOS 和 macOS 开发者社区制作. 103 | - [时区数据库](https://www.iana.org/time-zones) - 全球许多代表性地点当地时间历史的代码和数据. 104 | - [漫长而痛苦的时间史](http://naggum.no/lugm-time.html) - 时间记录中的大多数特殊性都可以在历史中找到解释. 105 | - [你提倡日历改革](https://qntm.org/calendar) - 这篇文章告诉你为什么你的想法行不通. 106 | - [所以你想废除时区](https://qntm.org/abolish) - 废除时区听起来似乎是个好主意,但有很多复杂因素让它似乎没那么好. 107 | - [时间和时区的问题](https://www.youtube.com/watch?v=-5wpm-gesOY) - 一个视频,介绍了为什么"非必要不处理时区". 108 | - [劳动部门超额征收 26000刀](http://digital.vpr.net/post/rounding-error-computer-code-leads-26000-overcollection-labor-department) - 错误的日历计算带来的后果. 109 | - [RFC-3339 vs ISO-8601](https://ijmacd.github.io/rfc3339-iso8601/) - 一份包含两个标准的格式列表,展示了它们的重叠部分及实际示例. 110 | - [ISO-8601, `YYYY`, `yyyy`, 为什么你的年份是错的](https://ericasadun.com/2018/12/25/iso-8601-yyyy-yyyy-and-why-your-year-may-be-wrong/) - 日期的字符串格式化很难. 111 | - [UTC对于每个人来说都够了,对吗?](https://zachholman.com/talk/utc-is-enough-for-everyone-right) - 你可能没有想到关于日期和时间(特别是 UTC)的一些边缘情况. 112 | - [存储 UTC 不是灵丹妙药](https://codeblog.jonskeet.uk/2019/03/27/storing-utc-is-not-a-silver-bullet/) - "只存 UTC" 并不总是对的. 113 | - [如何在 UT1、TAI 和 UTC 之间进行选择](https://news.ycombinator.com/item?id=28047376) - 这取决于你对 SI 秒、地球自转同步和避免闰秒的优先级. 114 | - [为什么 1927年的这两个时间想减得到了奇怪的结果?](https://stackoverflow.com/a/6841479/57311) - 臭名昭著的 Stack Overflow 答案,涉及复杂的历史时区,以及如何通过新版本的软件重新解释历史日期. 115 | - [至关重要的日期](https://web.archive.org/web/20150908004245/http://www.merlyn.demon.co.uk/critdate.htm) - 从 Y2K 到 Unix 纪元的 32 位秒溢出,列出了一些特殊日期,需根据系统进行关注. 116 | - “我要去佛蒙特的一个公社,期间不打算处理比一个季节更短的时间单位” - 这是一个在 70 年代辞职的工程师留下的留言,他在处理亚秒级计时问题上付出了过多的努力. 出处: [The Soul of a New Machine](https://www.amazon.com/dp/0316491705?&linkCode=ll1&tag=kevideld-20&linkId=ec2881e22fb26c2d43de0daeebd5424d&language=en_US&ref_=as_li_ss_tl). 117 | 118 | ## 教育 119 | 120 | - [计算机科学的学生毕业后(仍然)相信的谎言](https://www.netmeister.org/blog/cs-falsehoods.html) - 一个关于事情的清单(不仅限于)计算机科学学生常常错误地、甚至令人惊讶地相信的观点,尽管他们(可能)应该更了解真相. 121 | - [博士后流言](https://www.cs.kent.ac.uk/people/staff/srk21/blog/2019/12/02/) - “关于博士后研究人员,有很多言论、文章和信念都是完全不真实的.” 122 | 123 | ## 邮件 124 | 125 | - [邮件谬误](https://beesbuzz.biz/code/439-Falsehoods-programmers-believe-about-email) - 关于地址、内容和交付. 126 | - [我以为我知道如何验证邮件地址,直到我读了 RFC](https://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx/) - 提供一些复杂的例子,这些例子是根据 RFC-822 标准认为有效的电子邮件地址. 127 | - [所以你认为你可以验证邮件地址 (FOSDEM 2018)](https://fosdem.org/2018/schedule/event/email_address_quiz/) - 边缘案例电子邮件地址的展示以及为何不应使用正则表达式来解析它们. 128 | - [你的邮件验证的逻辑是错的](https://www.netmeister.org/blog/email.html) - 电子邮件地址中允许的各种令人惊讶的内容总结. 129 | - [`libvldmail`](https://github.com/dertuxmalwieder/libvldmail) - 一个实现基于 RFC 的邮件地址检查的库. 130 | 131 | ## 地理 132 | 133 | - [地理谬误](https://wiesmann.codiferes.net/wordpress/archives/15187) - 讨论地点、它们的名称和位置. 134 | - [地图谬误](http://www.atlefren.net/post/2014/09/falsehoods-programmers-believe-about-maps/) - 涵盖坐标、投影和 GIS. 135 | - [我讨厌坐标系](https://ihatecoordinatesystems.com) - 地理空间从业者关于诊断和修复坐标系统常见问题的指南. 136 | - [日本五个最离谱的汉字地名](https://web.archive.org/web/20210310050932/https://soranews24.com/2016/12/01/w-t-f-japan-top-5-most-insane-kanji-place-names-in-japan%E3%80%90weird-top-five%E3%80%91/) - "有一类特殊的汉字,对于日本人来说也很难读:地名." 137 | 138 | ## 人类身份 139 | - [名字谬误](https://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/) - 一切的开始. 140 | - [名字谬误 – 举例](https://shinesolutions.com/2018/01/08/falsehoods-programmers-believe-about-names-with-examples/) - 上面文章的重温版本,这次有详细的解释. 141 | - [生物识别谬误](https://shkspr.mobi/blog/2021/01/falsehoods-programmers-believe-about-biometrics/) - 指纹不是唯一的. 142 | - [家庭谬误](https://shkspr.mobi/blog/2017/03/falsehoods-programmers-believe-about-families/) - 你不能用严格的规则来定义一个家庭. 143 | - 性别谬误: [#1](https://gist.github.com/garbados/f82604ea639e0e47bf44) & [#2](https://medium.com/gender-2-0/falsehoods-programmers-believe-about-gender-f9a3512b4c9c) - 性别是人类身份的一部分,具有其自身的复杂性. 144 | - [关于我的谬误](https://skylarmacdonald.com/falsehoods/) - 姓名、性别与国际化交叉的问题. 145 | - [同性婚姻: 数据库工程视角](https://web.archive.org/web/20170914014648/https://qntm.org/gay) - 如何在数据库中存储婚姻信息,同时解决关于性别、姓名和关系的多数谬误. 146 | - [世界各地人的名字](https://www.w3.org/International/questions/qa-personal-names) - 人们的姓名在世界各地有何不同,这对网络有什么影响? 147 | - [XKCD #327: 妈妈的壮举](https://xkcd.com/327/) - 关于如何实现一种可能导致安全漏洞的谬误的幽默解读. 148 | - [你好, 我是 Null 先生. 我的名字让计算机看不到我](https://www.wired.com/2015/11/null/) - 关于错误实现如何对某人生活产生负面影响的真实案例. 149 | - [HL7 v3 RIM](https://www.hl7.org/implement/standards/product_brief.cfm?product_id=186) - 用于表示人类姓名的灵活数据模型. 150 | - [Apple iOS `NSPersonNameComponentsFormatter`](https://developer.apple.com/library/ios/documentation/Miscellaneous/Reference/NSPersonNameComponentsFormatter_Class/index.html) - 一个人姓名各个组成部分的本地化表示. 151 | 152 | ## 国际化 153 | 154 | 关于字符编码,字符串格式,Unicode 和国际化. 155 | 156 | - [语言谬误](http://garbled.benhamill.com/2017/04/18/falsehoods-programmers-believe-about-language) - 把软件从英文翻译成其他语言并不像看起来那么简单. 157 | - [语言谬误](https://www.lexiconista.com/falsehoods-about-languages/) - 补充上一篇文章的其他情况。 158 | - [纯文本谬误](https://jeremyhussell.blogspot.com/2017/11/falsehoods-programmers-believe-about.html#main) - 纯文本难以满足需求,而 Unicode 的强大在于其能够良好运作,显得尤为出色. 159 | - [文本谬误](https://wiesmann.codiferes.net/wordpress/archives/30296) -以上谬误中的一部分,并附带一些示例说明. 160 | - [代码国际化](https://www.youtube.com/watch?v=0j74jcxSunY) - 关于在代码国际化时需要注意的事项的视频. 161 | - [关于Unicode 和字符集你至少应该知道的](https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/) - 对unicode很棒的介绍, 包括其历史背景和起源,随后概述其内部工作原理. 162 | - [Awesome Unicode](https://github.com/Wisdom/Awesome-Unicode) - 精心总结的 Unicode 小知识、软件包和资源清单. 163 | - [Unicode的黑暗角落](https://eev.ee/blog/2015/09/12/dark-corners-of-unicode/) - Unicode 非常庞大,小心其中的陷阱. 164 | - [别给码位加戏了](https://manishearth.github.io/blog/2017/01/14/stop-ascribing-meaning-to-unicode-code-points/) - 深入探讨 Unicode,并揭穿关于码位的流言. 165 | - [Unicode谬误](https://jean.abou-samra.fr/blog/unicode-misconceptions/) - 一系列关于大小写、编码、字符串长度等的谬误. 166 | - [打破我们对 `Latin-1` 的假设](https://manishearth.github.io/blog/2017/01/15/breaking-our-latin-1-assumptions/) - 大多数程序员在'Latin-1'上花了太多时间,以至于忘记了其他脚本的特点. 167 | - [致货运标签](http://i.imgur.com/4J7Il0m.jpg) - 字符编码很复杂,尤其是当每一层损坏的数据输入都增添了自己的复杂性时. 168 | - [本地化失败:困难的温度](https://randomascii.wordpress.com/2023/10/17/localization-failure-temperature-is-hard/) - 你无法直接对温差进行本地化处理. 169 | - [国际化测试数据](https://github.com/patch/i18n-testing) - 用于单元测试和质量保证的真实词汇的国际和多样化姓名数据集汇编. 170 | - [违规字符串大集合](https://github.com/minimaxir/big-list-of-naughty-strings) - 一个庞大的字符串语料库,当作为用户输入数据时,很有可能导致问题. 必须有一组有效的边缘案例来测试您的软件. 171 | 172 | ## 管理 173 | 174 | - [求职者谬误](https://web.archive.org/web/20170114022820/https://medium.com/@creatrixtiara/falsehoods-programmers-believe-about-job-applicants-99280437c616) - 关于求职者及其工作经历的假设未必准确。. 175 | 176 | ## 多媒体 177 | 178 | - [视频谬误](https://haasn.xyz/posts/2016-12-25-falsehoods-programmers-believe-about-%5Bvideo-stuff%5D.html) - 涵盖全部内容:视频解码与播放、文件、图像缩放、色彩空间与转换、显示设备和字幕. 179 | - [处理音乐时需要考虑的棘手边缘案例](https://dustri.org/b/horrible-edge-cases-to-consider-when-dealing-with-music.html) - 音乐目录数据中充满了各种奇葩内容. 180 | - [MusicBrainz数据库表](https://musicbrainz.org/doc/MusicBrainz_Database/Schema) - 一个开源的数据库项目,似乎解决了音乐目录管理的复杂性. 181 | - [DDEX](https://ddex.net/standards/) - 音乐元数据的行业标准,包括档案管理、声音录制、销售和使用报告、版权和许可协议. 182 | - [Apple Music 风格指南](https://help.apple.com/itc/musicstyleguide/en.lproj/static.html) - 提高可发现性的音乐、艺术和元数据格式的质量保证指南 183 | 184 | ## 网络 185 | 186 | - [网络谬误](http://blog.erratasec.com/2012/06/falsehoods-programmers-believe-about.html) - 包括 TCP, DHCP, DNS, VLANs 和 IPv4/v6. 187 | - [分布式计算谬误](https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing) - 新接触分布式应用的程序员不可避免的错误假设. 188 | - [IP地址不止一种写法](https://ma.ttias.be/theres-more-than-one-way-to-write-an-ip-address/) - 地址的某些部分是可选的,要注意十进制和八进制表示,而且 [别忘了 IPv6](https://news.ycombinator.com/item?id=20390981) . 189 | - [IDN 很疯狂](https://daniel.haxx.se/blog/2022/12/14/idn-is-crazy/) - 域名中的国际字符意味着支持同形异义词和异形异义词. 190 | - [`主机名-校验`](https://github.com/jakeogh/hostname-validate) - 一个尝试校验主机名的 python库. 191 | 192 | ## 电话号码 193 | 194 | - [电话号谬误](https://github.com/googlei18n/libphonenumber/blob/master/FALSEHOODS.md) - 包括电话号码,他们的表示和意义. 195 | - [`libphonenumber`](https://github.com/googlei18n/libphonenumber) - Google的一个通用库,用于解析,校验,格式化国际电话号码.包括Java, C++ 和 JavaScript.也能用于 [C#](https://github.com/twcclegg/libphonenumber-csharp), [Objective-C](https://github.com/iziz/libPhoneNumber-iOS), [Python](https://github.com/daviddrysdale/python-phonenumbers), [Ruby](https://github.com/sstephenson/global_phone) 和 [PHP](https://github.com/giggsey/libphonenumber-for-php). 196 | 197 | ## 邮政编码 198 | 199 | - [邮政编码谬误](https://www.mjt.me.uk/posts/falsehoods-programmers-believe-about-addresses/) -包括街道、邮政编码、建筑物、城市和国家. 200 | - [居住谬误](https://twitter.com/samphippen/status/813896916534784004) - 这不仅仅是地址本身的问题,而是一个人和它的住所之间的关系. 201 | - [尽管没有姓名和地址,信件仍被送达](https://twitter.com/loriskumo/status/735851511331356672) - 关于邮政地址的终极谬误:你并不需要这些信息. 202 | - [英国地址的奇特之处](https://paulplowman.com/stuff/uk-address-oddities/) - 从1995年以来英格兰和威尔士的大多数住宅物业销售列表中提取的奇特之处. 203 | - [什么是最简化的英国地址?](https://microblog.vladh.net/posts/most-minimal-uk-address/) - 诀窍在于依赖邮政编码,在英国,邮政编码非常具体,‘通常标识一栋或几栋特定的建筑,而不像某些国家那样,一个邮政编码代表整个社区’. 204 | - [拥有自己邮政编码的熊](https://kottke.org/19/08/the-bear-with-its-own-zip-code) - 斯莫基熊拥有自己的邮政编码('20252'),因为他收到的邮件太多. 205 | - [为什么哥斯达黎加不使用真实地址?](https://www.crcdaily.com/p/why-doesnt-costa-rica-use-real-addresses) - 哥斯达黎加使用一种特有的地址系统,该系统依赖于地标、历史和相当多的猜测。. 206 | - [正则表达式和邮政地址](https://smartystreets.com/articles/regular-expressions-for-street-addresses) - 为什么正则表达式和街道地址不相容. 207 | - [解析臭名昭著的日本邮政 CSV](https://www.dampfkraft.com/posuto.html) - "我见过许多可怕的事情,但从未在其他地方见过这种特殊的格式选择". 208 | - [USPS 邮政地址标准](https://pe.usps.com/text/pub28/welcome.htm) - 描述了标准化的地址格式和内容. 209 | - [`libaddressinput`](https://github.com/googlei18n/libaddressinput) - 谷歌用于解析、格式化和验证国际邮政地址的常用 C++ 和 Java 库. 210 | - [`addressing`](https://github.com/commerceguys/addressing) - 一个基于谷歌数据集的 PHP 5.4+ 地址库. 211 | - [`postal-address`](https://github.com/scaleway/postal-address) - 用于解析、标准化和渲染邮政地址的 Python 模块. 212 | - [`address`](https://github.com/Boostport/address) - 基于谷歌的数据集的用于验证和格式化地址的 Go 库. 213 | 214 | ## 科学 215 | 216 | - [关于测量系统的谬误](https://www.stevemoser.org/posts/dev/falsehoods-programmers-believe-about-systems-of-measurement.html) - 关于使用测量系统和它们之间转换的内容. 217 | 218 | ## 社会 219 | 220 | - [政治任命谬误](https://twitter.com/oliver_dw/status/737930439575404544) - 设计选举系统有其自身的技巧. 221 | - [科技领域的女性谬误](https://gist.github.com/Su-Shee/5d1a417fa9de19c15477) - 关于女性在 STEM(科学、技术、工程、数学)行业的流言. 222 | 223 | ## 软件工程 224 | 225 | - [版本谬误](https://github.com/xenoterracide/falsehoods/blob/master/versions.md) - 为软件发布分配一个身份可能比想象中要困难. 226 | - [构建系统谬误](https://pozorvlak.livejournal.com/174763.html) - 构建软件很难. 构建构建软件本身更难. 227 | - [Undefined行为谬误](https://predr.ag/blog/falsehoods-programmers-believe-about-undefined-behavior/) - 调用`undefined`行为可能导致任何事情发生,其范围比人们想象的要广得多. 228 | - [CPU 缓存流言](https://software.rajivprab.com/2018/04/29/myths-programmers-believe-about-cpu-caches/) - 关于缓存的误解常常导致错误的断言,特别是在并发和竞争条件方面. 229 | - [关于 null 指针的谬误](https://purplesyringa.moe/blog/falsehoods-programmers-believe-about-null-pointers/) - Null 指针通常比指针更受诅咒,并且出处已经使指针变得相当复杂。 230 | - [CSV谬误](https://donatstudios.com/Falsehoods-Programmers-Believe-About-CSVs) - 尽管 RFC4180 存在,但它远非权威,且在很大程度上被忽视. 231 | - [包管理谬误](https://kdeldycke.github.io/meta-package-manager/falsehoods.html) - 涵盖包及其管理工具. 232 | - [测试谬误](https://club.ministryoftesting.com/t/falsehoods-testers-believe/1371) - 试图建立关于测试的谬误列表. 233 | - [搜索谬误](https://opensourceconnections.com/blog/2019/05/29/falsehoods-programmers-believe-about-search/) - 为什么搜索(包括分析、分词、高亮)看上去那么复杂. 234 | - [每个软件工程师应该了解的搜索知识](https://scribe.rip/p/what-every-software-engineer-should-know-about-search-27d1df99f80d) - 一篇关于`实现一个搜索引擎有多难`的很棒的文章. 235 | - [分页谬误](https://www.hezmatt.org/~mpalmer/blog/2018/12/12/falsehoods-programmers-believe-about-pagination.html) - 为什么你的分页算法让某些人(可能是你自己)感到头痛. 236 | - [垃圾回收算法谬误](https://paul.bone.id.au/blog/2018/10/19/gc-falsehoods/) - 关于垃圾收集的可预测性和性能的误解. 237 | - [文件路径谬误](https://yakking.branchable.com/posts/falsehoods-programmers-believe-about-file-paths/) - 文件系统和操作系统的多样性使得文件路径比我们想象的要复杂一些. 238 | - [Windows文件路径的奇异世界](https://www.fileside.app/blog/2023-03-17_windows-file-paths/) - “在任何 Unix 衍生系统中,路径是一个令人钦佩的简单概念:如果它以 / 开头,那么它就是一个路径。但在 Windows 上情况并非如此。” 239 | - [`/dev/urandom` 流言](https://www.2uo.de/myths-about-urandom) - 关于 '/dev/urandom' 和 '/dev/random' 有一些反复出现的说法,但它们仍然是错误的. 240 | - [状态机事实](https://codeberg.org/catseye/The-Dossier/src/branch/master/article/Facts-about-State-Machines/README.md) - 状态机常常被误解并且应用不足. 241 | - [嗨! 我的名字是…](https://www.youtube.com/watch?v=NIebelIpdYk) - 这次演讲本可以命名为*关于用户名(和其他标识符)的谬误*. 242 | - [`mtime`的主流误解](https://apenwarr.ca/log/20181113) - 为什么文件的 `mtime` 有害的部分文章. 243 | - [自动补全规则](http://jeremymikkola.com/posts/2019_03_19_rules_for_autocomplete.html) - 并不严格是谬误,但仍然是实现自动补全功能的良好实践的优秀清单. 244 | - [浮点流言](https://0.30000000000000004.com) - “你的语言没坏, 它只是在进行浮点计算. (…) 这就是为什么经常发生 `0.1 + 0.2 != 0.3`. 245 | - [来自地狱的YAML文档](https://ruudvanasseldonk.com/2023/01/11/the-yaml-document-from-hell) - YAML 充满了模糊的复杂性,例如意外的数字和非字符串键. 246 | - [我对标签系统充满了无尽的兴趣](https://twitter.com/hillelogram/status/1534301374166474752) - 即使在应该是简单的标签系统中,也存在一些边缘情况. 247 | - [量子技术谬误](https://github.com/gottfriedsz/falsehoods-quantum) - 关于量子技术和计算机的常见误解 248 | - [事件驱动系统谬误](https://dimtion.fr/blog/falsehoods-event-driven/) - 关于事件驱动系统和消息传递的误解. 249 | - [关于数字对象标识符 (DOI) 的虚假信息](https://pardalotus.tech/posts/2024-10-02-falsehoods-programmers-believe-about-dois/) - 关于用于识别和链接研究成果(以及许多其他内容)的标识符的错误概念。 250 | - [关于 CVE 的谬论](https://medium.com/@jonathan.leitschuh/falsehoods-people-believe-about-cves-85c1d063ffda) - CVE ≠漏洞(以及其他 36 种混淆)。 251 | 252 | ## 交通 253 | 254 | - [汽车谬误](https://github.com/driveto/falsehoods-about-cars) - 即使是像定义一辆汽车这样普遍的事情也充满了陷阱. 255 | - [航空座位图谬误](https://duffel.com/blog/falsehoods-about-seat-maps) - 航空公司座位图远比整齐的座位排和列复杂得多. 256 | - [大量混乱到令人抓狂的航空码](https://www.youtube.com/watch?v=jfOUVYQnuhw) - 多个国际和国家机构试图调和历史、实用性和物流,导致航空码遵循古怪的规则. 257 | - [我的名字在任何预约中都会出问题!](https://travel.stackexchange.com/questions/149323/my-name-causes-an-issue-with-any-booking-names-end-with-mr-and-mrs) - 旧的航空公司预订系统将 'MR' 后缀视为 'Mister',并将其省略. 258 | 259 | ## 排版 260 | 261 | - [字体谬误](https://github.com/RoelN/Font-Falsehoods) - 关于网页和桌面排版的假设. 262 | - [程序员应该知道的大小写的真相](https://www.b-list.org/weblog/2018/nov/26/case/) - 一个关于大小写(如大写和小写文本)主题的内容,以完全相反的方式呈现谬误列表格式。. 263 | 264 | ## 视频游戏 265 | 266 | - [门问题](https://lizengland.com/blog/2014/04/the-door-problem/) - 在游戏中,所有你没有考虑的关于门的东西. 267 | 268 | ## Web 269 | 270 | - [HTML谬误](https://www.aartaka.me.eu.org/falsehoods-html) - “web是好看的,web是丑陋的,web是令人惊叹的。而其中一部分魅力来自 HTML 及其独特的历史遗留问题” 271 | - [REST API谬误](https://web.archive.org/web/20201112010147/http://slinkp.com/falsehoods-programmers-believe-about-apis.html) - 在创建和写API文档的时候要注意的陷阱. 272 | - [URL: 它很复杂…](https://www.netmeister.org/blog/urls.html) - 一个 URL 中包含许多组成部分,每个部分都有其自身的逻辑. 273 | - [下载网站图标的隐藏复杂性:通过 15 个以上的边缘案例讲述](https://web.archive.org/web/20230604033340/https://www.simplecto.com/complexity-downloading-favicons-told-in-15-plus-edge-cases/) - 下载您在浏览器标签中看到的小图标应该是一个简单的任务。结果证明,这比您想象的要复杂得多。请注意,别陷入无休止的琐事中. 274 | 275 | ## 贡献 276 | 277 | 随时欢迎你的贡献! 首先请看一下 [贡献指南](https://github.com/kdeldycke/awesome-falsehood/blob/main/.github/contributing.zh.md) . 278 | 279 | ## 注脚 280 | 281 | 这份列表在过去几年里在社交媒体上获得了一些人气. 可以看看这个 [其他讨论](https://github.com/kdeldycke/kdeldycke/blob/main/in-the-media.md). 282 | 283 | 这个[标题图片](https://github.com/kdeldycke/awesome-falsehood/blob/main/assets/awesome-falsehood-header.jpg) 以 [photo taken in February 2010 by Iza Bella](https://commons.wikimedia.org/wiki/File:BLW_Truth_and_Falsehood.jpg)为基础修改的 , 根据 [Creative Commons BY-SA 2.0 UK 许可协议](https://creativecommons.org/licenses/by-sa/2.0/uk/deed.en) 分发. 284 | 285 | 286 | 287 | \[1\]: [*Notebooks, 1914-1916*](https://www.amazon.com/dp/1324090804?&linkCode=ll1&tag=kevideld-20&linkId=a1903c3fbfdc82fbe2e566fca40718fb&language=en_US&ref_=as_li_ss_tl) (Liveright, 2022) - [出处: 14页](https://archive.org/details/notebooks191419100witt/page/n35). [\[↑\]](#intro-quote-ref) 288 | --------------------------------------------------------------------------------