原文:https://livebook.manning.com/…
译:祝坤荣
bt3gl ♡图片: https://www.pexels.com/zh-cn/…
1.3.4 拥抱简单与含糊
复杂性很可怕,模糊不清更可怕,因为你不晓得你要被吓到什么水平会更吓人。
解决模糊性是微软招聘时外围技能的问题之一。常常有一些假设性的问题如“在纽约有多少小提琴培修商店?”“洛杉矶有多少加油站?”或者“总统有多少特工,他们的排班表是?列出他们的名字,在图中指出他们从白宫通过的可能路线”
解决这些问题的技巧最初会变成廓清所有你晓得的局部并基于这些事实达到最终目标。比方,你能够从纽约的人口和多少人口可能会玩小提琴。这能帮你理清市场的大小和市场能反对多少竞争。
同样的,当面对一个有许多未知参数的问题,比方估算开发一个个性须要多少工夫时,你也能够基于你晓得的来放大近似窗口。你能够用本人理解的做为劣势并尽量用,这样能将模糊性缩小。
有意思的是,解决复杂性也是一样的。一些看起来极其简单的货色也能够通过分而治之的形式变成可控,而后变得更简略。
你越分明,就越能解决未知。在这本书中学习的技巧能够帮你搞清楚相似的货色并让你在解决模糊性和复杂性时更有信念。
1.4 古代软件开发的问题
除了继续减少的复杂性,数不清的形象层和古代栈溢出,当初软件开发也有其余的问题:
- 有太多技术:太多的编程语言,太多框架,太多库,想想 npm(node.js 框架的包管理工具)有一个库叫”left-pad”来解决给字符串完结加空格。
- 它是范例驱动的,因而很激进。许多程序员认为编程语言,最佳实际,设计模式,算法和数据结构是外星种族的遗产,不晓得它们是怎么工作的。
- 技术开始变得不通明,就像汽车。人们已经能够修理他们本人的车子。当初随着引擎变得更加高级,咱们能看到的只有金属外壳,就像法老墓会咒骂任何关上了它的人。软件开发技术也没有不同。只管当初大多数货色都是开源的,我想新技术依然比从 1990 年的二进制代码的逆向工程更简单,正是因为软件继续减少的复杂性。
- 人们不关怀他们代码的开销,因为咱们有更多的资源。你写过一个新的简略聊天利用吗?你晓得把它与全功能的浏览器绑在一起能够节俭你的工夫并且没人会关注你用了 GB 级的内存,那么为什么不呢?
- 程序员关注他们本人的栈并且漠视其余工作,这很正当:他们要端菜上桌,没工夫学习了。我叫这个“上菜开发者问题”。许多事件会影响产品的品质的内容会因为他们本身的局限呈现。一个 web 开发人员通常对于网络协议在上面是如何工作的齐全不理解。他们承受加载页面的提早并承受现状,因为他们不晓得一个小技术细节,一个不必要的长证书链很升高网页的加载速度。
- 感激咱们学过的编程范式,对于低级工作有个鄙视链,比方不要反复你本人或复制黏贴。你冀望找到一种 DRY 解决方案。这种文化导致你质疑本人和本人的能力并最终侵害你的生产力。
对于 NPM 和 Left-pad 的故事
过来十年 npm 曾经成为了 JavaScript 库的包生态系统。人们能够将他们本人的包奉献给生态系统,其余包能够应用它们,让开发大型项目更简略。Azer Koculu 是其中的开发者。Left-pad 只是他奉献给 npm 生态的 250 个包中的一个。它只有一个性能:给字符串加上空格保障它始终是一个适合的大小。一天,他收到了一封 npm 的邮件通知他因为一家同名公司的埋怨,它们移除了他的一个叫“Kik”的包。npm 决定移除 Azer 的包并把名字给那家公司。这让 Azer 很恼火,并移除了所有他奉献的包,包含 left-pad。所以问题是,上百个大型项目间接或间接依赖了这个包。他的动作导致所有这些我的项目复工。这个劫难给咱们上了对于对平台新人的一课。
故事通知咱们生存的路上充斥了吓人的惊喜。
在这本书,我提供了这些问题的一些解决方案,包含温习一些你可能感觉很无聊的外围概念,优先思考实用性,简略性,回绝一些固有的不可质疑的信念,更重要的是,质疑咱们做的所有。先问问题是很有价值的。
本文来自祝坤荣 (时序) 的微信公众号「麦芽面包」,公众号 id「darkjune_think」
开发者 / 科幻爱好者 / 硬核主机玩家 / 业余翻译
转载请注明。
微博: 祝坤荣
B 站: https://space.bilibili.com/23…
交换 Email: zhukunrong@yeah.net