第183期 | 代码之外的功夫
你好,这里是卖桃者说,今天和你聊聊程序员在代码之外的功夫。
第一季里咱们曾经说过,程序员是一个具备长久生命力的职业。它的“长久”不在于说保证你能写一辈子代码,而是以技术为基石,给了你更多的发展空间和选择余地。如果你的职业就是一名程序员,那么我要恭喜你,起码到目前为止,程序员仍是这个时代最好的职业之一。
当然,无论是什么职业,都应该有风险意识,市场就是优胜劣汰,适者生存,对于程序员也是一样。
IT 行业从来不缺新人。统计数据显示,我国每年 IT 人才市场供给约 200 万新人。每天都有新人来,也有旧人离开。很多人经常盯着 35 岁的程序员贩卖焦虑,实际上呢,只要你的水平不够,任何职业到了一定年龄都是个坎儿。泱泱大国不缺人,缺的是人才。
提高技术水平也没有别的做法,只能是持之以恒地学习。互联网行业应该算是发展速度最快的一行了,各种技术、编程语言层出不穷,面对陌生的新事物,保持归零心态,多学勤问,同时能跳出去远观,从多个角度看待问题。
IT 咨询顾问格雷戈里(Gregory T. Brown)曾说过,90% 的程序设计工作都不需要写代码,需要的是代码之外的功夫。对他来说,程序设计中最有趣的一直是解决问题和协作沟通,代码只是他能找到的解决问题最有力的工具而已。
至于功夫,就像“卖油翁”那样:无他,唯手熟尔。在生活中养成一些好习惯,在工作中积累一些好方法。以我自己的阅历来看,程序员代码之外的功夫,就是为人处世的方式和方法,解决问题的思维和能力,项目交付后的复盘和成长。
拿为人处世来说,就是做人、做事,什么样的人就会做什么样的事。经常有人给程序员贴标签,说程序员都很宅、情商低、性格木讷、脾气不好等等,这里面几乎全是误解和以偏概全。
事实上,我接触过的大多数程序员,包括我自己在内,都挺正常的。文艺的文艺,摇滚的摇滚,读书的读书,弹琴的弹琴,玩游戏的玩游戏,只是有些人爱交流,有的人不爱交流罢了。
如果你是个不喜欢交流的程序员,那可能就会在部门协作的时候,给人留下不善言辞的形象。程序员这个职业专业性很强,和不懂技术的人沟通,解释成本会比较高,所以不少程序员就懒得交流,有那功夫不如回到座位上多写几行代码。但不沟通清楚,写出来的代码可能是无效的,浪费的。
想撕掉这些标签就要从“好好沟通”开始。比如,在和不懂技术的同事讨论项目时,试着用对方能理解的方式进行交流,多用类比。之前 InfoQ 网站上编译了一篇《如何向 5 岁小朋友解释什么是微服务》的文章,就是用冰淇淋店的例子生动解释了晦涩的专业概念,非常有趣。
格雷戈里有一本著作名字就叫做《代码之外的功夫》,里面除了提到沟通,还讲了些看待问题的方式和解决问题的方法。具体可以按照项目的不同阶段分为几个场景。
在项目早期,你的第一个任务可能是建立原型,这个时候可以遵循 YAGNI 原则:You Ain’t Gonna Need It,“你不会需要它”。意思就是不要添加任何不必要的功能,找到最简单可行的方法,尽快生成可工作的软件。
建立原型的目的不是为了做出完整的产品,而是为了探索问题空间。快速建立好原型有助于项目参与方及时发现问题,并识别潜在的不良设计,高效反馈,省出来的时间可以用来集中精力解决风险或未知问题。
在这个阶段,软件有瑕疵是正常的。不要每个瑕疵都停下来立刻修复,你需要平衡软件缺陷带来的损失和修复这一缺陷的时间成本,然后再做决定。一切都在探索阶段,时间和精力需要花在刀刃上。
此外,你还要多提问,这样既能验证自己关于软件的想法,又能了解到他人对于问题的看法。在一开始的时候就对项目有个清晰的认知,可以避免以后走弯路。
在项目中期,问题可能会随时出现,今天这里运行出错,明天那里数据丢失,一茬接一茬的,经常打得人措手不及。其实每个问题背后都有一堆子问题,你需要抽丝剥茧,将问题不断拆分,直到能辩认出构成它的子问题为止。你可以在正式写代码之前,先用纸笔解决部分问题,看到问题的关键。比如观察下各部分是如何联系在一起的,梳理下其中的实现逻辑等等,理清思路再动手。
产品增加新特性也是项目中期常见的场景。根据经验来看,不管你的新特性在代码层面上多么独立,在数据层面上仍有可能存在隐藏的依赖关系。也就是说,你做任何修改都要考虑到数据的一致性,哪怕只是做个最简单的更新操作。
如果你在一些功能上使用了第三方服务,即便这是一家非常值得信赖的第三方公司,它提供的服务也不见得是百分百安全可靠的。用这些服务之前可以先做下调查,看看还有哪些产品也用了这个服务,方式是什么样的。确定采用这些服务后,先花几周时间进行内测,不要急着上线使用。当然,你最好还要有个 Plan B,万一第三方服务不符合预期,至少还有个备选计划,多个选择也就意味着多了条路。
以上这些场景只是程序员浩瀚工作中的几个缩影,算是抛砖引玉。实际上我们在工作中遇到的难题和状况要比这多得多,只能见招拆招,吃一堑才能长一智。纵使可以从他人经验那里学得一二,但终究大部分还得靠自己慢慢积累和总结。
你看,今天聊的这些东西,都不是写代码,但是和写代码息息相关,所谓功夫在诗外,也是一个道理。欢迎你把这篇文章转发给只关注写代码的同学,期待你自己在留言区的感悟。
卖桃者说,明天见。
(编辑:夏天)