👉目录
1 源码被猫吃了
2 破窗
3 听从蜥蜴脑
4 打造个人工具集
5 不要超出前灯的范围
6 有效地交流
7 到底是什么造就了务实的程序员以及人生是你的
本文通过对话形式探讨了《程序员修炼之道》一书中关于程序员软技能的核心观点,重点分析了责任感、破窗理论、蜥蜴脑直觉、工具集优化、风险边界控制及高效沟通等话题。
作者以浅显易懂的案例拆解,指出了程序员的核心竞争力不仅在于技术能力,更需通过责任感、职业素养和系统性思维实现自我提升与团队协作优化。
关注腾讯云开发者,一手技术干货提前解锁👇
三金哥:听说你最近有在精读《程序员修炼之道——通向务实的最高境界》第2版,还有不少的心得想要和大家分享呀。
大师兄:精读说不上,你是了解我的,兄弟,我这个人呢,好读书不求甚解。不过这本书还真是有点意思,我浅浅的读了两遍,不说受益匪浅吧,也能说收获良多了。
三金哥:你展开说说呢。
大师兄:我发现书中有些想法比较有哲理,不仅适用于编码,同样适用于做人做事。
三金哥:哦?你要是这么说,我可就不困了,我以为你会跟我去讲书中的一些程序员的编码技术呢。
大师兄:那你看,其实我们从吴银光老师的文章《如何成为一名靠谱的程序员:职业素养入门指南》中也能学习到啊,程序员的能力不只是在编程能力,还在于各种软技能,我发现书中提到的各种软技能和吴银光老师的文章有异曲同工之妙啊(吴银光老师在他文章文末也提到了,《境界》这本书是元知识之一)。
三金哥:只要不是讲关于技术的,我就洗耳恭听。
大师兄:有句老话是怎么说的了?不是技术搞不起,而是软技能更有性价比。
三金哥:得,差不多了啊,兄弟,要不咱们开始挑选要点讲讲?
大师兄:可以的啊。我们这期可以先从软技能的要点讲起,如果点赞过10万,下一期技术篇吉日肝出。
三金哥:你还不如直接说,没有技术篇得了。
01
源码被猫吃了
大师兄:前面都是闲扯淡啊,咱们还是讲讲书中作者的智慧吧。既然前面提到了有很多做人做事的道理,那我们就先从这个方面开始吧。你觉得成为务实的程序员的最重要的特质是什么?
三金哥:我觉得务实程序员的最重要的特质是成为靠谱的程序员,值得信赖的程序员?
大师兄:你说的不完全准确,但是靠谱确实是务实程序员需要具备的众多优秀的品质之一。那么如何才能成为靠谱的程序员呢?我觉得首先还是要先成为一个靠谱的人。智者曾有言曰:“做事先做人“么。而通往靠谱的路上,责任感绝对是你逢山所开的路,遇水所搭的桥。你要用于承担责任以及获得团队信任。
三金哥:那确实是,不会有人愿意和没有责任感的人共事。
大师兄:我们都知道,信任的建立是一个漫长的过程,需要在一个个项目中并肩奋战,以自己的专业能力、沟通的技巧、全情的投入来解决过程中的遇到的问题。只有在一起共同经历了足够多的成功,团队中的其他成员才能知道你的能力边界,知道你的做事风格,知道你对工作的投入度,知道哪些事情可以信任你。而对比于漫长的信任建立的过程,信任之墙的倒塌只需要轻轻的一推。想象一下:假设在《复联4:终局之战》中,初代英雄们通过量子世界回到了各个时间段去取各个无限宝石,在历经千辛万苦,终于把宝石都集齐后,这时要返回现实时间线时,雷神因为喝多酒睡着把返回时需要用的粒子弄丢,导致整个任务失败了。这就会使大家对雷神原本就不富裕的信任雪上加霜,即使后面能有所补救,这种对信任的破坏也很难补救。
三金哥:你这个例子怎么举得这么奇怪?
大师兄:emmm,被你发现了。江郎才尽了呀。不过不要在意这些细节,意会意会。和建立团队信任同等重要的是要承担责任。当自己的工作没有高质量的完成时,不要把问题归咎于别人或其他什么事情上,也不要寻找借口。不要把所有的问题都归咎于时间太赶、编程语言不熟悉或者同事不给力。这些因素都可能是问题的一部分。他们的确会对解决方案产生影响,但不是给你的借口。
如果你打算跟别人解释为什么做不完、为什么延期、为什么搞砸,在此之前先等等,讲给你的工位上的QQ公仔或者是对着你的猫说一遍啊,你的那些借口听起来合理吗?还是很愚蠢。如果你跟你的老板说:“我的源码被猫吃了”,是解决不了问题的。打算敷衍搪塞前,试着驱走这些念头,如果实在做不到,试着跟你的猫通个气,毕竟你要让他背锅。但是你要注意,确保你的猫它不是能吞下宇宙魔方的“噬元兽”。
三金哥:我倒是没有遇到源码被猫吃了的同事,但是没责任感的倒是偶有所见。
大师兄:林子大了什么鸟都有么,即使这片林子叫鹅厂。不过有一点需要说明的是,即使你的同事跟你说,他的代码被猫吃了,因为他的猫可能真的是噬元兽。你也不要抱怨,不要指责,因为这不会对解决问题有任何帮助,我们要有面对问题的勇气,要向前看,改变你能改变的,接受你不能改变的。抱怨和指责解决不了任何问题,还是要看看怎么才能更好的解决问题。
02
破窗
三金哥:除了责任感之外,书中还有哪些有趣的想法呀?
大师兄:那必须还有啊,不过在讲之前,我想先问问你,你知道什么是“破窗”理论吗?
三金哥:破窗?我知道,在经济学中有个所谓的“破窗谬论”:当无事生非的青少年用砖块打碎面包店的窗户,人们会跑过来并惋惜道:“多可恶”。但你可能不知道,有人会提出“坏事变好事”的说法:现在面包师将不得不花钱来修理窗户,这会增加修理工的收入,而修理工又将收入用于支出,这又增加了其他卖者的收入,以此类推。你知道,支出链将以乘数扩大,并带来更高的收入和就业。如果打破的窗户足够大,它可能会带来一轮经济繁荣!。。。。。
大师兄:兄弟,打住,我跟你说心理学,你跟我说经济学。虽然你说的有点道理,但其实在这里一点道理没有。我所说的破窗场景是:
在一个宁静的小镇上,有一个居民区,这里的楼房都是有些年头的老建筑了。其中有一栋楼的楼道窗户在一次风雨交加的夜晚被狂风刮破了。起初,住户们并没有太在意这个情况,心想或许是某个住户会主动承担修理的责任。然而,日子一天天过去,破窗户依然没有得到修补。
住户们开始意识到,窗户破了都没人补,那么平时楼道里的卫生是不是也没人打扫呢?于是,一些人开始不再关心公共卫生,随手乱扔垃圾,不再按照规定的时间倒垃圾。楼道的卫生状况逐渐恶化,原本干净整洁的环境变得脏乱不堪。
慢慢地,这种不良现象影响到了整个小区的氛围。原本邻里之间关系融洽,互相帮助,现在却变得彼此猜忌,谁也不愿意多付出一点努力去维护公共环境。甚至有的住户开始考虑搬家,离开这个曾经温馨的小区。
随着时间的推移,小区的其他设施也开始出现问题,比如绿化带里的花草无人修剪,儿童游乐设施因为长期无人维护而变得危险重重。小区的物业管理部门对此视而不见,因为他们认为居民们自己都不关心环境,他们又何必费心去管理呢?被遗弃的感觉最终变成了现实!
三金哥:就是当有窗户破了还是要尽快补上,要不然会带来一连串的负面的连锁反应。
大师兄:你说的没错,其实这个道理也完美适用于软件工程领域。具体到如何成为一个务实的程序员,书中建议:不要搁置“破窗”(糟糕的设计、错误的决定、低劣的代码)不去修理。每发现一个就赶紧修一个。即使没有足够的时间完全修好,那么就把他钉起来——注释掉糟糕的代码,显示一行“TODO,暂未实现”,或者使用假数据进行替代。这样,即使不能完全解决问题,也能让其他协作的成员能够意识到这些糟糕的代码是有人关注的,不是“无主之地”。采取预防措施,防止进一步的伤害。
三金哥:的确是这样,提到这里,我又想提经济学啦:人民群众的信心对于经济的提振有很大的作用,在软件工程中,“破窗”就是那个会影响项目成功信心的很重要的一个元素。
大师兄:其实,书中还提到了两点:不要伤害以及不要助纣为虐。我觉得这两点和破窗理论有一定的关联性。
三金哥:你展开说说呢。
大师兄:书中对这里的表述相对比较含蓄。这两点可以合并到一起来说,核心思想是:现在各种软件系统特别是嵌入式软件系统无处不在,我们的想象力无处不在,从发电厂到汽车再到医疗设备,即使是简单的中央供暖系统或者家用电器,如果设计或使用不当,也会致人死亡。现在鹅厂所提供的很多产品已经逐渐成为了互联网行业的水和电,其中不乏用户数量级以亿计的产品以及涉及到各个行业安全的产品。能力越大,责任越大。人无完人,每个人都会时不时的忘记一些事情,但如果你不能满怀信心的声明自己已尽力列出所有后果,并确信能保护用户不受其影响,那么当事情变糟时,就难辞其咎。我们需要守住的最起码的底线是,我们能承诺“不要伤害”以及“不助纣为虐”,也可以理解为不主动的去制造“破窗”。这其实也是和鹅厂的“正直”的价值观相辅相成的。
三金哥:怎么感觉突然提高高度了呢。听你这么已解释,我已经完全懂了“破窗”理论了,你还有其他的好玩的思考吗?
03
听从蜥蜴脑
大师兄:当然了。我想说的第三个点是:“听从蜥蜴脑”。
三金哥:等等,咱们聊天的学科跨度有这么大吗?这会儿又跳到生物学去了?
大师兄:对,也不完全对。这里提到的蜥蜴脑是指人类大脑中负责本能行为、习惯形成和情绪反应的区域。这点还要从加文-德-贝克尔说起,他的毕生工作主要就是帮助人们保护自己,他的书《恐惧给你的礼物——关键时刻直觉能救你的命》讲述了这些知识。本能就是我们的无意识大脑对模式的一种直接反应,有些是天生的,有些是通过不断地重复学习到的。当你作为程序员积累了经验后,大脑就会逐渐形成一层又一层的隐形知识:这样可以工作,那样不能工作,导致某种类型错误可能的原因是什么。这部分大脑会在你停下来和别人聊天时,保存代码,即使你没有意识到你在这么做。因此,当一种直觉被触发时,你不会注意正在闪烁的光标,不会注意不断跳动的图标。你会感觉到胃口或者胸口不舒服,你会感觉到紧张。你有过这种体会吗?你觉得这个时候应该做些什么呢?
三金哥:有过,原来这就是所谓的蜥蜴脑啊,面对危险时的本能反应。当我遇见这种问题的时候,作为一名专业人士,我会坚持下去,一步一个脚印的去解决问题。
大师兄:我很遗憾的告诉你,你真正应该做的事情可能恰恰相反。当你有这种感觉时,你的代码试图告诉你一些事情。它说这超过了本应具有的难度——也许结构或设计是错误的,也许你解决了错误的问题,也许你刚刚创造了会有很多Bug的农场。无论是哪种情况,你的蜥蜴脑正在感知来自代码的反馈,它拼命的尝试让你倾听。
三金哥:真的假的?我确实遇到过这种情况,并且我也继续在坚持着工作下去,毕竟我是一名专业人士,要不然我还能怎么做呢?
大师兄:倾听内心的蜥蜴。首先,停止正在做的事情,给自己一点时间和空间,让大脑自我组织。远离键盘,停止对代码的思考,做一些暂时不需要动脑筋的事情——散步、吃午饭、和别人聊天啊,或是先睡一觉。让想法自己从大脑的各个层面渗透出来:对此不用很刻意。最终这些想法可能会上升到有意识的水平,这样你就能抓住一个“哦!!!!”的时刻。如果这招也不起作用,就试着把问题外化。把正在写的代码画到纸上,画的好坏无所谓,灵魂画手也能发挥他的能力,或者向你的同事(最好不是程序员)解释下怎么回事。如果你比较腼腆,大家又都比较忙,你跟企鹅公仔唠唠也不是不行。把问题暴露给不同的大脑,有的时候即使是公仔也能帮你解决问题,在你跟公仔的对话过程中,可能就会灵光乍现,犹如一道闪电劈中你。所谓醍醐灌顶,然后你就会发现:问题已经解决了。
三金哥:所以也就是说,不能持续的闷头干活,不要一个人钻进代码中,要合理的“摸鱼”?
大师兄:听起来有点奇怪,但是这么个意思。适当的“抬头看天”,找个能激发你思路的同事。
三金哥:是不是妹子更好?
大师兄:这个不重要,因为编程往往困难又费力,找个朋友跟你一起干,实在不行,找个你看的顺眼的公仔吧。如果上面的这些对你都不起作用,那还是赶紧使用“原型”吧。
04
打造个人工具集
三金哥:前面的这些说的都太精彩了,接下来你又要转换到哪个学科了?
大师兄:你会做木工吗?
三金哥:你说的是木工那个木工吗,就是鲁班祖师爷那个木工吗?
大师兄:没错,班门弄斧那个木工。除了斧头之外,木工可能需要尺子、量规、几把锯子、各种尺寸的凿子、刨子,甚至还需要钻头用来打眼。
三金哥:你为什么会知道的这么清楚?
大师兄:因为我爸爸就是十里八村有名的木工。我从小就耳濡目染,什么刨子锯子都耍的有模有样。
三金哥:所以,你想说什么呢?
大师兄:不好意思,又跑题了。我想说的是,无论各行各业,都有自己的工具集,木工有刨子、渔夫有鱼钩、樵夫有斧子、律师有张嘴。这些工具集都是精挑细选出来的,工具会放大你的才能,工具越好,同时你越知道怎样用的更好,效率就越高。一开始一组基础的通用工具就够用了。随着经验的增长,伴随着各种特殊需求的出现,你会扩充你的工组集合。
三金哥:哦,我明白了,程序员也是类似的吧,需要不断地更新自己的工具集合。
大师兄:许多新程序员依赖单一强大的工具,例如特定的 IDE,总是离不开自己很舒服的那些界面。其实每个程序员都需要跳出 IDE 的限制,而去拥抱各种让自己提高工作效率的各种基础工具集。比如 awk、perl、Python、shell 等。花点时间学习使用这些工具,某一天你会惊奇的发现,自己十指翻飞敲击键盘,在下意识的处理文本。这些工具将成为你双手的延伸,帮助你快提高你的工作效率。每个人都有自己所偏爱的工具类型,无论这些工具集是什么,熟练的掌握他,多花些功夫在工具集上面,所谓“兵欲善其事必先利其器”、“磨刀不误砍柴工”。花一些功夫买把磨刀石、把刀磨快。
三金哥:所以,打造个人工具集的主要目的也是为了提高工作效率。除了上面说的这些外,还有其他能用来提高效率的方法或者工具集推荐吗?
大师兄:大家都知道,最近这两年 LLM 的应用非常多,公司内部也有很多的优秀的实践经验,在各方面通过 LLM 的应用来帮助我们提高工作的效率,我就不班门弄斧了。不过我觉得提示词工程是和 LLM 交互的基本功,可以系统性的学习并实践下提示词工程。在这块你滴师兄最近也开始有些实践了。后面有合适的产出时,我再分享给大家。
三金哥:这个和你线上线下多交流呗?
大师兄:嗯,随时聊起。
05
不要超出前灯的范围
三金哥:这本书中还真是有不少有趣的想法呢,并且好多还真的是不仅适用于软件工程领域,还真是你说的各种“软技能”,那我们继续?
大师兄:继续。你平时开车吗?
三金哥:偶尔开车,但是你抓不到我的证据。
大师兄:我表示不想和你说话,并且给你了个白眼。因为我接下来要想讲的是关于安全驾驶的:
夜深了,天很黑,下着倾盆大雨。一辆双座汽车在弯弯曲曲的山间小路上来回急转,几近失控。这时,出现了一个急转弯的提示牌,汽车错过了它,撞向稀疏的护栏,冲入下面的山谷后燃起大火。一场悲剧就这样发生了。赶到现场的那些交警里,有个高级警官惋惜地摇着头说:“一定是冲出了前灯”
三金哥:这种事情好像每年都在发生。
大师兄:超速行驶的双座汽车是不是跑的比光速还快?当然不是,没有什么能超过光速。这名警官提及的是,司机在前灯照射范围之内及时停车或者控制方向的能力。
前灯有一定的照射范围,过了临界点,就会难以维持效果。此外,前灯只是在直线上投射,不会照亮任何偏离轴线的东西,比如道路上的急转弯、山丘或斜坡。
在软件开发中,我们的“前灯”照明同样有效。我们无法看到遥远的未来,离照射轴越远,就越黑暗。所以务实的程序员都要坚持的一个原则是:小步前进——由始至终。总是采取经过深思熟虑的小步骤,同时检查反馈,并在推进前不断调整。把反馈的频率当做速度限制,永远不要进行“太大”的步骤或任务,这样我们能够及时的发现问题。在发现问题后如果有必要我们要:尽快重构,经常重构。至于怎么能让我们的设计易于重构,这就是《通向务实的最高境界》读书笔记的第二篇技术篇中要重点聊的。老规矩,本期点赞过10万,吉日肝出。
三金哥:认真的吗?又来?
大师兄:关于前灯的理解,我还有一点个人不太成熟的想法。如果把前灯看成是自己的能力范围,那么不要超出前灯的范围在一定程度上也可以理解为:不要做超出自己能力范围之外的事情。这点在人身财产安全方面也有一定的道理,比如:早日行乐,慎入股市。不要玩火,毕竟每个人都还有自己的社会责任。
06
有效地交流
大师兄:在最后结束之前,再跟你简单说说书中提到的沟通技巧吧。比如《五星沟通》。
三金哥:了解听众、明白自己想说什么、选择时机、挑选(表达)风格、让沟通的内容看起来不错(非语言类)、让听众参与、做倾听者以及回应别人。
大师兄:不错嘛,你也是肯读书的。上面的这些点中选择时机这一点盟主讲的已经相当清楚了。我就着其他的点简单展开说说吧。
第一点是了解听众,其实这个很好理解,同一件事情你跟同级同事沟通和你去找领导汇报,那肯定是有很大的不同,因为不同角色的视角不同,对你需要沟通事情的了解不同,需要关心的重点也不同,类似的例子有很多,我就不举具体的例子了。
第二点是明白自己想说什么,从我个人的经验来看,如果是一件相对没那么复杂的事情,大部分人可以表达的清楚。但如果事情复杂一点,特别是逻辑相对复杂,涉及到多方角色、多个依赖时,想要把事情讲清楚可能还是有些难度的。所以在跟别人沟通之前,明白自己想说什么并且能把自己想要表达的给说清楚是很重要也有些难度的。就拿你滴师兄我来说,我之前把自己写的文章录制成视频时,一个视频的开头就录制了5遍之多,最后还是通过打草稿才达到了想要的效果,对比最后一个版本和第一个版本,质量的差异之大也是让我意识到了三思而后言的重要性。所以一个相对比较靠谱的建议是:在讲之前先打好腹稿,可以考虑“结构化”输出,按照总分、一二三等格式把事情给理清楚。另外,如果是比较重要的汇报、答辩等,要先有稿,再脱稿演练几遍。其实这事儿说白了就是:熟能生巧。兵法有云:不打无准备之仗。在日常的工作中,多多积累,多有意识的锻炼下自己的表达能力,抓住每一个能表达的机会。从这一点上来看,各种日会、周会还是有其积极的一面的嘛。问题是,机会给你了,你有好好利用吗?
关于第三点,其实分为两个方面,一个是要确定你的听众的风格,一句美语俚语有云:“give the monkey what it wants”,是长篇大论还是只含必要事实的简报,要啥给啥嘛!。第三点的另外一个方面是挑选你自己的风格,或者说形成你自己的风格,不是每个人都能形成“are you ok?”的风格,但确实是可以适当的加入自己的特色。
最后,第四、五、六、七点也都是非常基础但又非常重要的沟通技巧,我就不展开了吧,字面意思也都比较好理解。除了上面几点外,最近在看小米SU7发布会时从雷老板那里学到的一点是:真诚是最有利的武器(可能会有异议)。除非你与世隔绝,否则必须学会交流。越是有效的交流,影响力就越大。
三金哥:你管这好几百字叫简单聊聊吗?
大师兄:这不是好不容易讲到了我有实际经验的点了吗,整篇文章我也就这块有点实际经验可不得逮着使劲儿讲讲么。
07
到底是什么造就了务实的程序员以及人生是你的
大师兄:文章的最后让我们回归这本书的核心内容:到底是什么造就了务实的程序员呢?
三金哥:好嘛,讲了这么半天,不扯各个学科,终于回归正题了。
大师兄:所谓:“有趣的灵魂千千万”,每个人都是独特的个体,我们的程序员群体也是一样。他可能不动如山,他可能其徐如林,他可能其疾如风,他可能侵略如火。然而作为务实的程序员,他们都会有如下的共同特征:
快速的适配者:对技术和技巧有着超乎寻常的直觉,喜欢尝试。当遇到新东西时能够快速掌握并且和已有知识进行结合。他们的信心来源于经验。
好奇:倾向于问问题,一个典型的场景:真不错,你是怎么做到的?符号链接是怎么实现的?热衷于收集各种细微的事实,坚信他们会影响自己多年后的决策。
批判性的思考者:在没有得到证实前很少接受既定的现实。当同事们说:“因为就该这么做”,或者供应商承诺会解决所有问题时,他们会闻道挑战的味道。
现实主义:他们试图理解所面临的每个问题的本质。这种现实主义让他们对事情有多困难、需要多长时间有一个很好的感知。对这些的深刻理解,给了他们坚持下去的毅力。
多面手:虽然目前的工作可能要求他们在某个领域成为行家,但他们总是能够进入新的领域,迎接新的挑战。需要他们成为尖刀时他们能快速解决棘手的技术问题,需要他们成为顶梁的柱时,你能扛起海量的工作。
上面的这些特点,请各位同学对号入座。非常欢迎各位同学举手来说说自己所独有或者我这里没提到的务实的程序员的优良品质,也欢迎评论区交流。
其实,除了上面提到的特质外,在执行层面还有两点建议:一是关注你的技艺,我们觉得,如果你不关心怎么把软件开发好,那么软件开发领域也就没有什么好谈的事情了。二是思考,思考你的工作。为了成为一名务实的程序员,我们要求程序员在做事的时候,思考一下自己在做什么。从长期来看,对自己做的事情思考的越多,你和你的团队将变得更高效,能编写出更容易维护的代码,并且在会议上花的时间更少。文章开头提到的 theodore 的文章中有详细的阐述:批判性思考、系统性思考。
三金哥:看来要成为务实靠谱的程序员还是有好多功课要修行的。那你标题中提到的“人生是你的”具体是指什么呢?
大师兄:字面意思喽。你要为自己的人生做主,把握住人生,让它如你所愿,精心营造,与人分享,为之喝彩!好好享受吧!
-End-
原创作者|李成龙
感谢你读到这里,不如关注一下?👇
📢📢来领开发者专属福利!点击下方图片直达👇
为什么要成为务实的程序员?欢迎评论留言补充。我们将选取1则优质的评论,送出腾讯云定制文件袋套装1个(见下图)。5月14日中午12点开奖。