原文:https://livebook.manning.com/...翻译:朱坤荣bt3gl?图片:https://www.pexels.com/zh-cn/...1.3.4拥抱复杂性与晦涩难懂复杂性令人恐惧,而模糊性更令人恐惧,因为您不知道自己会变得多么可怕。处理歧义是微软招聘的核心技能之一。通常会有假设性的问题,例如“纽约有多少家小提琴修理店?”“洛杉矶有多少加油站?”或“总统有多少秘密特工,他们的花名册是什么?”列出他们的名字并在图表中指出他们从白宫走的可能路线”解决这些问题的艺术最终变成了澄清你所知道的所有部分并根据这些事实达到最终目标。例如,你可以学习从纽约的人口和有多少人可能会拉小提琴。这可以帮助你理清市场的规模和市场可以支持的竞争程度。同样,当面临一个有很多未知参数的问题时,比如就像估计开发一个特征需要多长时间一样,你也可以根据你所知道的来缩小近似窗口。你可以将你所知道的发挥你的优势并尽可能地使用它,这样可以减少歧义。有趣的是,同样去处理复杂性。一些看起来非常复杂的东西也可以通过分而治之来变得可控,然后变得更简单。你越清晰,你就越能处理未知。这本书中学到的技巧可以帮助你解决诸如这会让你更有信心处理歧义和复杂性。1.4现代软件开发的问题除了不断增加的复杂性、无数的抽象层和现代堆栈溢出,现在的软件开发还有其他问题:技术太多:编程语言太多,框架太多,库太多,考虑npm(node.js框架的包管理工具)有一个名为“left-pad”的库来处理在字符串末尾添加空格。它是范式驱动的,因此是保守的。许多程序员认为编程语言、最佳实践、设计模式、算法和数据结构是外星种族的遗产,并且不知道它们是如何工作的。技术开始变得不透明,就像汽车一样。人们过去可以自己修车。现在发动机越来越先进了,只能看到金属外壳,就像法老的坟墓一样,谁打开它就会诅咒谁。软件开发技术也不例外。尽管现在大多数东西都是开源的,但我认为新技术仍然比1990年的逆向工程二进制代码更复杂,这正是由于软件复杂性的不断增加。人们不关心他们代码的开销,因为我们有更多的资源。您是否编写了一个新的简单聊天应用程序?您知道将它与功能齐全的浏览器捆绑在一起可以节省您的时间,而且没有人关心您使用的是GB的RAM,那为什么不呢?程序员专注于自己的堆栈而忽略其他工作,这是有道理的:他们有时间服务,没有时间学习。我称之为“服务于开发者问题”。很多东西都会影响产品的质量,内容会因为自身的局限性而出现。Web开发人员通常对网络协议的底层工作原理一无所知。他们接受加载页面的延迟并接受现状,因为他们不知道一个小的技术细节,一个不必要的长证书链会减慢页面加载速度。得益于我们所学的编程范式,存在对低级工作的蔑视链,例如不重复自己或复制粘贴。您希望找到一个DRY解决方案。这种文化会让您质疑自己和您的能力,并最终损害您的工作效率。NPM和Left-pad的故事在过去的十年里,npm已经成为JavaScript库的包生态系统。人们可以将自己的包贡献给生态系统,其他包可以使用它们,从而更容易开发大型项目。AzerKoculu是它的开发者。Left-pad只是他为npm生态系统贡献的250个软件包之一。它只有一个功能:在字符串中添加空格以确保它始终是合适的大小。一天,他收到一封来自npm的电子邮件,告诉他由于一家同名公司的投诉,他们已经删除了他的一个名为“Kik”的软件包。npm决定删除Azer的软件包并将名称赋予该公司。这激怒了Azer,并删除了他贡献的所有包,包括left-pad。所以问题是数百个大型项目直接或间接依赖于这个包。他的行为导致所有这些项目的关闭。这场灾难给我们上了关于平台新手的一课。故事告诉我们,人生一路上充满了可怕的惊喜。在本书中,我为这些问题提供了一些解决方案,包括回顾一些你可能会觉得无聊的核心概念,优先考虑实用性、简单性,拒绝一些固有的不容置疑的信念,更重要的是,质疑我们所做的一切。先问问题很有价值。本文转载自朱坤荣(按时间顺序)微信公众号公众号“麦芽面包”,公众号id“darkjune_think”开发者/科幻爱好者/硬核主机玩家/业余翻译,转载请注明。微博:朱坤荣B站:https://space.bilibili.com/23...交流邮箱:zhukunrong@yeah.net
