第2章 实用的理论
本章主要内容:
● 为什么计算机科学理论与你的生存相关。
● 让类型为你工作。
● 理解算法的特征。
● 那些你不知道的数据结构和它们的怪异特点。
程序员也是人,他们和其他人在软件开发实践中有着同样的认知偏见。他们普遍高估了不使用的类型、不关心正确数据结构的好处,或认为算法只对库作者重要。
你也不例外。你被期望准时、高质量、面带微笑地交付产品。正如俗话所说,程序员实际上是一个有机体,输入咖啡,输出软件。你还不如用最糟糕的方式写东西:使用复制和粘贴,使用你在Stack Overflow上找到的代码,用纯文本文件存储数据。甚至如果NDA[1]之下没管着你的灵魂,你就与恶魔做交易。只有你的同事真正关心你是如何做事的——其他人都只想要一个好的、有效的产品。
[1]NDA(non-disclosure agreement)即保密协议,内容是禁止员工谈论他们的工作,除非他们以“你什么都没有听到,我只是自言自语……”为开头来讲。
理论可以是压倒性的和不相关的。算法、数据结构、类型理论、Big-O表示法和多项式复杂度可能看起来很复杂,但与软件开发无关。现有的库和框架已经以一种优化和经过良好测试的方式处理了这些问题。无论如何,建议你永远不要从头开始实现算法,特别是在对信息安全有较高要求或开发时限紧张的情况下。
那你为什么要关心理论?因为计算机科学理论知识不仅可以让你从头开始实现算法和数据结构,而且可以让你正确地决定何时需要使用它们。它能帮助你理解不同决策带来的成本。它也能帮助你理解正在编写的代码的可伸缩性特征。它还能帮助你向前看。你可能永远不会从头开始实现数据结构或算法,但了解它们的工作原理将使你成为一名高效的开发人员。这能提高你在行业中的生存概率。
本书将只讨论你在学习时可能忽略的理论中的某些关键部分——数据类型的一些不太为人所知的方面、对算法的理解以及某些数据结构的内部工作方式。如果你以前没有学习过数据类型、算法或数据结构,本章将给你一些提示,让你对它们感兴趣。