闲谈学习

常看到有人问这类问题, 「想去腾讯/百度/阿里做后台开发, 我应该看什么书?」或者是「想成为云风/鸟哥/春哥那样的大牛, 我应该看什么书?」。于是会有人给他列出不同阶段的书单,  从《C++ Primer》《算法导论》《APUE》《CSAPP》到《人月神话》, 从「黑书」「白书」到「龙书」。这些书像一本本武学秘籍一样, 似乎就是一条通向「牛人」的康庄大道。然而你有否想过, 从小学开始, 我们就和同学用一样的教材,做同一个老师布置的作业,有人成为学霸,有人成为学渣,这其中还包括很多很努力的学渣。不学会正确的学习和思考,机械的重复「努力」并不能成功掌握知识,更加不能融会贯通成「知识体系」而做到灵活应用。

现在互联网工作门槛低, 不管是程序员还是产品经理,一大堆连基本的逻辑因果分析推理都不懂,就上岗了。大量高度抽象的编程语言和框架的产生,也让编程的门槛越来越低, 聪明的人花三个月自学一门编程语言, 就能大致有模有样的做出demo来,然后找一份年薪碾压传统行业的工作了。即便不那么聪明的人,在培训班通过机械重复训练,用某些傻瓜式的框架做几个demo也不是问题。记得两年前iOS程序员火爆的时候, 薪水高的离奇, 很多人随便学一下就上岗, 年薪都是20万起步。这种趋势,加上分工的细化,似乎大家越来越觉得,「根基」没那么重要了,程序员也变成一个并不需要掌握计算机科学基本的「知识体系」的职业了。

招聘时,我们常说一个人「聪明」就行了,强调一个人的「学习能力」的重要性。因为技术在发展,业务也在不断变化,没有一种固定的「具体知识」可以应对这种变化。在掌握了一个学科或者行业的知识体系的过程,也是一个学习能力演进强化的过程。因此,当我们掌握并融会贯通后,也就具备了「知识迁移」的能力。比如,我们在计算机科学学习中,学习了「编译原理」「操作系统」「计算机网络」「算法」后,我们就开始理解计算机的工作原理。计算机包括现在的网络,是怎么一层层抽象出来的,这些抽象都解决了什么问题。

在操作系统中, 我们对这些计算机体系结构中的各个部件做了更高层次的抽象,通过学习和思考这些抽象的原因以及解决的问题,才能帮助我们学习新的内容和用于解决现实的问题。怎么把设备/网络抽象成「文件系统」,怎么把运行单元抽象成「进程」「线程」, 怎么做进程/线程的调度和管理, 怎么把物理内存抽象化, 怎么设计「Cache」, 如何解决资源的竞争, 还有「网络」又是如何抽象出来的. 实际操作系统中其实蕴含了后台工程师工作中可能碰到的大多问题以及他们的解决思路。比如如何设计一个任务队列/消息系统,如何把一个问题分割成不同的单元,如何协调调度它们。

记得经常听人说「面试竟然考KMP」或者「KMP算法根本记不住」等等,虽然我现在也并不能一遍「bug-free」快速写出来,但是我有信心不需要任何参考资料,靠自己「想」出来正确的写法。以此为例,应该从解决串匹配最朴素的方案开始,再思考它慢的根本原因在于「重复」,再考虑如何优化它,然后考虑如何抽象出一个「确定型自动机」,而「KMP」本质上就是一个状态机,其中的难点也就是如何找到匹配失败时的状态转移方式。进一步思考,如何用「KMP」来解决多串的匹配问题呢,尝试用多个串去构建DFA,你会发现「Trie + KMP」的解决方案, 这就是所谓的「AC自动机」了。理解问题之后,在加以「刷题」训练,这样才有意义。我们现实中运用「AC自动机」的例子也非常多,你可以试试「百度」「Google」的搜索框的提示栏, 或许你可以思考下怎么解决这个问题。

很多名校的数学物理的Phd都跑去投行搞金融模型,研究怎么套利怎么做风控怎么赚钱,而他们本身学习的那些超出你想象的高层次数学高能物理,并不能直接应用于工作中。但是做现代数学研究或者做高能物理的人,抽象层次非常高,对数据对事物间的联系和逻辑推演非常敏感,他们往往还需要设计各种实验或者猜想去验证一个问题。而在构建过去的「知识体系」中培养的特质,对他们面对一个新事物,如何探究其中的规律可能是至关重要的。

所有人似乎都知道,刷「leetcode」上的面试题目是去「FLAG」的最快捷方法,然而同样是刷题,结局却差异巨大。缺乏思考的「重复行为」并不是「勤劳」「努力」,而是一种偷懒,想走「捷径」的表现,这个世界上,这种「假装努力」的人实在太多了。当然,这里又抛出另外一个问题,「如何思考?」。这是一个很大的题目,我这里只简单谈一些我的看法。首先我们应该有基本的逻辑观,问题之间的关联,如何推演演进,什么是因果,如何证明因果,如何升华和一般化问题。而思考问题时,诸如「反证」「归纳」「控制变量做对比实验」等等,也是一些重要的素养。这些不止对工程师重要,其实对产品经理也重要,我们工作中常常碰到一些「拍脑袋」的PM, 就是搞不清问题间的关联,搞不清什么是因果,什么是随机。

我想,学习的过程,更多是一个独立思考,对比归纳,最后抽象升华一般化的过程,而不应该是一个记忆知识点的过程。这样我们才能在未来的变化中,能及时更新并接纳新的知识体系。

闲谈学习_第1张图片
欢迎扫一扫关注号 靖难的微信公众号

你可能感兴趣的:(闲谈学习)