图片来源:Pixabay.com
不知道你有没有发现,这些年来,英文里对于IT开发人员的称呼一直没什么变化,来回来去还是programmer, software engineer之类,充其量还有个nerd。但是中文里,称呼已经从“工程师”(最早还有“某工”之类的说法),再到“程序员”,再到“码农”,再到各种“狮”。总之,做程序开发早已没有任何神秘感,和体力劳动差不多了。
有朋友跟我诉苦说,自己的头衔虽然是“技术负责人”,一天到晚被老大骂:
我就是恨自己不会写代码,如果我会,我直接去学校里招100个码农,给他们钱,白天黑夜连轴转,两个礼拜绝对可以做出我满意的系统。
虽然在很多人看来,“软件开发”已经退化为“写代码”了,但怎样把代码写好这回事,却始终没有得到足够的重视。我刚工作的时候,还受过好几次称赞“代码写得真漂亮”,而且感觉十分受用。到如今,十多年过去了,似乎再也没有听到过类似的表扬,不只是对我的,对其他人的也没有。听到更多的反而是:
你凭什么说我写得不好?
不就是完成功能嘛,非要纠结代码,把代码写那么漂亮,有毛用?
以前我还在《C++的设计与演化》中看到过C++之父Bjarne Stroustrup解释,为什么C++中,struct的花括号要写在行末,function的花括号要另起一行,现在似乎没有这样的讨论,也没有人在乎这样的事情了。至于早年热捧的《代码大全》这样的书籍,如今似乎再也看不到多少推荐。
不只是互联网行业有这种倾向,平常认为严谨的传统行业也不罕见。我有朋友在传统的大型软件开发商,如今产品已经复杂到数个团队都无法驾驭了,他所在的团队专门负责修正bug,任务指标就是每个月必须发现和修正几个几级的bug。
有一次吃饭时他跟我透露:既然目标就是这样,他每年会几种在几个场合去找bug,确保自己手里有足够的“存货”,然后根据实际压力去改正、上缴。如果手里存货不多,压力又大,更可以提前埋一些bug,过上几个月半年再“发现”,也不会有人去核查。意外吗?
一方面是对代码本身的质量不够重视,代码质量不高,另一方面,《重构》告诉我们,即便是高质量的代码,从写好的那一刻开始就会开始变质(decay)——所以才需要不断重构。所谓“代码质量”,一定不是静态的衡量,而是需要不断付出努力去打磨和更新的动态结果。
有少部分人对代码质量仍然有追求,认为这体现了他们自己的职业素养,这观点是对的。但是,大家经常遇到的困扰是,关于“怎样把代码写好”的说法太多,许多都是浮皮潦草的类型,甚至许多本来就是错的,或者过时的——比如,你还在纠结Java的方法要不要加static, final以便“提高性能”吗?如果你觉得不对,应当如何验证,如何驳斥呢?
更何况,代码质量这回事情上,许多细节没有人指出你根本意识不到,只有出了问题才会得到惨痛教训。
以我个人的经验,命名就是很大的问题。许多程序员都知道“函数/方法命名应当用动词开头”,但英文不好,所以这一条执行得千奇百怪。我就见过whylizhi这样的变量,想破头也不知道什么意思,一定要找到创建他的人,才知道意思是“离职原因“(why lizhi)。
还有一个常见的问题是命名太抽象。比如“耗时”就是time,姑且不说time在许多地方本身就是关键词,就算不是关键词,它既可以表示“耗时”又可以表示“时刻”,会让人犯晕。即便你改成duration也不够好,到底单位是毫秒还是秒?单位理解不同造成的故障已经屡见不鲜了。我以前曾要求过所有duration之类的变量都要带单位,duration_in_ms、length_in_cm之类,程序员的编程水平并没有提升,但再也没有这种困扰,这就是强调代码质量的收益。
如果你也希望把代码写好,也有上面的困扰,不妨参考 极客时间 2019年新鲜出炉的专栏: 代码精进之路。
范学雷老师,现在是 Oracle 的主任工程师,也是 OpenJDK 和 Java 安全的评审成员。他是1998年参加工作的,20多年了一直在一线从事编程工作,并且有非常丰富的代码评审经验,编程界元老级人物了,有这样过往的前辈来写这样一个专栏,最合适不过了。
**思维上:**它帮助你重塑代码价值观,提升识别“好坏”代码的能力,从而提升编程敏感度,比如你会对这样的问题更加了解。
-
什么样的代码更容易出问题?
-
什么样的代码会招惹麻烦?
-
什么样的代码出力不讨好?
-
什么样的代码小问题闯大祸?
**方法实操:**专栏紧贴工作实际场景,会告诉你如何消除代码的安全隐患,并且教你一些高频代码问题的最优处理和预防方案,这些都是非常实用的。
最近有什么福利?
专栏今日首发,对于我的粉丝:
1、限时优惠¥68(原价¥99)
2、邀请一位朋友返24元,邀请3人相当于免费学。(App提现)
如何订阅?
扫描我的海报,立即订阅,投资自己,在任何时候都值得。
限时扫码68元,让代码精进成为习惯
首颗新年彩蛋,往下看:
凡今天订阅的用户,附赠“极客时间2018年度全年的资料集锦( 共50G)”(包含十年架构师文集 100本, 20 套程序员必备技能知识图谱, 20+ 专栏精华内容提炼,近 100 位CTO的问谈实录)。
部分资料展示
点击**“阅读原文”**,获得管理员微信,加入“代码精进小组”,领取 50G 资料集锦。每一行代码都是你的名片,要写的好看👇