如何做编程知识投资及减少知识失效的影响
知识就是力量。
引言
常常听到程序员童鞋哀叹:不过三五年,学到的大半编程知识都过时了。得拼命学习新知识新技术,这啥时候是个头?要解答这个问题,先来看初级工程师和高级工程师有什么区别。
初级工程师与高级工程师的区别在哪?初级工程师通常是按产品经理的要求堆功能,全然不顾系统整体的复杂性和稳定性,高级工程师则会对每增加一次的 IO 精打细算,因为每一个 IO 都会增加模块耦合和交互复杂性,会降低系统整体和局部稳定性。高级工程师不是从功能单点来考虑问题,而是从系统容错、性能、稳定性、高可用、可复用、可扩展性、可运维等多个层面来达到平衡。
初级工程师和高级工程师的区别在哪?从上述可知,高级工程师与初级工程师的知识构建体系是不一样的。高级工程师在原理、判断力、经验、系统设计方面要比初级工程师掌握更多,而在新知识新技术上的累积则可能不如初级工程师。这涉及到知识体系构建的问题。
知识就是力量
知识就是力量。这是一句耳熟能详的名言。但很多人都很困惑,我学了那么多知识,为何没感受到力量? 其实,这句话我觉得有两层含义:
-
被应用的知识才是力量。就像用在刀刃上的金钱才是真正拥有的财富。但“被应用的知识才是力量”显然不如“知识就是力量”简短有力。因此,下次看到名言名句时,不妨从字面意思稍微扩展一下,领会其真实的意图。
-
知识具备潜在的力量。 知识一旦被开发出来,就已经具备了潜在的力量。即使暂时没有人意识到它的力量,也不影响它具备力量的客观性。而一旦有人能够用在合适的场合,就能产生强大的效益和影响力。同样,“知识具备潜在的力量”也不如“知识就是力量” 那么简短有力。
编程知识体系
程序员在职业生涯中会累积很多编程知识。这些知识可以大致分为五类:
-
原理性知识。程序之所以能运行的基本原理和编程设计理念。万变不离其宗。失效率5%。
-
通用性的常用使用知识。比如 linux 命令。只要 linux 不倒,这些知识一直有效,除非有更好的工具更换。失效率 20%。
-
不太通用的易变性使用知识。比如某个库、框架、中间件的配置和编程。由于场景不断变化、技术更替,这类的使用知识很容易失效,甚至可能面临大面积更替。然而,很多程序员(包括我在内)在大部分时间都是跟这些打交道。失效率 80%。
-
稀缺性的经验性知识。比如 CPU 飙高、内存满、IO 抖动或尖刺、高并发的解决,这类知识是不过时且比较稀缺的知识和经验。失效率 5%。
-
稀缺性的判断力和设计能力。比如一个系统要成功,要具备哪些质量属性,如何去达成这些质量属性,如何在这些质量属性中作出取舍。如何解决棘手的性能问题、如何保证系统的容错能力、稳定性和可维护性,如何增强可扩展能力和通用能力,如何做到高可用?这类属于判断力和设计能力。失效率 5%。
(上述失效率数字是我根据自己情况凭感觉估,勿较真)
以上,第 0 类是基础之基础,却是大部分初学者最容易忽视的。以为没用,却决定了程序员的长远技术之路;第 1 类和第 2 类是接触最频繁的; 第 3 类是接触最少的(因为发生和有机会接触的概率就很小);第 4 类是经常会遇到但很少会去察觉和有意识去提升的。
在职业生涯的初中期,我们会积累大量的第 1、2 类的知识及部分的 0 类知识,尤其是第2类知识,以便有能力干活领取工资。然而,在中后期,很多人可能会止步于第 1、2 类,即着眼于实际干活,没有提升第0、3、4 类的知识,原理、判断力和经验没有跟上去,导致在某个时间节点上第 2 类知识大量失效,又缺乏新鲜的第 2 类知识来补足(毕竟人要考虑的非技术性事情也很多)。此外,第 0 类知识和第 4 类知识的匮乏,会导致第 2 类知识的吸收效率低下,加剧了知识失效的恐慌。
如果能够在投入大量时间在第 1、2 上,同时从中磨练和投资第 0、3、4 类知识,那么,按理来说,是不应当担心大量知识失效的。因为第 2 类知识注定是要失效的。保守估计人一生中会有 70% 的知识失效,但只要 30% 的原理认知、判断力和经验还在,第 2 类知识是可以源源不断补足,知识失效就不会成为大的问题。这就好比,人体细胞每天都会有大量更替,但只要机体能力在,细胞更替并不会对整体造成明显的影响。
事实上,知识失效应该是个普遍性问题,在各行各业都大量存在。只是在技术更替很快的软件和互联网领域感知得更加明显。
我们做编程开发时会考虑容错处理。同理,在知识体系的构建中,也需要考虑容错处理,即:能够容忍一部分知识失效,且不造成比较明显的影响。
知识投资
引申一下,其实是“知识投资”的问题。当我们求学的时候,是几乎没有意识到求学就是一种知识投资行为,只是觉得别人让我们学什么就学什么。待到踏入社会之后,知识投资就变成一个私人化的事情。有的人懂得投资什么知识并持续学习,有的人持续学习却不清楚该投资什么知识,有的人则干脆停止了学习(知识投资)。
种瓜得瓜,种豆得豆。
投资什么
该投资哪些知识? 从上述分析,答案已经很明显了:
-
原理性知识。这是认识和产生一切第 1、2、3、4 类知识的源头。掌握第 0 类知识的人是知识创造者,而缺乏第 0 类知识的大多数人,无可避免成为了知识的搬运工。
-
通用性常用使用知识。 够用即可,适量投资。
-
易变性使用知识。看准方向,谨慎投资。
-
稀缺性的经验性知识。这是很多人简历上很想要的内容,然而由于发生概率低、机会有限,实际上大部分人很难会有这样的知识和经验。有机会就投资,但不能强求。
-
稀缺性的判断力和设计能力。这是我认为最应该投资的知识。完全可以类比老医生把脉,看上去玄之又玄,又有实在道理支撑。
重点是原理性知识和判断力、设计能力。原理性知识需要定期学习、日积月累;判断力和设计能力则侧重在实践中磨炼和增强。
此外,对于非技术性知识投资:
-
待人处事。表达、沟通、谈判;至少要懂一点人情世故,做好对外接口。
-
经济财富。如今,个体的财富,已经远远不是靠个人努力就能实现,很大程度上会依赖国家发展和时代、行业的机遇。懂一些微观经济、宏观经济、理财、财富相关的知识,个人觉得也是很有必要的。不信你看,买房早的人,是不是比买房晚的人要少奋斗十年?我就吃了这方面的亏。
-
生活类。比如避险、护理、急救、烹饪、开车等。
-
爱好类。主要是作为生活的调剂,缓解工作的压力。
-
设计与艺术类。设计与艺术类可以成为生活的有力精神支撑,虽然看上去似乎没用。
如何学习
如何去学习和投资呢?
-
以用带学。在运用时记录不懂的地方,记录在学习计划列表里;有空闲的时候,就从学习计划列表里取出,理解原理。比如在开发时,使用的 API 接口;在下班之后,可以读读 API 接口的源码,学习里面用到的原理。
-
构建扎实的基础。阅读经典书籍,建立相对牢固的知识体系结构。比如学习 《深入理解计算机系统》、《高性能MySQL》、《构建数据密集型应用》等。
上班族很难有大块时间去学习,因此第一种方式比较适合;而学生党有大块时间,更应该采用第二种方式。
投资与消耗
如果我们把一个人的一生,用一个简单的经济模型来衡量,那就是投资与消耗。 投资,是指做能够在未来产生价值的事情;消耗,则是支出已经产生的价值。
比如,我学习摄影技术。这是一种投资。因为我学到摄影技术后,可以拍出好看的照片。朋友圈的人看了心情愉悦,指不定能做出什么好事儿,间接促进了社会经济效益的产生和流通。我游园,就是消耗,消耗自己的时间和钱财以及公园管理人员花费时间维护的美好环境。
理性的人并不拒斥消耗。理性的人只是拒斥持续不歇的消耗。持续不断的消耗是有害的,它会破坏一个人的基本经济生存结构,导致一个人从精神和肉体都会感受到痛苦。稍微理性的人,都知道要保持投资与消耗在相对平衡的状态。
投资也不一定有回报。投资会有亏损。即耗费了时间和资金却无所得。因此,投资并不是无缘由的大把撒花播种子,而是有目标有计划地播种浇水。
小结
本文缘起知乎一问。回答时,突然觉得自己的编程知识投资也做得不太好(做得较好的是对第 4 类知识的投资),没有有意识地去做相关知识投资,知识体系也不牢固。
知识就是力量。话一点没错。但必须做好知识的投资。对于编程知识而言,原理性知识、判断力和设计知识都是非常重要的知识类型。我们需要对这两类知识多一些“持仓”占比。