指导学习(三)

今天的文章,不浪,没图。给大家加加油!

PNG

回顾过去一年,京东、知乎、美团、微博、去哪儿、滴滴等。爆出裁员的有多少,虽然最终都被官方辟谣。但是,你们懂的。


互联网寒冬之下,所有公司都勒紧裤腰带过活。那么,对于个体的你,不努力,不学习,想去大厂?凭什么。


请大家原谅我说话的直白。2020年就目前来看,对于企业是明显的买方市场(供过于求)。而且,未来几年应该都是这样。所以,大部分企业在招聘时,是要在很多优秀的人中去选出一个更优秀的人,而不是在一群普通人中选择一个优秀的人。


毕竟,如果你不够格,可能简历都过不了。而对于应届生,如果不能多维度的获取你的信息。那么出几道难题,在没有更好的替代方案之前,目前是唯一的选择。


所以我最终很直白的告诉这位同学,刷题,你还是得刷。该记的,你还是得记。尤其如果目标本身就是一个好的offer,那更应是如此。


但是,这样的回答其实是不负责任的。虽然我考虑到给对方一点压力,很直白的回复了他。但如果放开这一切,我们为什么学算法?为什么学数据结构?


“面试造火箭,工作拧螺丝” ,工作四五年,别说红黑树,就连普通二叉树基本都没手写过,我知道很多人都是这个状态。这种状态正常吗?正常。但不写不等于不用。就算真的不用,也不等于不需要知道怎么用。


其实,很多学生学习数据结构是有问题的。就这位同学而言,至少出现背代码,就是绝对错误的。数据结构的本质,在我看来是去契合一些应用场景,自然而然的产生,而不是死记硬背。


比如说红黑树,我们需要知道这是一种常用的平衡二叉树(或者说特殊的平衡二叉树)知道其对于查找, 插入,删除的复杂度都是log(n) —- n 这里是说树中元素的个数。如果你是java栈,你可能还需要知道 hashmap 为什么选用红黑树来实现。要知道红黑树可以在一些非实时任务调度中,可以高效公平的调度任务。要知道其所有的应用,都是围绕着“平衡”二字。这才是数据结构的核心。


至于实现的细枝末节,知道固然好,但没必要去逼着自己记忆。因为,我们的职业生涯里,绝对不可能出现让你手写红黑树的节点删除的场景。


但你需要知道为什么创造/引入它,它有什么特殊的,它满足哪些场景,又不满足哪些场景,不满足的场景又如何替代。这才是对数据结构的良好理解。


其实,除了算法,在我看来很多别的知识也是这样。只是说算法,更容易在面试的时候去展示而已。本身而言,并没有什么特殊的。


比如学习操作系统。那我们为什么学习操作系统?难道是让我们造出来一个操作系统吗?显而易见并不是。学习操作系统是让我们了解为什么会提出OS,如果没有OS又会是什么样子。它怎么样做任务调度,怎么样做进程管理,怎么样对可用的硬件做成抽象,死锁是如何产生的,内存是怎么管理的,文件系统是如何实现的,通信是指谁与谁的通信。不是说应付了考试就算学了,而是带着脑子掌握这个东西的脉络,这才是核心。


比如学习数据库原理,不是说让你去造一个数据库。当然你有这本事,那也ok。更多的是去了解数据库是如何来抽象数据管理的,大数据在什么场景下应运而生。学了之后,你会知道关系型数据库只是数据库中的冰山一角。你知道缓存,索引,批处理,中间件之中都是有着数据库的影子。你用 git 你会知道 .git 文件下,其实就用几个很简单的数据结构,就构建了一个数据库的雏形。你知道事务控制,其实最初只是想把事情做正确,你知道 ACID 是在保证什么。你知道数据库的整个设计中,很多时候我们是在性能和正确性中做选择。你知道除了程序员之外,还有 DBA 更加会关注高可用。你不会再觉得读写分离,主从备份多么高大上,因为你知道除了读写分离之外,还有快慢分离,异地多活,Replication 和 Failover 很多东东,都是上个世纪就有了完美的理论支撑。


比如学习计算机网络,不是说让你去死记硬背几层网络模型,都各自是什么。而是让你知道全球互联网是如何运作的,知道TCP为了保证数据可靠做了多少额外的工作,握手为什么是3次,不是456次。知道滑动窗口并不等于leetcode上的几道题。知道层与层之间是如何划分的。知道在计算机网络的基础下,还有计算机网络安全一大块基石。


比如学习编译原理,没人让你死记硬背那些分词算法。而是去知道为什么要划分词法,语法,语义分析。知道为什么很多语言要提出中间代码这个东东。知道编译原理很多东西,其实就是 NLP 的基础,其实就是智能机器人的基础。知道在 ES 的设计中,其实也参考很多编译器的设计。


当然,我们很可能不会完美的掌握上面所说的所有。但我们会在这个过程中,去发现自己的知识盲点,进而刻意提高。而不是一直陷入“学不会-理解不了-记不住”的死循环。


当然,对于要找工作的人,我们可以直接去击打一些面试痛点,更好的兼容社会。但我们面试过后,总归是要知识落地,这才能体现你的最终价值。


不要说什么“面试造火箭,工作拧螺丝”,拧螺丝的人,只能一直留在位置上拧螺丝。而努力拧螺丝的人,说不定就有机会去造火箭。而那些有造火箭能力的人,他们终究会造上火箭。