你好,我是徐文浩。伴随着无数个不眠之夜,“深入浅出计算机组成原理”专栏终于来到了结束语。
去年11月份,极客时间找到我,我开始构思这个专栏。本以为今年4、5月份就能把专栏写完。结果,一方面因为创业过程中时间总是不够用,另一方面,写出有价值内容的并不是一件容易的事情,直到9月10号的凌晨,我才写完这最后一篇结束语。原本计划的45讲,也在这个过程中变成了近60讲。现在回过去看,写这个“深入浅出计算机组成原理”专栏,是一个远比想象中要困难的挑战,但同时也是一个有趣的发现之旅。
完成比完美更好
Facebook的文化里面喜欢用各种小标语,其中有一条我很喜欢:“Done is better than perfect”。翻译成中文就是,“完成比完美更好”。写这个专栏的时候,我对这一点的体会特别深刻。在学习更多深入知识的时候,我希望你也可以抱有这样的态度。
在初期构思专栏的时候,我期望写成一个完美的专栏。不过随着时间的推移,我发现其实并没有什么完美可言。
一方面,组成原理的知识点很多,如果每一个都写下来,没有个一两百讲怕是讲不完。更何况有那么多大师的教科书珠玉在前,只是做解读知识点、覆盖已有的知识点,我觉得价值不大。思来想去,我希望尽可能找到最重要、最核心的知识点,以及能和大多数工程师日常工作有结合的知识点,希望能够从应用中多给你一些启发。
另一方面,写专栏和我们写程序一样,都是有deadline的。无论是在系统发版之后的午夜里,还是去美国出差的飞机上,乃至偶尔忘带了录音笔的时候,总是要打起精神想尽方法,写出一篇让自己满意的文章来。同时,也有不少同学给我挑出了错漏或者不准确的部分,一起把这个专栏打磨地更“完美”。
不知道正在读结束语的你,有没有在过去5个月里坚持学习这个专栏呢?有没有认真阅读我每一节后的推荐阅读呢?有没有尝试去做一做每一讲后面的思考题呢?
如果你能够坚持下来,那首先要恭喜你,我相信能够学完的同学并不太多。如果你还没有学完,也不要紧,先跟着整个课程走一遍,有个大致印象。与其半途而费,不如先囫囵吞枣,硬着头皮看完再说。新的知识第一遍没有百分百看懂,而随着时间的推移,慢慢领悟成长了,这才是人生的常态。而我所见到的优秀的工程师大都会经历这样的成长过程。
我们这个行业,经常喜欢把软件开发和建筑放在一起类比,所以才会有经典的《设计模式》这样的书。甚至有不少人干脆从《建筑的永恒之道》里面去寻找灵感。然而,建筑能够在历史上留下长久的刻印,但是软件却完全不同。无论多么完美的代码都会不断迭代,就好像新陈代谢一样。几年过去之后,最初那些代码的踪影早已经没有了。软件工程师放弃了追求永恒,而是投身在创作的快乐之中。
希望在日后的学习过程中,你也能抱着“日拱一卒、不期速成”的心态坚持下去,不断地学习、反思、练习、再学习,这样的迭代才是最快的成长之路。
知也无涯,愿你享受发现的乐趣
说实话,从构思到写作这个专栏,这整个过程对我来说,还是有些忐忑的。组成原理是一门离大部分工程师的日常工作比较远的话题,却又是一个很多经典教材会讲的主题。“到底从什么角度去切入讲解”,我在构思文章的时候常常问自己。
组成原理其实是一门类似于“计算机科学101”的课程,固然我可以在里面讲VHDL这样的硬件编程语言,不过说实话,这样的知识对于大部分的人意义并不大。我期望,能够通过这个专栏,让你体会到计算机科学知识是真的有用的,能够让你把学专栏的过程变成一个发现之旅。
比如,在学习HDD硬盘原理的时候,你能知道为什么用它来记录日志很好,但是拿来作为KV数据库就很糟糕;在学习CPU Cache的时候,你实际用代码体会一下它有多快,为什么Disruptor里面的缓存行填充这样的小技巧,能够把性能发挥到极致。
除此之外,撰写整个专栏的过程,也是我对自己的一个发现之旅。
虽然在过去开发大型系统的时候,已经体会到掌握各种计算机科学基础知识的重要性,但是,这个专栏还是给了我一个系统性地、对基础知识回顾和整理的机会,在忙碌的日常工作之外,在离开学校那么多年后,重新把基础的理论知识和实际的系统开发做了一一印证。
在这个过程中,对我自己是一个温故而知新的过程,我自己新学到不少过去不了解的知识点,也因此重新找到了很多新的技术兴奋点。乃至在专栏写了一半的时候,我特地在出差的空隙跑了一趟计算机历史博物馆,去感受创造新事物的那种激动人心的感觉。
不过,在这整个过程中,我也深深体会到了内容创作的难。
过去这10个月里,持续地写稿、画图、写实验程序,在编辑的反馈下再改稿和录音,对我也是一个全新的体验。没有思路、时间不够、工作和写稿压力太大的时候,抓狂、发脾气、骂人都发生过。如果没有编辑在背后一直督促着,只靠自律,我想我无论如何也不可能写完这样一个规模的专栏。
但是,我相信只有不断地逼迫自己走出习惯的舒适区,去尝试、体验新的挑战,才会进一步的成长。而很多未来的机会,也孕育在其间。就像史蒂夫·乔布斯说的,我们未来生活的可能性就是靠这些点点滴滴串联起来的。
也许你今天只是在学校写简单的课程管理系统,可能会觉得有些无聊。抽一些时间出来,去了解计算机科学的底层知识,可能会让你找到求知的乐趣,无形中,这也为你去解决更有挑战的问题做好了铺垫。就像我自己在过去研究底层的数据系统、写技术博客的时候,也没有想到会有机会写上这样一个20万字以上的专栏。
就像罗素说的那样,“对爱的渴望,对知识的追求,对人类苦难不可遏制的同情,是支配我一生的单纯而强烈的三种情感”。
我希望,在学习成长的过程中,你能够摆脱一些功利性,不用去回避遇到的痛苦和挫败感,多从这个过程中找到获得知识的快乐。
希望这个专栏能够给你带来发现的乐趣,也能够为你在未来的生活里铺垫上那小小的一步。相信这个专栏不是你学习的终点,也也不是我探索和发现新主题的终点。说不定,在不久的未来我们还会有缘再见。
对了,我在文章末尾放了一个毕业调查问卷。在这5个月的学习过程中,如果你对这个专栏或者我本人有什么建议,可以通过这个问卷给我反馈,我一定会认真查看每一封的内容。期待你的反馈!

精选留言
2019-09-11 08:48:51
2020-03-02 14:36:30
下面来说说学后感吧。
渣硕毕业3年多了,经历过国企、外包、小型创业公司,一直对自己的公司和技术水平不满意,一直也处于一种比较自卑的心里状态,急于改变,所以一直没有放弃学习。前面几年,盲目"追新":觉得什么dubbo、spring cloud,什么各种时髦的中间件和语言,乱七八糟的NoSql,这才是我努力的学习方向。一来缺乏实际使用场景的学习,本身就缺乏一些动力和着力点,二来我们从事的行业每天都在不断产生各种各样新的语言和技术。一段时间后,我觉得我像个无头苍蝇,在程序员的世界里飞运了。学的多而杂,也没什么进步。就像是一座空中楼阁,经不住考验,没有基础的支撑,一切其实都是花里胡哨。所以我改变了自己的学习方向:先夯实底层的原理!
之后购入的极客时间专栏就比较"基础化"了: 王铮老师算法那个、MySQL那个、还有老师的这个专栏等。计算机组成原理,对于硬件开发者自不必说,对于软件开发者也是不可或缺的只是领域,毕竟,系统的性能优化,没有底层原理知识的支撑,便是盲目的。看到老师说,一定有人只学习了前三讲就放弃了,当时我就笑了,自己之前确实是其中一员。但是幸运的是,当我带着必胜的决心再此拿起来时,我很快就感受到了计算机之美,也感受到了老师写作的艺术。几乎所有的知识点都是"从实践中来,到实践中去",看起来那叫一个舒服。
好读书不求甚解。一刷,个人觉得我只掌握了50%左右的内容。但这只是一个开始,后面会二刷三刷。同时,我觉得这个专栏也是一个知识的大map,毕竟师傅领进门,修行在个人。何况老师每篇后面的推荐,都是非常好的发散。
感谢老师专栏的陪伴!
2019-09-11 02:28:47
更多的时候其实是把课程在当作一本参考书在用吧:例如虚拟机:不同的课程讲解的出发点不同,可是要想真正掌握用好就必须从各方面去学习,而不是单纯的学会用Vmware或者Docker;老师的课程中推荐的一些书籍同样补充了,不过顾上了课程就实在顾不上书籍了。
其实真正碰到问题的时候各方面知识不懂是根本无从去分析的尤其是当你是Team的最后一人是:不光需要分析还要找出问题的出在哪儿,整体知识没有完整的理解是无从一个人给出其它人方向的。其实原理篇的任何一块真正去扩展都能扩展出上百篇。
就像老师所说的像做建筑一样去设计已经不现实,况且现在的建筑其实大多都是框架搭好其它都是一块块拼接上去;程序架构已经从最早的单机走到了今天的分布式。希望老师下次能够授课时能相对空点:其实部分问题我是变通的去问了其它刚好知识上有所涉及的老师,只是为了解惑;因为越是对行业了解的深越知道什么才是源,才更困惑。
感谢老师的辛勤教诲,希望后续还是有些更深层的每日一科、或者微课对某些东西进一步扩展和深化讲解吧;愿老师一切顺利。
2019-10-25 09:30:41
1.徐老师的课程可谓是深入浅出,高屋建瓴。
从理论上的运算器,控制器,存储器,输入设备,输出设备,到物理上的CPU,GPU,TPU, HDD,SSD, 输入输出设备;再将CPU,GPU,TPU, HDD,SSD, 输入输出设备的面纱揭开,让我们一睹其芳容。整体上的脉络清晰明了,由点及面。
2.徐老师的课程每一节都很精彩。
有趣。处理器模块中CPU, CISC和RISC,GPU,FPGA和ASIC,TPU,虚拟机,读的时候就像在看计算机的发展史,妙趣横生。
有料。每一节都会解决一两个关键知识点,不多也不少,多了不容易说清楚,少了料就不够了。对于没讲完的点,或分成几讲,娓娓道来;或提供链接,自行参考。
3.对于个人发展,基础扎实,核心知识牢靠,才可以走的更远。
很喜欢这句话,Software comes and goes, Hardware is forever。
出去面试,面试官总是喜欢自上而下地问,我想这是为了更加清晰地判断我们所处的能力层级,但我们学习更加适合自下而上地学。
举个不恰当地比方,hardware像个基石,像是地基,而构建在其上software更像是一座座摩天大楼。
以前,我总喜欢从这栋楼,跑到那栋楼去欣赏高处的风景,但没有在意自己脚下的土地。
坐享其成总是容易的,可能出于畏惧,出于无知,出于懒惰,大学里对于CS里这些基础课程不上心,反而喜欢去熟悉一个个编程语言的拼写,现在看来真是蠢极了。
既然知识就在那里,早学晚学都要学,为何不现在去学,既可以收获精神上的满足,也可以获的物质上的奖励,何乐而不为,这里不是终点,这里只是开始。
再次谢谢徐老师。
2019-09-11 08:52:19
2021-03-08 15:57:29
2019-10-29 11:20:47
2019-09-14 22:12:36
2019-09-11 10:05:21
2019-09-15 12:02:13
2019-09-11 20:52:38
2019-09-11 19:55:38
2019-09-11 17:34:25
2019-09-11 07:42:47
2019-09-11 04:06:14
2021-08-06 16:39:54
2021-02-18 22:37:49
2020-11-20 20:40:08
2020-03-31 22:08:30
2020-03-21 15:15:57