程序员的修炼之路

时间:2021-12-16 11:50:59
很荣幸得到墨加的邀请,做了一次线上分享,对我来说一次自我梳理的机会,我把分享的内容整理成这篇文章,时刻激励自己,也希望能给那些和我一样在努力挣扎着的技术同胞们一点参考。

我们先来看看作为一枚程序员,这个行业对我们的要求是怎样的。这是一份工程师的职级表(点进去看),大约是参考腾讯系的技术族职称。我相信看完之后都会有种“路漫漫其修远兮”的感觉,就像游戏中升级打怪一样,开始升级比较快,越往后面越难。这是一场持久战,出征的战士应该时刻都注意检查自己的装备、时刻操练技能。


技能装备


我们应该具备哪些技能?参考了一些前辈的建议、结合自己的经验,我总结成四方面的能力。


一、技术实力


主要指计算机编程功底,比如编程语言,操作系统,算法能力,网络协议等等。这是作为一个程序员的最基本的能力,也叫硬实力。这方面的知识也叫专业知识,通常,我认为这方面的能力也是最容易提高的,只要愿意花时间研究,都能看到成果。


二、业务能力


技术不是目的,解决问题才是目的,运用技术来解决问题的能力就叫做业务能力,有时也叫业务感觉。比如,任何一个产品需求,你都能立即抽象出对应的数据模型;一个及时通信的需求,你能不能理解构建处数据模型出来。这方面的能力需要经验的累积和总结,而且和行业相关,你选择的企业,你经历的公司,你做过的产品都影响着你的业务积累。


三、沟通能力


陈景润是中国一位非常有名的数学家。上个世纪80年代,因为一篇报告文学披露了他在数学研究上的成就,成为一代中国青年的励志偶像。但是,他是一个口才极差的人。他1953年于厦门大学毕业后,分配到北京四中任教,因口齿不清,被学校拒绝上讲台授课,只可批改作业,后被“停职回乡养病”,调回厦门大学任资料员。幸好他被华罗庚发现,调入中科院专门搞研究,这个尖端人才才没有因为口才不好被埋没。


沟通能力的重要性,不用我多说了,码农届单身狗这么多,我想除了忙之外,还有一个比较重要的原因:不会说话。作为程序员,其实我门心中有很多想法,也有自己的技术知识积累,但由于口头表达能力的限制导致你的能力被打打折扣,相信有过多次面试经验的都体验过。


四、学习能力


世界上唯一不变的就是变化,人生唯一不能停的就是学习。这是贯穿一生都需要的能力,没有这项能力,你的能力系统将无法更细和维持。


以上分析了几个方面的能力,为了让我们的每一项能力都能提升到已定的水平,我们应当从现在开始就有意识的注意积累和修炼了。前三年,重点积累技术实力;三年或五年以后开始关注你的业务能力和沟通能力;五年以后开始注意自己的影响力和个人品牌。


时间管理


有些事,你不去管理规划好时间,你永远不知道怎么去执行。我把一个星期的时间分为一下几个部分。
  • 朝九晚五的工作时间
  • 睡前两小时
  • 碎片时间

朝九晚五的工作


这是比较大的一块时间,但是我们却很容易忽略这部分时间对我们的意义,很容易在这部分时间中错过自我提高的机会,我看过一些鸡汤文章说过一句话:一个人的命运决定于晚上8点到10点。其实我不太赞同这句话,如果我们连早上9点到晚上8点这么大一块时间都把握不好,还谈什么改变命运呢。


定期总结


通常我们出来的前半年或一年都会学到蛮多东西。但是到已定的时间之后如果你在的团队中业务压力不大,技术要求不苛刻,你第一年所积累的能力基本都能勉强应对的部分问题,这个时候如果你没有一些自我提高的认识,其实你大部分时间是在重复的事情。时间一长你积累的只是工作年限,没有提高技术。


我不知道手机前的听众有没有跳过槽,跳过槽的朋友有没有过这样的体验。你在工作能解决所有的功能需求,可以说得心应手,但是你面试的时候总觉得自己少了啥。特别是你明明独立完成了一个项目,当聊到项目中的一些技术细节时你总觉得自己回答得不够好。一个重要的原因就是我们工作中忘记了总结。

第一、我们要建立自己的技术账本,定期检查是不是有新技术“进账”。通常两个星期或一个月回忆一下,这段时间在项目中使用的技术,有没有碰到新的技术。如果没有,是什么原因?是自己没有注意还是这个团队根本就是没有技术要求?如果太久没有新东西“进账”是不是可以考虑换个东家了。

第二、回头看看自己的代码。结构还有解耦的空间吗,代码够整洁。这些都是一个程序员比另一个程序员高明的“证据”。


关注你的思维过程


很多思维上的区别都是很细微的,往往很难意识得到,很多思维上的选择可能某一个一瞬,而正是这些在岁月中千千万万个一瞬间的细微差异导致了有的人从菜鸟变成了大牛,有的人从菜鸟变成了油条。

你有没有过这样的体验:


 1、你在解决某个功能的需求的时候,碰到某个技术问题,通过搜索引擎,东拼西凑的把功能实现了。然后就忙着去做另一个需求去了,你看着实现的功能你以为你掌握你其中的技术,然后你的思维欺骗了你,当某天你和别人说想过技术实现的时候你居然说不出一二三来。


 2、你在解决某个功能需求的时候,想出了某个比较好的方案,不够这个方案实现会碰到某个技术问题,你番尝试之后。你开始要放弃这个方案了,后来你又想了一个比较恶心方案,这个恶心的方案完全可以使用你现有的知识来勉强完成这个功能,进度压力面前你选择了这个比较恶心的方案。其实我们绕过了难题,等于放弃了一次提高技术的机会。

这些或许都是你不轻易间的思维选择倾向,实际上远比我们想象的多得多。


 主动


最近看过一本比较老的书:叫做《程序开发心理学》,参考里面的观点,我把程序员分为了两种类型:服从型和主动型,服从型的程序员跟着团队一起进步,主动型程序员能推动团队一起进步。回头看看《工程师职级表》,我发现两个有意思的关键词:按时完成和主动推进。对一般工程师的要求描述是按时完成、独立完成xxx;对高级工程师的要求是:主动推进团队内某某问题的解决、主动推进公司内部某某问题的解决。说明那些主观能动性强的人更有机会升职。

有两本书,一本叫做《影响力》,一本叫做《乌合之众》,这两本书都是从心理学的角度讲述了群众心里的一些特征。群众中两个比较普片的特征是:多元无知和责任分散。


14年在深圳地铁站发生过这样的意见事:一名外企女高管在清晨晕厥卧倒在地铁站,晕厥体位原因导致呼吸不畅,大约50分钟后缺氧身亡。地铁站是一个人群川流不息的地方,类似这样的事很是让人感动惋惜,总能引起一些评论热潮:感叹社会冷漠,人情淡泊。但是很多路人事后也感到很茫然,觉得很奇怪。其实就是两个原因:一、搞不清楚状况,不知道当时人情况任何,这叫多元无知。二、人太多,个人没有清晰的责任,都觉得这么多人我不去做总有人去做这件事,这叫责任分散。


我们所在的团队中也是一个群体,也会有这两个特点。例如团队中貌似谁都在抱怨的问题,去没有人来牵头解决,这是为啥?一、很可能大家都知道问题在那里,问题的始作俑者可能三年前就离职了,对问题的原因不是太清晰。二、leader(很多leader未必能看到问题)都没指定我去做,我没这个责任啊。时间一久,问题越积越多,最终奔溃。


在这样的一个团队中,你应该去做那个主动的人。这是一次进步的机会,因为你会面临这样的挑战:
一、你必须去弄清问题的原因和解决方案。(技术上的挑战)
二、你必须去说服你的leader和你的团队。(沟通能力)
一定会事非常有意义的一次进步。

既要埋头苦干,更要仰望天空。


因为你所在的公司不可能是你的最后一站,你要想清离开的时候你改带走什么。有一部电影在豆瓣经典电影排名永远靠前,这部电影叫做《肖申克的救赎》。希望不要像里面的老布一样,七老八十走出*,发现自己适应不了外面的社会了,最后上吊自杀,在上吊的横梁上留下几个字:老布到此一游。

晚上两个小时


我把知识分为两类:一类是专业知识,另一类是认知知识。两者的关系像没有三点水的鱼和有三点水的渔的关系。认知知识会指导我们的大脑怎么去获取知识。
所有书籍也分外专业书籍和非专业书籍。关于心理学、关于思维、自我认知方面的书。晚上时间我一般看一些非专业书籍,我最近看过的一些书可以推荐给大家:
时间管理和知我认知的:《暗时间》、
思维方面的:《思考、快与慢》,受情绪支配思维系统和理性支配的思维系统的关系。
心理学的:《影响力》、《乌合之众》,群体心理学。

专业类书籍:《thinking in java》、《编程之美》、《重构》、《code clean》、《HTTP 权威指南》


碎片时间


 走路、坐车、蹲厕这些时间都可以认为是我们的碎片时间。这是一个越来越浮躁的社会,类似刷朋友圈这种事已经完全占据了我们的全部碎片时间,正在入侵我们的其它的时间、瓦解我们的专注力。我们是不是应该做些改变呢?或许你可以利用这个时间来做一些思考、练练自己的专注力。回忆着一天的工作有那些遗漏,或者近期关注的主题能不能做一些发散性的思考,人的思维就像黑夜里打着电筒行走,思维缓冲区是有限的,手机上装个笔记软件,把这些点点滴滴的思绪记录下来,在某个周末的午后在翻开,整理、串联,或许你会发现一些让你惊喜的收获。

编程是一件高大上的事


我们应该像画家对待自己的画一样对待我们的代码、努力把这件事变得漂亮些。做到以下三点:
一、坚持code review。我们为什么那么注重自己的衣着和发型?是因为我们知道出去就有人看我们这张脸;为什么大部分码农不注意自己的代码,因为码农从来不以为别人会来读自己的代码。所以code review 会让我们真正变得彼此自我尊重、彼此尊重,这是营造良好工程师氛围的第一步。
二、经常分享。每个人的视角是有限的,分享能增长团队内部的视野。
三、经常讨论。很多东西装在脑袋中其实是一个比较模糊的形状,人脑善于伪造完整,我们以为已经很完整的方案,往往在和别人讨论的开端就自己意识到一些缺陷。我有过这样的体验:有个疑问像要去和同事请教一下,很多时候当我想清怎么向他描述这个问题的时候答案也随之出来了。我还有过这样的体验:有人来找我问问题,问题说到一半,然后他说“哦,明白了”,我表示什么都没说。