麦纸的博客Machen Blog 2026年了,这些编程语言的反人类设计还在折磨人 - 麦纸的博客

写代码写多了之后,你会发现有些编程语言的设计简直就是在考验程序员的耐心。明明可以有更合理的方案,偏偏选择了最让人难受的那条路。今天就来吐槽一下那些年折磨过无数程序员的语言设计问题。 JavaScript的隐式类型转换绝对是头号槽点。0 == "0"返回true你敢信?还有NaN不等于它自己,typeof null居然返回"object"——这个bug从1995年诞生到现在都没修复,已经变成了所谓的"特性"。更离谱的是[] + []结果是空字符串,[] + {}结果是"[object Object]",但是{} + []结果是0。是的你没看错,同样的两个值换个顺序结果就不一样了。每次写JS的时候都要小心这些隐式转换的坑,一不小心就出了一个怎么都找不到的bug。 Python的缩进强制对齐也是一个让人又爱又恨的设计。对齐确实让代码看起来整洁,但是当你在编辑器里复制粘贴代码、或者混用Tab和空格的时候,那种IndentationError的痛苦谁懂。特别是在多文件协作的时候,你的编辑器用Tab,同事的编辑器用空格,一提交代码整个文件就全报错了。Python 3虽然严格区分了Tab和空格,但这依然是一个经常让新手崩溃的问题。 Java的NullPointerException估计每个Java程序员都见过无数次。一个对象明明是null,你调用它的方法就直接崩了。Kotlin用可选类型很好地解决了这个问题,但Java至今依然没有引入这个特性。每次写Java代码都要手动判空,if (obj != null) 这种代码写多了真的让人心累。Optional类是Java 8引入的,但用起来也挺啰嗦,远不如Kotlin的?.操作符优雅。 PHP的函数命名混乱问题也是出了名的。同样是数组操作的函数,有的用下划线命名如array_push,有的用驼峰命名如arraySort。explode和implode是一对,但split却干的是完全不同的事情。就连PHP官方都承认这是历史遗留问题,但为了向后兼容一直没改。结果就是每次用PHP都要查文档确认函数名到底怎么拼。 C语言的字符串处理至今还是让人头疼。 strcpy不检查缓冲区长度,直接导致无数缓冲区溢出漏洞。虽然现在有strncpy等更安全的替代函数,但API设计确实不够友好。现代语言基本上都用字符串类来处理了,C语言这个层面的手动管理确实让新手容易出错。 其实每种语言都有它的历史原因和设计权衡,吐槽归吐槽,我们还是得天天和这些代码打交道。最重要的是选择适合项目的语言,然后尽量避开那些已知的坑。你觉得哪种语言的设计最让你难受?评论区说说看。

标签: none

添加新评论