从事软件编程已经长达8年之后,曾经中间有很长一段时间感觉自己的技术能力没有得到根本性提升,与那些优秀的同龄人相比,技术自卑油然而生,面对日新月息的技术变更和时不我待的岁月流逝,步入中年的我不得不变的焦虑起来。回顾自己的编程生涯,刚毕业的头几年,通过自主学习实现了编程语言的基本掌握,紧接着使用学到的技术完成各种项目,然后日复一日,有时候也会看看技术书籍,但是终究未能突破语言层而知晓技术背后的本质。而后通过长时间的摸索与交流,寻找到了一些解决技术人技术焦虑的方法,这些问题和方法更多的是一种思维方式,一种看问题的视角,希望这些建议能够让我们有所收获和思考。
技术焦虑的起因
技术热情变低
有人说:职业倦怠是做了大量重复劳动缺乏调整,或者努力完成高风险问题最后却以失败告终而导致的。在软件行业,接触了很多人,发现一开始大家对技术都非常热情,当把它编程职业后,时间一长,就索然无味了,但是又不得不从事这个行业,毕竟还要养家糊口。缺乏热情,可能是我们进入了瓶颈期,在大量重复劳动当中,自然提不起什么兴趣。我们可以有两种方法破局:1. 主要要求承担自己感兴趣又没做过的事情。阿里有一句老话,“今天最好的表现是明天最低的要求”,我们要时刻突破自己所在的“舒适区”,让自己跳跃到“学习区”。2. 为自己而工作。为别人工作就很容易消耗的我们的热情,如果我们转变思路,把学习工作转变为为自己工作,就会有所动力。我过观察到的是,那些在专业领域上付出了极大热情的人,往往因为这个工作领域的投入而成就了自己的影响力,难道这不是在为自己工作,为自己打造信用背书,为自己打造个人品牌吗。
新技术层出不穷
新技术的迭代更新速度远远超过了我们获取新知识的速度,然而我们并没有过多时间去深入学习每一门技术。当我们还没有把Java并发包下的每一个核心类的原理弄清楚的时候,Java库已经从7升级到了10,我们还在谈服务化的时候,微服务、ServiceMesh、Serverless、FaaS这些新技术迎面而来,让我们应接不暇。工作多年的你,想一想,自己多久没有利用业余时间系统性的学习一门新技术了,我们往往以为通过多看微信朋友圈中的技术转发帖就能获取精华知识,以为我们自己在学习,其实这只是我们在安慰我们那颗想学习有不想付出太多精力的心而已。
加班太多,没时间学习
在之前离开阿里出去创业的几年时间里,几乎把能用的时间都用在了做业务系统,有很长一段时间,每天工作12小时以上,一周工作6天,深切能体会到长时间做业务系统的研发那种迫不得已。在面对各种Deadline时,我们做技术调研、技术方案也就马马虎虎过去了,恨不得一拿到需求就开始编码,每天拼命加班完成那些似乎并不那么重要的需求,反而搁浅了那些更重要的事情。一接到任务就开始 Coding 的程序员,通常就是加班最多的程序员,切记积极工作和勤于思考都要占时间。加班占用了我们太多的精气神,即便是有一时的闲暇,也想着让疲惫的身心得到一丝舒缓,哪再有学习的动力,我们似乎陷入已经坠入了加班与没有时间学习带来的焦虑陷阱。
有一些团队文化中,非常推崇加班文化,甚至开始攀比谁加班多,似乎谁加班多谁付出就多绩效就好。我曾经竟然可笑的认为通过加班付出的越多,自己的价值也就越大,团队也就越信任你,其实这是非常错误的思维,常态加班只能证明我们不会选择或者效率低下。考核一个人对业务和团队付出多少是拿业务结果来说话的,并不是那加班。认真想一想通过加班透支太多个人时间这件事情,我们为什么要加班?我们之所以加班,是因对之前承诺的内疚;加班让我们成为了一个只会低头做事情的人,让我们缺少了抽身看全局的机会。从时间投资的角度讲,常态加班,也是对我们自身时间的极大浪费,我们应该学会选择,学会拒绝,学会借力,做最重要的事情,给自己预留空闲时间,用来做自己喜欢做的事情。
解决技术焦虑
在意识在自我对技术的焦虑后,开始关注如何解决这种焦虑感,解铃还须系铃人,那些往往让我们害怕或者恐慌的东西才是我们需要去弥补的。技术焦虑也是一样,是一种技术不自信,是自己买二手手机靓号技术上有很多短板和盲区,伴随着中年危机的到来,害怕因为专业性的不成熟而被整个行业淘汰。去年华为去大龄码农,去的正是那些不能提供技术专业性的员工。解决办法自然是通过沉下心来,慢慢的把基础中的短板不起来,拓宽自己知识宽度的同时,挖掘技术深度。在整个学习过程中,一些几点也许能让我们跟轻松跟高效的来面对技术的学习以及技术焦虑的消除。
寻找兴趣点
很多时候,技术之所以对我们的吸引力不够,不能让我们为之废寝忘食的一个原因,那就是我们没有找到一个自己感兴趣的点。比如,我之前有一段时间对技术几乎麻木了,没有任何动力去翻看技术文章,遇到大家都转载的博文,也就是顺手收藏起来,明知道自己不会再看,还是自我安慰到兴许后续会有时间学习,一年下来技术基本没什么积累,我甚至开始怀疑自己是否适合程序员的岗位。直到有一天,朋友向我推荐了一本书《编码·隐匿在计算机背后的语言》,这本书从手电筒开合讲到继电器编解码,再讲到计算机的构造,让我大跌眼镜,以前觉得计算机非常高深莫测,看完这本书之后才觉得原来如此,我竟然有了在淘宝上购买继电器回家自己一台计算机的冲动。应用举一反三以及类比的方法,把“编码”、“解码”的思维应用在生活的各个细节当中,发现很多道理都是想通的。有人对它的评价是“这本书花两个半天读上一般的内容,你的人生就赚到了”。
自此,我似乎重新拾起了对计算机的兴趣。然后重新找回一些计算机理论知识中的经典书籍,一本一本开始看,以前觉得深不可测、遥不可及的知识点,掌握其理念之后,觉得也就那么回事。所谓技术自信,就是自身具备盖世武功,面对对手的花样进攻,坦然处之了的心态。
调整学习方式
作为一名技术从业者,“终身学习”的道理自然不必多讲。那如何学习呢,学习有哪些方式呢?这个问题我出来没有认真考虑过,难道还有人不会学习吗?引发我对学习方式的思考,是源于跟同事的一次闲聊。同事说“我喜欢整体性学习,对一门新技术,势必先全部通读一遍,然后知晓其原理在开始编码,防坑,可控性更强”,我想了想我的学习方式,说“我自己属于模仿性学习,现学现用,不懂就查”;为什么会有这两种学习方式呢?他们之间有什么区别,哪一种效率更高呢?带着这些疑问,我查阅了《如何高效学习》、李善友老师的《混沌大学》、许岑老师的《如何成为有效学习的高手》、小马宋的《朋友圈的尖子生》等多本有关学习方法的书,最后得出一个结论:一切事情都有方法论或套路,我们需要看清楚变化事物背后不变的本质。所谓套路,就是大家从历史中总结出来的可复制的经验,我们每一个个体按照套路行事,也能学会的东西。比如围棋的定式、程序中的算法、设计模式、菜谱等等,这些都称得上是套路。
那学习方式目前主要分为两类,一类是自然主义学习;一类是结构主义学习。自然主义学习是基于模仿,通过向他人学习然后进行自我实践,比如我们学习说话、绘画、溜冰、弹钢琴等;而结构主义学习是系统性的构建并创造新的知识晶体,比如数学、物理、编程。针对学习任务的不同,采用合适的学习方法能让我们学习效率事半功倍。在回过来看看自己过往在软件编程上的学习策略,一直是在是在基于点的模仿性学习,而非像结构主义学习那样,讲究面,讲究整体性和系统性。只知道各个点的弊端是让我们看不到面的边界,不知道还有多少我们看不到,这不仅给我让我们对技术产生焦虑,也让自己的视野变得越来越窄;看似每天很努力的工作和学习,其实效率不高、结果不好正是这个原因。所以,面对编程技术的学习,做好的做法是结构化学习,拿整块的时间来学、系统的学,学习技术的历史背景、技术的核心思想、技术的使用范围以及边界,然后再通过自然主义学习策略下的模仿进行逐步实践,方能让我们更快更好的获取到知识。
看清事情本质
我们重复编码了多年,还是不得要领,就像学习了各种武功,还是无法突破招数的局限一样,这可能就是我们只知道使用技术,而忽略了技术背后真正的核心思想。在过去一年中,我面试了很多的同学,发现很多技术从业者都有一个共性,那就是只会基本使用,不知其实现原理,即便有一些知晓原理,稍微变通一下后,就无法应答,说明还是理解不深。其实计算机技术知识跟其它门类的只是也是一样的,总有一个核心思想在里面,比如《论语》的核心就是“仁”和“礼”,《孙子兵法》中的借刀杀人的核心就是“敌已明,友未定,引友杀敌,不自出力”。
那么计算机编程的核心思想是什么呢?是那些变化多端的设计模式,是不断演化的架构形式?这些都不是,我查阅多本资料,发现其本质是 “程序=算法 + 结构”,然后拿着这个本质在去看spring 源码、Mybatis源码,寻找他们实现的核心数据结构是什么,算法又是什么,使用了什么套路(设计模式),在横向上跟其它技术做一下比对。比如spring中有缓存、Mybatis中有两段缓存、数据库有缓存、Redis分布式缓存、操作系统有缓存、CPU有缓存,为什么要使用缓存,这些缓存实现之间有什么共同之处?这还只是局限在编程里面,在现实世界中是不是到处都有缓存的实例呢,比如我们背诵各种诗词歌赋或者数据乘法表,以便在大脑中缓存这些知识,要得就是在最短的时间提取出答案,即便是占用大脑的一些记忆空间。再比如我们去食堂吃饭排队,这个队列是FIFO还是具有优先级的队列,如果队列为空了,打饭的是否是不是处于阻塞状态,如果队列满了,后来的人怎么办?当我们从学习的事情中进行抽象化,看到事情的本质后,在进行举一反三,多领域多维度验证,我们就会觉得“大道至简”,很多道理都是相同的,即便复杂如计算机系统也是一样。
当然除了看清楚技术的本质,我们在团队沟通协作当中也是需要应用这一思维,比如一个人发表了一个观点,那我们就应该想一想他说出这个观点的本意是什么,他是怎么想的,为什么会提出这样观点,这个观点的核心理念是什么,如果我们要说服他改变观点,我们要怎么做。在日常生活当中多刻意练习这一思维习惯,并通过与当事人的正面沟通寻求其真实本意的想法来及时矫正自己的思维模式(及时反馈),时间一长,习惯就培养出来了,这个时候,我们说话办事就不会再冲动和肤浅了。
独立思考
伴随着长大,让我们逐渐养成了“趋利避害”的行为习惯,原本自身上的各种棱角也被残酷的现实社会磨得异常圆滑,在各种决策中,我们似乎养成了随大流的习惯;学习技术,我们跟大流,别人学什么,我们也学什么;离职创业,在我们还没有想清楚自己是不是合适的时候,总理说“万众创业、大众创新” ,我们就投入到了创业的大潮当中;我们似乎活在了别人的思维模式下。那我们自己也有大脑,为什么就不能好好想一想自己目前的处境,未来的规划呢? 思考本身就是一件苦差事,我们身体的本能就是尽量大脑降低负荷,能不动脑就不动脑,我们要克服这种情况,如果大脑长时间不用,就会退化,让我们成为独立个体的正式我们透过独立思考展示出来的人格魅力。
我之前老板有一个习惯,就是每天吃完晚饭后,回到工作岗位上,给自己预留半个小时,让自己处于冥想状态,思考自己当前在做什么,为什么做,需求本质是什么,能不能不做,做的怎么样,是不是有更高效的做法,同行业是怎么做的,整个市场是怎么样的,未来三到五年会有什么变化。 他建议我也尝试此方法,我在尝试此方法之前,就感觉每天忙忙碌碌,也不知道为什么忙,做日常工作似乎只是为了生计或者不得不做,通过这样的训练,发现自己成为了这件事情的主人,看到了很多之前不曾看到的东西,之前只能这低头走路,看路好不好走,而忽略了路的方向以及路边精彩的风景。