其实我想说:所谓“黑书”只是因为国外的部分书籍翻译成中文版后,由机械工业出版社出版的计算机科学丛书,它拥有一致的、现在看来很经典的黑皮封面,整个系列都是黑皮书,所以我们才叫“黑书”。
书无贵贱,重点看你怎么阅读和学习。就以 Java 技术栈的语言部分来举例好了,难道 Thinking in Java / Head First Java / Effective Java 等书也是国外的邪门歪道吗?相信我,国内大部分大学的 Java 教学水平和目标差不多也就是计算机二级,你只学学校课程在企业里面只能拿到 36 分诶,开平方乘 10 的那种懂吧。不管是国内的《疯狂 Java 讲义》还是各种不限于黑皮的国外 Java 书籍,按现在企业招聘要求来看,你不会 GC 垃圾回收原理、不会手写简易 GC 、不会底层数据结构、不会 JVM 原理的话(嗯我在针对阿里),学完也只能拿到 60 分好吗。企业生产早些年动不动就高并发、中间件,近年来还都上了微服务和云服务,你不会这些怎么跟其他应届生打啊?学校的本科课程会教,还是研究生课程会教?这就是冰冷无情的现实、血淋淋的事实!不然你为什么还要报培训班 or 学习培训课?
或许我的经历很符合这位同学的吐槽:我大二那年觉得计网的老师讲得太烂了,自己去学计算机网络(对,黑书)和 TCP/IP (这套当然就不黑了),结果毫无疑问地挂科了,哈哈哈。是不是很能证明这位同学说的“不推荐看黑书而忽视学校课程”?
确实是的。因为老师看我不爽(大概吧,但另一个故事了),加上我没有按学校的课本教材背知识点,所以我直接挂了, 59 分。我们的计网分上学期理论课 + 下学期实验课,我的实验课还不错,印象中是 80+ 分不上不下。最终我怎么过的呢,跟以往的理论课一样,我根据老师课上画的重点(由于我补考,由下年级同学们提供)和我认为课本中可能的考点,花 1 天时间做了一个几页 A4 纸的提纲,打印下来又花了一晚上背提纲,最终就勉勉强强过了。我们同学在几乎所有的理论课都是这么操作的,不然什么叫期末考试周? 2 天背一科,两周考完,轻松得很。给大家看看我们当年班级学习群的群文件:
布莱克士多是我。图中只是很小一部分,有很多资料不是以“提纲”命名的。应该不会有人纠结下载量和时间吧,下载量大概是因为时间久远 + 近些年 Q 群文件爆过 bug + 我用 mac 端丢了;时间是最后修改时间,我分类到了文件夹中。
我这个例子当然不是贬低学校课程,重点是在于它想要好好学、好好考并不是一个特别难的事情。我作为少数愿意参加教学调研的自大狂,曾经也问过关于课程和考试难度的问题,得到的回复类似:“要考虑非顶尖的中下游同学,要保证大多数人都不挂科”。所以课内学习不是说不重要,而是你稍微认真一点多花精力就能至少做到及格。当然做到优秀(我认为是期末考 90 分)就是另一回事了,不是简单死记硬背就能解决的(我当然也有一些科目拿过),这里不做展开,但至少满足这位同学说的“不后悔”,考个 80 来分骗骗考研应该没问题。
说回我自学看的计算机网络和 TCP/IP 吧。在工作后的很长一段时间,我对于网络协议的理解算是比较深刻,至少我不用去刷面经就大概知道 TCP 和 HTTP 协议的工作细节,我能很快搞懂 HTTP 2 和 QUIC 到底是怎么回事,甚至你问我现在的物联网是怎么组网的我也能说个大概。这也没什么了不起的,只是帮助我在工作中:当同组同事都懵圈的时候准确定位 CDN 的问题、摸清楚某亿级用户 App 客户端的网络架构、熟悉了前端/客户端/网络中台是怎么配合优化的,应该不足为道吧。只是如果仅按当年的课程教材来学的话,嗯,协议细节应该是仅限于三次握手四次挥手、无线网络是怎么定义怎么通讯的,经典的滑动窗口和拥塞控制,你去问问毕业生,十个有一个能背出来的算我输。仅此而已吧。可能结局改写成我也是那懵逼中的一员,但不影响工作,反正求助网络架构同事也能解决问题。
我当然能理解这位同学说的对学校课程不重视带来的后果(至少我挂科了对吧),但这是当时我自己的选择,我很清楚当年我就是奔着挂科去的。如果你想既要又要,那也挺简单的,别学我逃课不听讲,平时作业认真做,所谓的“黑书”完全可以课余时间抽一点出来看。啊对了,你总不能认为我高中就学过计算机网络原理吧。