2.5 程序开发者必备的性格特征
杰拉尔德·温伯格(Gerald M. Weinberg)是我特别喜欢的软件专业作家和思想家,他的技术思想三部曲—《程序开发心理学》《成为技术领导者》《颠覆完美软件》,值得每一位想从事软件开发工作的朋友反复阅读。
在《程序开发心理学》一书中,温伯格在第8章讨论了程序开发中的性格因素,指出了几种对成为一名专业程序员比较关键的性格特征,我在这里解读一下,想做程序员的朋友们可以看看自己是否具备。
第1个特征:能够承担压力。就当今的程序开发工作来讲,环境比较严酷,很多互联网公司默认“996”,非但加班成为常事,各种突发问题、特殊日子(例如双11、618、春运等)也会给程序员带来巨大的压力和考验。在这样一种环境下,程序员必须得能够承担压力,否则就难以胜任工作。所以,如果一个程序员缺乏在高压力的环境中坚持一个多星期的能力,也许我们就可以肯定地说,他不是一块做程序员的材料。
第2个特征:适应快速变化。在20世纪,一款软件可能一两年才更新一次,现在,随着生活节奏加快、用户需求细分、市场多样化、竞争白热化以及用户容忍度趋近于零,软件的变化也越来越快。很可能你做了一个月的版本,明天突然就被告知不需要了。很可能昨天会议上确认的功能,今天下午突然变成了另外的样子……总之,一切都在快速变化,导致程序员正在做的工作经常要跟着调整,甚至已经付出莫大心力即将成型的代码也会瞬间变成垃圾。在这样的环境下,一个人必须要能够适应这些变化,还要快速地适应变化,否则,他就难以胜任程序员的工作(还记得我们前面提到的MBTI测试吗?最后一个维度偏好认知的人更为灵活,更容易适应变化。我的结果是INFP,最后一个维度是“认知”,所以我在做程序员时,很自然地就愿意积极拥抱变化)。
第3个特征:整洁。温伯格说,这是程序开发工作中需要的一个最容易确定的性格特点。这里的整洁,并非是指个人边幅的修剪(当然这也是需要的,头皮屑满天飞、身有异味会影响你与他人的协作),而是指一种尽量把自己手头的资料规整好的习惯。整洁的外在表现,有两部分,一是办公桌面、实体文件、图书、工具等的整洁;二是计算机、代码、文件、资料等的整洁。
第4个特征:谦逊。一个人不懂得谦逊,往往稍有成绩就会沾沾自喜、狂妄自大。例如一个缺乏谦逊品质的程序员,往往在掌握了一种基础的语言、学会了开发工具的简单用法、完成了一两个简单的开发任务后,就会觉得自己什么都懂了,什么都难不住自己,把谁都不放在眼里。但实际上,计算机的世界博大精深,我们所学会的那一点雕虫小技,不过是无边黑夜中的萤火之光而已。如果我们不懂得谦逊,就会自我满足,失去进一步成长的契机,同时也会影响我们与团队成员的互动,影响后续的工作。能够谦逊地看待自己能力的程序员,在遇到软件问题时,更容易从自身出发,探索各种可能性,更快、更好地解决问题。
第5个特征:幽默感。程序开发的过程是比较乏味的,具备幽默和自嘲的能力才能一路走下去。看看网络上各种黑程序员的笑话,你就知道程序员有多幽默了。例如“杀死一个程序员不用枪,只要改三次需求就可以了”,“程序员最讨厌的四件事:写注释、写文档、别人不写注释、别人不写文档……”。
除了温伯格所说的这些性格特征,根据我的观察,还有几个特征对开发者来讲也很重要。
第6个特征:自觉主动。程序开发的世界里,知识、技能多如牛毛,程序开发过程中各种问题层出不穷,唯有自觉主动地学习、实践,才能不断提升自己的知识、眼界和能力,才能跟得上技术的更迭和需求的变化。如果一个人习惯于被动工作,遇事总等着别人指点,遇到问题总等着别人帮助,那他很难成为一位优秀的程序员。
第7个特征:细致。程序开发是非常严谨的工作,如果不细致就会经常犯“把‘==’写成‘=’”“缺少一个分号”“把‘&&’写成‘&’”“if语句忘写花括号”之类的小错误,而这些小错误,往往不会影响程序的编译,其后果会在运行时通过稀奇古怪的现象表现出来,让人莫名其妙,查几小时查不出来,查出来时则捶胸顿足想扇自己两巴掌。
第8个特征:勤奋。非此不足以优秀。
第9个特征:执着。一个人的程序开发与设计水准,在经历最初两三年的快速提升后,往往会达到一个“怎么做好像都无法精进”的阶段,此时唯有执着才能帮助我们度过瓶颈期,再上一层楼。在程序开发过程中,我们在生产代码,也在生产Bug,而且,很多Bug往往非常“诡异”,难以排查,只有具备执着的精神,才能一次一次地从“无效修复”中爬起来,继续“死磕”。