文 | 悦纳阁主

软件工程师修炼内功(一个女性软件工程师的温故而知新)(1)

作为软件工程师,我一直保持着学习新知识的习惯。一路上做项目学了不少东西,以前觉得自己懂的很多,涉猎很多领域,也曾一度对自己的快速学习能力引以为傲。然而,近几年,突然觉得心虚得不行,因为有很多曾经学过用过的东西的遗忘速度比我想象中要快很多。哪怕是曾经做某个项目时,自己做的设计,自己写的方案,甚至自己敲的代码,而且还维护了不短时间,离职之后,换了业务跑道,现如今,脑子里只剩下一个大概轮廓,很多细节想不起来了。毕竟那也是耗费了自己大量心血做出来的,如今它们也许还在原公司或客户现场发光发热,但在自己内心只留下情感上的深刻痕迹,想进一步细究,它们又感觉像被刻在了沙地上,经过岁月的轻拂,竟已经被其他沙砾覆盖得若隐若现,心中难免失落和遗憾。

这段时间接手一个虚拟化项目,涉及云计算和虚拟化相关内容。

有关云计算的内容在十年前云刚兴起时我就研究过,甚至还自己捣鼓过openstack的程序。但要真的把虚拟化技术给人讲清楚,还真做不到。为了防止自己这次又落个一知半解的状态,我边学边用。在解决自己遇到的问题后,并没有就此停下来,而是把在解决问题过程中每一个遇到的问题都认真记录。对找到的解决方法也不再仅仅秉承拿来主义,而是把其解决方案认真学习,甚至根据自己的经验进行优化,反复测试,总结出自己的思路和关键算法,输出对应文档。

要是以前,这个过程我会觉得反正问题已经解决了,浪费时间没有必要。这个过程开始的时候的确很占用时间,但做着做着,好处就慢慢体现出来了。首先,很直接地解决了自己的遗忘问题,好记性不如烂笔头,一旦想不起来,不用再花时间百度搜索过滤,直接在自己的知识库里就有答案。其次,自己遇到的问题,他人也会遇到,与其一遍一遍地给他人讲解,不如把解决问题的方案直接给他们,更直接地解放了自己,大大节省了自己的时间,也实现了知识分享。最后,随着一个一个用来解决问题的特性方案文档的生成,很容易在心里就形成一个体系化的完整解决方案。

自打不再急功近利地为了完成任务造成贪多嚼不烂的状态,发现做项目反而变得比以前轻松了。即便是碰到一下子解决不了的问题,心态也不会焦虑或崩溃,反而觉得这又是一次自我挑战的过程。等问题解决了,再有意识地将这些碎片化的知识和自己已有知识体系结合起来,它们很容易就被再次加固,不仅解决了遗忘的问题,还发现以前一些是是而非的知识体系被细化和重新理解,同时也促进了对新知识的理解和消化。

将新知识融合在旧体系的过程,实际就是一次温故而知新的过程。但前提是新的知识要细嚼慢咽,与旧知识的融合要充分。我认为存在这个过程的开发节奏其实才是良好的开发状态。以前在高强度的开发节奏下,永远追求的是开发进度,一看问题解决了,就不再细究,要么后面出现问题,才发现前面有漏洞,要么就这么匆匆拿来一用,没有在自己的知识体系中留下浓墨重彩的一笔,自然后面就无处觅其行踪,有的甚至就和没见过一般陌生。

开发也是要遵循规律的,一味地追求快,只会落得欲速则不达的境地,bug不断,不断加班修复,也只会更忙地制造bug。这种看似荒谬的恶性循环经常被吐槽,只是身处其中的人往往忽略了,就如以前的我一样。其实真正好的开发节奏,就是每天能有时间把自己用到的方法搞清楚,把新的解决方案吃透,做出更合理的优化,让自己的知识体系更完善,写出来的功能更经得住各种测试,这样收益的不仅仅是个人,其实也惠及整个项目和公司。

借用C 之父Bjarne Stroustrup的话来结束本文:软件行业太多的经理和管理人员试图把编程变成低级别的流水线工作。从长远看,这种做法效率低、浪费大、成本昂贵,而且不人性化。在软件开发中,没有放之四海而皆准的模型。需要给人们空间来发挥他们的才干并鼓励他们成长。

,