回顾在电子科大的学习生涯,最幸运的事就是遇到了韩老师和廖老师以及加入了Bitman。这次应韩老师之邀,就向各位同学分享一些自己对于“系统观”的拙见。
如果说一个计算机专业毕业的技术人员,看家本领是能够应用计算机系统来解决现实世界的复杂问题。那么无论各位同学将来打算从事什么技术方向,本科期间修炼的“系统观”都将是你受益一生的“内功”。
今天的计算机系统是个由很多抽象层,自下而上堆叠而成的复杂系统。每层之间看似完全独立,却又紧密相连。某种意义上说,对计算机系统的理解程度,取决于思维能理解、穿透多少个抽象层。在这个层次结构里,层与层间由接口连接。每一层对其上层提供的接口,都源自于其对下层接口的抽象和简化。层次越靠上,工作原理越接近人类思维,而越靠下,则越接近机器本质。工作原理上的差异,自然的形成了一个现象:同学们大多更喜欢去玩原理更接近人类思维的上层应用,而把计算机底层视为一个黑箱,不愿去主动探究它。
然而,仅有对上层的了解,是远远不够的。因为:1. 虽然层次结构中每层都在尽量对其下一层进行抽象,但由于现实的复杂性,这些抽象往往都存在局限,总有一些来自底层的特性会绕过抽象,传播到上层,比如数值溢出,浮点数舍入等,某些情况下这些特性如果得不到妥善处理,就会产生错误。2. 即使每层的抽象都是完美的,在抽象的过程中很多底层关键细节也会被掩盖,这些被掩盖的关键细节如果得不到足够的关注,就可能会导致诸如低Cache利用率,低访存效率、中断开销大、代码存在安全隐患等一系列问题。3. 极特殊情况下,底层组件也会出错,如硬件运算错误,存储器比特位反转,系统软件BUG等,如果没有对底层原理的了解,这类底层的问题甚至无法被认知。所以,如果忽视对计算机底层的学习,上述的种种问题就会如同幽灵一般令人困扰,在未来的某一天找上门来,让你认为本该正确、高效、可靠的设计出现意想不到的问题。
与其日后被这些问题所阻碍,不如提前打好基础,从计算机底层出发,自下而上的学习一遍,在本科阶段为自己构建出允许思维在各层之间自由穿梭的“系统观”。我对韩老师多年来强调的“系统观”的一种理解就是:熟悉计算机的底层本质,进而打通计算机系统里从上层到下层的认知。这种认知将带来两种重要的能力:1. 全局思维:思维在系统的任意抽象层之间穿梭寻找问题、解决问题的能力。2. 触类旁通:将对系统本质的理解迁移到任何新事物从而高效学习的能力。
幸运的是,跟随Bitman的路线探索计算机底层细节,并不是一件枯燥乏味的事。Bitman的学习路线强调动手探索,在实验中学习。你的想法不仅可以立刻从实验中得到反馈,还可以和组里志同道合的伙伴一起交流探索的心得。整个过程像极了一个以理解计算机为目标的解谜游戏。当年自己在组里,通过这种方式,相继实现了基本的链接器、裸板驱动、操作系统等一系列系统软件。整个过程快乐而充实,期间收获的编码经验以及查阅过的各种文献,帮我构建了对一个五脏俱全的最小计算机系统的层次认知。这种认知涵盖了系统软件、软硬件接口、硬件、以及计算机的基本行为逻辑。这成为了我专业知识体系的根结点。这种对计算机的核心原理的感性认知,在理解各种上层软件和下层硬件的实现时可以帮助捕捉实现背后的设计,并理解一些看似不合理的设计的合理之处。此外,由于计算机各层之间思维的相似性,这颗根节点上的各种知识逻辑经常能拓展到新接触的各种技术上,通过类比为学习提供方向,缩短学习新技术时的入门时间。
希望写到这里,系统能力的重要性已经传达给了各位同学。我们的本科生活看似漫长实则短暂,抓住重点很关键。转眼本科已经毕业三年,受惠于在Bitman获得的能力,我现于美国北卡罗来纳州立大学从事高性能处理器架构相关的研究。和我一届的四个Bitman同窗兄弟们,如今有些在公司里作为独当一面的技术核心备受青睐,还有些在学术圈做出了高水平的研究大放异彩。他们每个人都在本科期间打磨出了自己的“系统观”,他们每个人也都对自己正从事的事业充满热情且有想法。这样的他们,在未来无论做出多大的成就,我都不会意外。各位同学,衷心的希望你们在接下来珍贵的本科时光里,也都能找到未来的目标,完成自我的蜕变,迎接未来无限的可能性,为我们的母校争光。
2019年秋