我是一名防御性程序员。 一个聪明人曾经教过我 :
凡是会出错的地方都会出错
另一个智者教我……
期待意外
今天,这一切最终都将变得有意义,就像今天,即13日(星期五),以下与编程相关的10件事将大错特错。 换句话说,您的软件即将爆炸……
1.…因为您从未真正考虑过姓名
今天,您将非常遗憾,从未考虑过名称,因为该用户将注册您的应用程序。 该用户的名称为空。 我的意思是说Null
。 就像杰克·诺尔(Jack Null),希瑟·诺尔(Heather Null),诺尔·史密斯(Null Smith)。 随你。 您没有想到过这样的用户的含义 ,现在您必须对其进行修复。 当您使用它时,请考虑一下您过去几年中可能犯下的所有其他错误和误解。 喜欢:
- 以为人名区分大小写。
- 以为人们的名字不区分大小写。
- 认为人们的名字完全没有问题。
阅读有关Falsehoods Programmers Believe About Names的这篇可怕文章,以了解有关为什么您的软件今天会因为人们的名字而爆炸的更多信息。
2.…因为您弄错了SQL
是。 SQL。 有些人讨厌它,有些人喜欢它。 SQL有其自己的方式。 但是今天,您将后悔从未考虑过SQL NULL
。 今天,您将后悔从未考虑过UNION
和UNION ALL
之间的区别。 今天,您将耗尽内存,因为您认为可以用Java(或您JOIN
C#,PHP)而不是SQL来执行该JOIN
。
今天,您将犯下Java开发人员在编写SQL时犯的10个常见错误中的任何一个
3.…因为您仍然得到SQL NULL错误
事实上,您仍然不了解SQL NULL
。 您不必怪,没有人真正了解SQL NULL。 这一定是EF Codd精心制作的万圣节笑话,他是我们和我们以后的15代程序员的精通学术作呕。 但是所有这些冷嘲热讽都不会帮助您,因为今天, NULL
将在您的应用程序中爆炸。
如果您不相信它,请在SQL:解释其行为中了解NULL 。 然后,在仍然可以的情况下返回并检查您的SQL!
或设计不足
您现在认为自己知道SQL并没有帮助。 因为您的应用程序的80%(今天将爆炸,在12月13日,星期五)将用Java编写。 如果不是,请考虑使用您的Android手机。 如果不是这样,那么您的任何其他设备都可能正在运行Java。
和那些编写Java代码的人,他们不是编写面向对象的Java代码,而是编写Perl风格或C风格的Java代码,从而导致大量的意大利面条。 然后,当您的建筑师(或您?)试图清理意大利面时,他们只是对过去10年中我们在Java中拥有的所有设计模式感到恼火。 现在,没有人可以维护该应用程序,这导致它立即崩溃。
发生这种情况时,请考虑阅读《有经验的Java开发人员和架构师的这10个常见陷阱》 。 至少,您会知道应归咎于谁。 你应该责怪谦虚的建筑师 。
5.…因为您的开发人员不断寻找新的借口
没有办法解决。 您和您的其他开发人员没有完成您的工作。 而且,您只是在为所做的(或未做的)事情找到新的借口。 喜欢:
- 哦,你说过你不想这样吗?
- 项目经理说没有人想要那个功能
这仅仅是开始。 今天,所有这些编程借口都将展开讨论,并向您显示应用程序的真实性质,并解释其为何会爆炸。
6.…因为您真的错了SQL
真。 实际上,并不是因为这些开发人员或Java。 您的应用程序今天爆炸确实是SQL的错误。 谁能记住这些警告? 由于缺乏绑定变量的使用,您的应用程序会遭受SQL注入和语法错误的困扰。 因为您没有使用足够的约束。 因为您认为开发时50ms是快速查询执行。 是的,该“快速”查询现在已经在生产环境中运行了30分钟,并且很快,它将使您的应用程序爆炸,因为您没有读过: Java开发人员在编写SQL时常犯的10个常见错误
7.…因为日期和时间错误
哦是的 该关键业务帐户对帐单。 从2010年10月1日到10月31日。是的,哦,您的客户正在使用CET / CEST时区。 这意味着在这个给定的结束日期,您客户所在的国家/地区将夏令时转换为冬季的可能性很高。 当您是美国的开发人员时,您没有想到这一点,而是基于24小时制进行了一些日期时间计算,而实际上特定的一天有25小时。
而且不要让我在leap秒开始。 在您更新OS和/或JVM以获得最新的日历技术之前,它们会直接向您跳来。 太糟糕了,您是在编写高频交易软件,而不是某些地质软件,在这里您不必关心奇数秒。 或leap年。 或跨越千年。
叹。 我们什么时候也要为我们的日历引入度量系统,并根据《星际迷航》的时空进行计数? 但是在此之前,让我们了解Falsehoods程序员相信时间 。 更重要的是,《 关于时间的一些笔记》 。 时钟的滴答声!
8.…因为您弄错了XML名称空间
现在,这将变得非常错误,我什至不想进入这个话题。 只是一个提示。 这份易于阅读的文档将帮助您了解哪里出了问题。
9.…因为您会弄错CSS
最终,微软使我们摆脱了IE6和以前HTML,CSS等可怕的实现方式。 不支持IE6是向前迈出的一大步,当我们需要将所有HTML,CSS,JavaScript加倍以使它们在 Internet Explorer 和所有其他浏览器上都能正常运行时,不支持IE6是一个巨大的进步。 还是他们?
等等,移动浏览器出现了,HTML5标准化不够快(或没有实现?),Webkit设定了新的事实上的标准aaagh。 就像神话中的Hydra一样,双向浏览器时代已经转变为浏览器拥有360个头的时代。 Stefan Baumgartner 说 ,所有这些都是完全无法维持的,他在Topconf 2013上对移动浏览器的热闹演讲至少使我对人类失去了信心。 因为至少我们没有丢掉幽默感。
然而,今天是您的应用程序爆炸的一天,并且很有可能是(或同样有可能)由于CSS错误。 不相信吗? 阅读花费我一个月工资的IE CSS错误 。 然后去向Nicole Sullivan学习,他教了我们关于大规模CSS的5个错误 。
10.…因为您得到了加密错误的编码
叹。 所以您以为我是Java和SQL的人,并且由于您使用的是Ruby或Python之类的奇特语言,因此您安全吗? 不,你不是。 这次不行。 甚至您的应用程序今天也会在13号星期五爆炸,因为您的编码错误。 没有人能做到这一点。 曾经 您认为UTF-8会救您吗? 您听说过UTF-16和UTF-32吗? UTF-8 可能 会出错。 特别是因为您的应用程序导出为CSV,而Excel则使用了CSV,它希望数据以Cp1251进行编码。 甚至是没有欧元符号的编码。 叹。
您知道我们为什么拥有ISO / IEC 8859-1 和 ISO / IEC 8859-15吗? 显然,今天,由于选择了错误的应用程序,因此您的应用程序将发生爆炸。 但是,我知道事实。 不要相信ISO / IEC或Wikipedia的“官方”故事。 正如H2开发人员 ThomasMüller曾经对我解释的那样,它的发生是这样的:
曾几何时,一位ISO工程师认为,我们需要一个新的编码标准。 于是他去创建了ISO 8859-1。 显然,他没有将其命名为ISO 8859,因为他知道自己做错了,他的聪明的alec同事将对其进行修复,以证明自己做错了。 因此,他添加了“破折号”。 然后,几年后,他的同事确实出现了, 并抱怨说欧元符号丢失了。 对于99%的美国开发人员来说,还有另外两个非常有用的角色:ŠšŽžŒœŸ。
所以第一个人说:“哦,谁在乎。 让我们保持现状”。 另一个人说:“不,我会解决这个问题”。 第一个家伙说:“不,不这样做,会造成很大的痛苦”,另一个家伙说:“不,这是错误的”。 就像“ ISO中的某人有误”中的内容一样 。 经过更多的争论之后,我们现在有了更多的编码对置换来弄错了。
顺便说一下,以上就是过去发生的大多数事情。 这仅仅是冰冷的安慰你 ,你是要通知你的应用程序会爆炸,莫衷一是。 由于您不太可能真正了解到它如何正确工作(最重要的是今天(今天,星期五)13日),您至少可以使用此Python脚本将所有错误的字符从UTF-8改回ISO-8859-1 (反之亦然?请同时尝试…)。 阅读“使用Python修复常见的Unicode错误”(它们已制成) 。 另一个不错的读物是UTF-8:字符编码的秘密 。 最后:Geek和Poke在此问题上的观点:
![当这一切由Geek和Poke开始时,获得了许可的CC-BY 3.0](https://i-blog.csdnimg.cn/blog_migrate/644a24e2652fc4810c250c03df30a597.png)
当这一切由Geek和Poke开始时 ,获得了CC-BY 3.0许可
11.(或013)…因为您弄错了基数
如果您不幸使用JavaScript编写代码(众所周知,这很不幸 ),您将冒着忘记解析一个int自动“检测”数字字符串的隐含基数的风险。 因此,今天,您会认为013
与十进制13,十六进制0x0D有关。 您再也不会错了。
因为今天又是您不喜欢JavaScript接受前导零作为八进制数字的另一天。 在此处阅读有关此行为的更多信息 。
您可能已经注意到,此列表包含013种在12月13日出错的内容,即在该十进制第13天的八进制13。 即使这篇文章也弄错了! 两次都出错,因为URL不能再从10个更改为013个。 今天,您不仅会弄错基数,而且还会有很多断开的链接或过时的网站!
TL; DR今天,一切都会出错
今天是星期五13日。 更具体地说,我国的日期符号为13.12.13。 请参阅#7,以了解当您尝试在除我以外的其他国家/地区解析该日期时,今天的日期和时间会出什么问题。 如果我的时钟显示13.13.13,也不会感到惊讶,因为还有另一段令我哭泣的代码今天出错了,这将证明今天是非常糟糕的一天。
而且不要在本文之后考虑喝点咖啡来振作起来,因为今天,在13号星期五,由于有人忘记了s秒,您的咖啡机的时钟无法正常工作。 即使它确实起作用,也只剩下DECAF 。 是时候称它为周末了! 有一个不错的,今天不要编写任何代码!