行动者内刊

极客时间创作大使2023年度复盘

极客时间 极客时间创作大使

02|术子米德:原来编程时我内心那些小九九早就被研究透了

讲述:术子米德 大小:16.49MB 时长:00:17:13
00:00
1.0×

你好,我是术子米德。一位自学嵌入式软件开发、一干就是20年的老技术人;同时,我又是一位打通“边干边学”“边学边想”“边想边干”、持续迭代开发思维和技能的新技术人。

我复盘了一下自己的2023年,发现有很多事情,但我最想和你分享的反而是我这一年里重读一本旧书的新体验。可以说是老书重读解心结,所以我想在这里也分享给你。

故事是有一个缘起的,听我慢慢来说。

2023年暑假,听公司里技术专家的分享,是关于用emacs的开发人员的故事。我得到一个启发,用这样工具的人,他们都会把当前的界面当作唯一的万能界面,想做任何事情,都从当前界面开始。这是一种略显奇特的行为方式,却是一种非常有效果的行为方式,脑子里想做什么事情,脑子进行切换,但是眼睛和手指无须切换,依然是熟悉的界面元素和熟悉的按键顺序。用emacs的话说起来,emacs就是他们的操作系统。

随后想到一本书《Google软件工程》,之前读过,现在又想起来,就是受这次分享的启发。如果带上个新视角,即谷歌人在解决软件工程里如此错综复杂的问题时,是否会基于某个不变的东西,就像emacs的爱好者一样,以不变的界面元素和熟悉的按键顺序,去应变各种各样的应用。

再次读完把我震撼得不轻,原来谷歌自始至终都在回答一个问题:软件工程推行的各种流程和规范,这些东西是否会触犯到工程师们的心理安全感。之前读的时候,只是发现谷歌好多流程规范都来自他们的实践和经验,这回再读真是觉得非同凡响。

读完后,我想起有本书好像叫《软件开发心理学》,而且有点回想起来,当时买这本书的时候,还有些不纯的动机,说出来都拿不上台面,那就是,当我作为团队主管,如果知道团队同学们心里咋想,是否更能协调管理他们。或者,当我作为领导的下级,是否可以利用这种心理方面的知识,谋得更多的机会。甚至,当时大概率还有这样的念头,恨不得全世界就我有这本秘籍。想来真的有点暗黑破坏神里奶牛打得太多后的中毒感。

结果,翻遍家里和公司的书架,都找不到有这么一本暗黑秘籍。网上一搜,有本书,中文叫《程序开发心理学》,英文叫 The Psychology of Computer Programming,还是银年纪念版(Silver Anniversary Edition)。

没错,我找到的是个25周年纪念版,还是针对1998年而言,也就是说,银年纪念版已距今26年,距首个版本53年,这本书的首版时间居然是1971年,的确有点老书的样子,尤其在变化如此迅速的信息时代。但问题是,它现在还卖得很好。难道,我们的心理,几十年来,在敲起键盘的刹那,你和我还都一样、啥都没变吗?

打开一读发现,它不是暗黑学,而是启明学。我心里的很多困惑,典型的比如:我总是觉得自己写的代码最好,结果打脸无数;我总抱怨领导看不到我的努力,然后牢骚不停;我总误解别人早就理解我的良苦用心,实际听自己的录音都想抽自己嘴巴;我总认为得不到开发支援,但是有人来协助时却滋生各种嫌弃。

关于这些令我困惑的主题,书中都有阐述,逐个解开了我的心结,并没有加持我的暗黑心,反而使我明朗起来。看来,之前我即使有过这本书,要么只读了标题,要么完全读歪,这回我得用我的五谷丰登读书法,读出对当下的我最多的启发。

解惑1:为何我总觉得我写的代码全世界最棒?

困惑

每次开始敲代码,内心总会很纠结,那个设计是怎么来的,我有点记不清,有没有照着设计去敲代码,我有点没把握。

实际上回头看发现,刚开始几行代码还跟设计有点关系,往后没几行代码,就已经跟设计没啥一样的地方。很困惑,设计既然存在,我为何会偏离,我为何敢偏离设计;更困惑的是,即使没有依照设计敲代码,刚刚完成首稿的代码,还自满得意到不行,这回绝对是敲出了我职业生涯的最好代码,虽然和全世界最棒的代码还稍微有点距离。直到,边调试边把代码改到面目全非,连我这些代码的亲爹,都不认识这些代码为止。

困惑也是由此而生,我为何会心安理得违反设计,还得意满满总觉得自己写得最好,实际却是挖满各种大坑小坑,自己在其中逐个爬进又爬出,精疲力竭之后勉强跑通的代码,可能连基本的格式都没保住。

书曰

编程,本质上是一种写作,而且是属于创作型写作。通过阅读学习写作是一种办法,但是通过阅读无法写出杰出的作品。同理到编程,阅读代码是学习编程的一种办法,但是仅阅读代码并不能写出赏心悦目的代码。就像越顶尖的作家越自我,越是写出好程序的人,同样越是自我,这是一种天生的、与生俱来的无法掩盖的自我。而且,他们更不愿意自己写的代码,拿去给别人评审,尤其是被别人指三道四各种格式得修改一下的时候,更是像用刀子在饱满的自我之心上刻字。

除了这点天然的自满,优秀的软件开发人员还有个奇特之处,那就是他们特别喜欢造工具,尤其是各种稀奇古怪的提效工具。话说领导们总是在琢磨,怎么能少雇点软件开发人员,因为他们实在太贵。而让领导们睡觉都边笑边哭的事情却是,这帮码农居然整天在琢磨怎么写出高效的工具,结果却是效率提高的同时,需要越来越多的开发人员,更让项目经理抓狂的是,他们延迟发布的原因并非来不及,而是还得再优化一点。

心理学研究揭示,这么自我的人,同时还具备喜欢偷懒和永不满足的倾向,就是要把机器的性能都发挥出来,去解决掉那个特殊的问题,好让自己有更多的时间去琢磨新鲜的玩意儿。

启发

记得看过个讯息,说GitHub上成功的非企业项目背后,都只有个别人在决定项目的风格。再想想自己,如果是迎合交期的代码,越写越不满意,还不得不硬着头皮写;而如果是自己特别想写的代码,都是最近看到学到的一点新鲜东西,结合原来做过的方面,进行让别人难以接受、却让自己得意满满的新式代码,尤其在完成的刹那,欢喜得意到不行,虽然过段时间去看,又是各种嫌弃感。

现在看来,只要有机会,就该多寻找这样的自我投入感,突破边界才能遇到新的自我。这是我的心理特色,值得保持和发扬。

解惑2:为何我总以为领导早就看到我的勤奋和努力?

困惑

做任何事情,总是在刻意露出马脚,领导你看我这里表现得如何,是不是该给点表扬,哪怕提一嘴,也能开心好久。可实际上却是,领导视而不见不说,偶尔还把我正在努力的方面,理解为来自其他因素的约束,促使我不得不这个样子。就像我很早到岗,一方面是要送娃上学,另一方面不送娃的日子,我依然早早到岗,你说我是不是早起习惯睡不着。这有理上哪去说,更何况这念歪的经,咋说都很没理的样子。更可气的是,有些人明明白捡的便宜,甚至拿着别人的成果,却被大家赞赏,这样的事发生多了,就有种错拿剧本的感觉,怎么就这么只看胶片里的文字,而不看清楚实事情况。

书曰

有3种典型的组团方式:小组(Group)、团队(Team)、项目(Project)。

有3种典型的个性维度:顺从(Compliant)、挑战(Aggressive)、独处(Detached)。

不同的组团方式,面临和解决的问题完全不一样:相同技能的人组团,按需去参与支撑不同的项目,这是小组Group的样子,这时的领导叫组长。不同技能层次的人在一起攻克难题,做出超过个人无法独立做出来的成果,这是团队Team的样子,这时候的领导叫老板。不同技能领域的人一起完成个复杂的、目的明确的交付,这是项目Project的样子,这时候的领导叫经理。

组长等饭吃,机会是等来的;老板找饭吃,机会是创造出来的;经理讨饭吃,机会是抢来的。不同的吃饭方式,决定了不同的领导关注点,同时不同的个性,在被关注的光谱之下,才会被看见,才会被重视,但是都不会被推举。

启发

我的个性更多是顺从、挑战还是独处,并不这么显而易见。那么,务实的做法,可以先看清现在所在的团队,是等饭的Group、找饭的Team还是讨饭的Project。在等饭的时候,需要顺从和独处多点;在找饭的时候,需要挑战和独处多点;在讨饭的时候,需要顺从和挑战多点。

寻找进入Group、Team、Project体验的机会,在不同地方去发挥自己的个性,得到领导的赏识,就是对自己个性的正反馈,领导视而不见也是种收获,这是对自己个性的负反馈。

对于自己而言,经常保持对自己的反省,假设自己就是自己的领导,现在的自己是在等饭、找饭还是讨饭,现在自己哪方面要被赏识、哪方面被无视,自己面对怎样的局面,要做自己怎样的课题,才能破掉自己的困局。

活在人之间的外部组织,这需要机会和运气,活在自我反省的内部组织,这只需要在工位放上一件信物,每次看到它就会提醒到自己,去思考我的饭🍚在哪里。(备注:我的工位有个达摩祖师的石刻,他就是促使我反省的信物)

解惑3: 为何我百般反感PM,但又非得要个PM?

困惑

每次PM跟我催进度,说开发该这样、该那样,得做好这些、做好那些,这个没搞好、那个没搞好,才导致现在问题集中爆发,项目进度被拖延。这时候的我,都会有种要被烦死的感觉,既然你都懂,你有本事都你来,这总归可以了吧。

可是,真当项目的进度落后时,我又会托出就是PM不作为的拙劣理由,还有项目中的很多杂事,我又想让给PM去搞定,这样自己整天敲代码,那多开心呐。看着这样的自己,虽然不至于抽自己,但的确很是困惑,我到底是想要哪出戏?

书曰

做个观察实验,无论设置怎样的条件,只要观察的眼睛打开,哪怕是在墙上贴上领导的人像,各种效率都会提升,即所谓的霍桑效应。书上还说,人会对环境的变化作出反应,并且越是小的因素,越能够带来更大的变化,若是强大的力量,反而是会带来抵抗,或者干脆是屈服,即所谓的认知失调。

启发

仔细回忆起来,的确如此。当有个PM时,即使啥话不说,我干活也会认真很多,但是当PM话太多,侵犯到我的领域时,不自觉地防卫起来,不再能听进去任何东西,反而开始各种反感后的磨磨唧唧。

这就告诉我,假如当我作为PM时,只要在合适的场合出现,就会起到项目进度的推进效果。如果嘴巴实在忍不住,那就在开发得意的地方,再略加点蜂蜜即可。

这又更让我忽然想起来,当年家家户户的毛主席像,这会给每个家庭的关系和谐与积极上进带来多少无形的效果和力量。这也更可以理解宗教的圣像崇拜,只要在自己的工位上放一个达摩祖师石像,就会让我更容易进入反思和自省的状态。

再遇作者

读完书,都没想起来,这本书到底是谁写的。虽然好读,还有好多启发,可别是旁门左道,这类书也是具备这样的特质的。

一查作者,天晓得,他写过本书《你的灯亮着吗?》(Are Your Lights On?),要命的是,我听过读过这本书,还把听书稿里的脑图贴在我的工位显眼处好几年,对这本书的记忆居然伴随着脑图褪色而减弱,更要命的是,再查发现还有本书《系统思维导论》(An Introduction to General Systems Thinking),我曾经也读得很有启发,推荐给很多人。

这些书的作者是杰拉尔德·温伯格(Gerald M·Weinberg),他是前5位美国计算机名人堂的工程实践和技术思考大咖,除了我上面提到的这三本书,还有技术管理和咨询方面的书,还有虚构小说,用故事来表达温老爷子的技术思想。

这次,我凑齐了温老爷子的三部曲。带着最近对原版书的阅读偏见,读得我欣喜无比。

再多点启发

经典,活得久是必要条件,每次读有新启发是充分条件。读完这本书,发现它的最初构思在1969年,出版到现在,已经算55岁的老本子。对时间而言,尤其是变化如此快的信息时代,必要条件完全满足。对我而言,再读有这么多启发,充分条件也满足,所以它就是符合我定义的经典。猜测,以后的某个时刻,我还会翻开这本书,再次得到更多新的启发。

任何的心理问题,从自己的切身感受和行动开始,看到啥心里咋想,听到啥心里咋想,幻想啥嘴上咋说手上咋做。自己遇到过,做过,想过,反思过,再遇到经典的书,原来我们都一样,想法很多,念头很杂。也许这是真的,我们从爬上岸的第一次,在阳光下被看见的第一次开始,我们的基因里就已经刻录下,我们都期望被看见,被自己看见,被伙伴看见,被历史看见。

好了,《程序开发心理学》这本书分享给你。如果你也读过,欢迎和我交流你的阅读心得。

最后送你一句话作为结尾:一切编程问题,首先是人的问题,其次才是代码的问题