更新 前言部分 语言设计错误 翻译

This commit is contained in:
LingCoder
2018-12-16 10:22:47 +08:00
parent 143b13d3e2
commit dedcc37ad0

View File

@@ -26,3 +26,36 @@
3. 把我知道的以及我认为对于你学习语言很重要的东西都告诉你。我认为信息的重要性是分层次结构的。绝大多数情况下我们没必要弄清问题的所有本质。好比编程语言中的某些特性和实现细节95%的程序员都不需要取知道。这些细节除了会加重你的学习成本,还让你更觉得这门语言好复杂。如果你非要考虑这些细节,那么它还会迷惑该代码的阅读者/维护者,所以我主张选择简单的方法解决问题。
4. 希望本书能为你打下坚实的基础,方便你将来学习更难的课程和书籍。
![level_2_title](../images/level_2_title.png)
## 语言设计错误
每种语言都有设计错误。当新程序员必须涉足语言特性时并猜测应用场景和使用方式时,他们体验到极大的不确定性和挫折感。承认错误令人尴尬,但这种糟糕的初学者经历比认识到你错了什么还要糟糕。哎,每一种设语言/库的设计错误都会永久地嵌入在Java的发行版中。
诺贝尔经济学奖得主约瑟夫·斯蒂格利茨Joseph Stiglitz有一套适用于这里的人生哲学叫做“承诺升级理论”继续犯错误的成本由别人承担而承认错误的成本由自己承担。
如果你有读过我过去的作品那么你应该知道我一般倾向于指出这些语言设计错误Java已经发展出了一批狂热的追随者。他们对待这门语言更像是阵营而不是编程工具。因为我已经写过有关Java的书所以他们理所当然的认为我也是这个“阵营”的一份子。于是当我指出Java的错误时就会造成两种影响
1. 最初会有许多错误“阵营”的人成为了牺牲品。最终时隔多年大家都意识到这是个设计上的错误然后错误就这样成为了Java历史的一部分。
2.更重要的是,新程序员并没有经历过“他们”为什么要采用这种实现方式的斗争过程。特别是那些隐隐约约感觉不对却依然说服自己“我必须要这么做”或者“我只是没学明白”从而继续错下去的人。更糟糕的是,教授这些编程知识的老师们没能深入的去研究这里是否有设计上的错误,而是继续错误的解读。通过了解语言设计上的错误,能让开发者们更好的理解和意识到错误的本质,从而更快地进步。
理解编程语言的设计错误至至关重要,甚至影响程序员的开发效率。一些公司在开发过程中会避免使用语言的某些功能特性。表面上看这些“功能特性”很高大上,但是弄不好却可能出现意料之外的错误,影响整个开发进程。
已知的语言设计错误也会给新的一门编程语言的发明提供参考意义。探索一门语言能做什么是很有趣的一件事而语言设计错误能提醒你哪些“坑”是不能再趟的。多年以来我一直感觉Java的设计者们有点脱离群众的。Java有些设计错误不免错的太明显我都怀疑语言设计师们到底是为了用户服务还是出于其他的动机设计了这些功能。Java语言有许多臭名昭著的设计错误很可能这也是诱惑所在。我感觉这是对程序员的不尊重。为此我很长时间不想于Java有任何瓜葛很大程度上这也是我为什么不想碰Java的原因吧。
现今当我再来看Java 8时我发现与之前有许多不同的地方。Java语言的设计师们似乎对于语言和用户的态度发生了根本性上的改变。在多年忽视用户投诉之后许多功能和库已经被语言搞砸了。
新功能的设计与以往有很大不同。掌舵者开始重视程序员的编程经验。新功能最终都在努力使语言变得更好而不仅仅是停留在快速添加想法而不深入研究它们的含义。有一些新功能实现上非常优雅至少在Java约束下尽可能优雅
我猜测可能是一些人离开设计组让他们意识到了这点。我没想到会有这些变化因为这些原因吧写这本书的体验要比以往的经历要好得多。Java 8包含了一系列基础和重要的改进。哎不过Java有严格的“向后兼容”承诺。所以可能我们不大可能看到戏剧性的变化当然我希望我是错的。尽管如此我很赞赏那些敢于自我颠覆并为Java设定更好路线的人。第一次对于自己所写的部分Java 8代码我终于可以说“我喜欢这个
最后本书所著时似乎也很不错因为Java 8引入的新功能已经强烈的影响了今后Java的编码方式。截止我在写这本书时Java 9似乎更专注于对语言底层的基础结构功能的重要更新但是这些并不会影响本书所关注的编码类型。话说回来得益于电子书出版形式的便捷如果我发现本书有需要更新或添加的内容我可以很快将新版本推送给现有读者。
![level_2_title](../images/level_2_title.png)
## 测试用例