大师兄

结束语 | 未来需要怎样的工程师

到这里,相信你已经学完了《计算机网络通关 29 讲》的课程,今天我想和你聊聊“程序员后续的学习和成长”。

你有没有想过:未来需要怎样的工程师?对于这个问题,我相信每个人都有自己的答案。同样的,我心里也有很多答案。这些年我看到优秀的工程师们,身上有很多很多的闪光点,我这里并不会一一和你探讨,仅打算选两个我认为很重要,而平时找我做职业辅导的同学又不知道的点。

未来需要怎样的工程师?

首先,未来需要学习能力强的工程师。你可能会说,我知道呀!那么这里我再补充一个小细节——学习能力很大程度是和你已经拥有的知识成正比的。通常情况下,在一个领域学习过的知识越多,那么在这个领域的学习能力就越强。很多同学以为学习是为了获得知识,其实学习很多时候是为了提高学习能力。

顺着这个角度我们再延伸一下:人的大脑和计算机有一些相似之处,比如都有存储、运算能力。学过算法和数据结构的同学都知道,如果数据结构设计合理,那么时间复杂度的提升不是线性的。比如最简单的求斐波那契数列的第 N 项,在没有缓存或者动态规划的情况下,时间复杂度是 O(2n)。但如果使用缓存(或者说设计合理的存储),复杂度可以降低到 O(n)。

有的人天生思考快、有的人天生思考慢,我们喜欢把思考快的人称为聪明人。其实,聪明并不决定最终的产出效率。你可以类比成数据结构用错了,连斐波那契这样简单的问题,人类的算力都不能够穷尽。但如果用对了数据结构,小学生也可以解答。因此,很多先天优势在拥有一定的积累之后,意义就没有那么大了。

综上,我建议你,多对知识进行分类整理,多思考多提炼,你可以用合理的知识结构去避免大规模深入复杂的思考,从而设计出更优秀的系统

第二,任何时候,不仅仅是未来,总是需要对生活、对世界有足够了解的工程师。面向对象的背后有范畴学的支撑,但是我们在用面向对象设计系统的时候,并不会使用范畴学,我们更多的是观察周围世界的运作规律,并将这些规律引入我们的程序,从而设计出更好的类型。

其实设计系统也是一样,需要从我们生活的世界中找灵感。我看到很多同学太过于钻研技术而忘记了自己要达成的目的,陷入每天向老板汇报项目进度,和产品经理沟通排期,每天根据原型设计系统实现需求的循环往复之中,却忘记了最重要的本源——我们为什么要做这个系统?如何更好地服务用户?系统能够带来什么改变?

我看到一些优秀的人,为了回答这几个问题,会不断探索自己所在的行业,学习行业知识,不断思考如何让自己的系统可以适应行业和时代的变化。

综上,这里我给你提出第二个建议——找个时间,抛开技术,思考下自己所在的行业需要什么技术?特别是未来 5-10 年需要什么技术?自己有这方面技能吗?自己还要学什么?

写在最后

最后再和你聊聊我自己的经历吧。先说说学习能力这块。我的学习能力是通过长期的学习逐步提高的。一开始,我学东西很慢,一个 Bug 查资料可能卡一天,一本 C++ 的书看一遍花了很长时间。但写项目的时候,仍然发现有很多知识没有理解透,需要反复去钻研。

后来随着年龄越来越大,明显感觉到精力在衰减,但是学习的速度反而越来越快。现在我学习一门语言,扫一遍目录就知道大概,挑几个重点看一下就可以使用了。但是刚开始学程序的时候,一些库、框架需要琢磨很久才能使用。后来见得多了,接触一些新的框架时,往往几天就能理解到原理层面。所以,学习速度非常依赖你已经掌握的知识体量,而且可以通过积累提速。你千万不要因为暂时知道的少,学习慢就失去信心。

下面再来聊聊我做技术 Leader 这些年总结出来的事情。做一个技术 Leader,主要有两方面事情,一方面是提效,无论是技术重构、研发流程优化,还是招聘员工、代码 Review,提效都是一个重要目标。另一方面就是赚钱,帮公司赚钱。我在职业初期,更多的是把精力放在提效上,深入钻研了很多技术方案。直到做了许多年的 Leader,才发现帮助公司发展业务,其实也是一件非常有趣,且很有成就感的事情。

作为一个过来人,希望你在工作中不要忘记生活,学习中也不要失去韧性。要知道,功夫在诗外。如果感觉自己处于瓶颈期,静下心来去旅旅游,回家乡小住一段时间都是不错的选择。

以上就是我想和你分享的,从业这些年来的一些想法和经验。发现求知的乐趣,我是林䭽。再见。