为什么软件团队要有编码规则? Why coding standard?

第一个问题


几乎所有人类,在接触到一个需要遵循的新行为准则的时候,都会问一个问题:“为什么我们要遵守这个?”或者是其某种更具排斥性的变体:“这东西到底有什么用?不遵守这个又会怎么样?”

“为什么过马路要走人行横道?”

“为什么开车不能闯红灯?”

“为什么医生要勤洗手消毒?”

“为什么生熟菜板和刀具要分开使用?”

……

从心理学上讲,任何新的制度限制,哪怕只是一点点小的操作方式改动,都会在初期给你带来很强大的排异心态(本宝宝就是不想把玩具收回箱子里……)。其原因是新的规范将你拖离了自己熟悉的舒适区,带来了强烈的不安全感。

简单说就是不习惯,不舒服。(嗯,真正的公主,哪怕压在这二十层床垫子和二十床鸭绒被下面的一粒豌豆,她都能感觉出来。)


宝宝就不想吃!

而在产品研发中,看起来更有水准的质问会来自于有经验的工程师:

“创意源于自由,这东西会限制更灵活的程序实现”

“我这样做虽然不符合规范,但绝对的高效和没问题”

“我的经验足以避免和处理这些问题,没必要设立什么规范”

……

好吧,你是否已经听出了你身边诸位大神们如下的潜意识?

“你们这些愚蠢的人类才需要遵守规范”

“编码规范是新人的脚手架,对我这样会飞的人没什么用”

“我已经这么忙了还搞这些鸡毛蒜皮的【马赛克】浪费时间。你【马赛克】是仇家派来折腾我的么?”

……

有一篇来自于谷歌前计算机科学家 Mark Chu-Carroll的短文能够很好的回应这些murmur。有兴趣可以点击去接受一次喷洗。

Stuff Everyone Should Do (part 2): Coding Standards(中文译文在这里)。

好的,把头发吹干,看看使用编码规范的最简单的理据。



编码规范的简单经济原理


最简单的理据,往往来自于最朴素的经济追求:这里有利润

分析编码规范的成本很直接。编写推广学习、部署改进工具,代码走查关注是否违例,所有这些花费在编码规范上的时间的综合,就是编码规范的成本。

而从编码规范中获得的收益相对间接和持久,是通过对你投入软件活动中的时间的精简,通过软件活动中的一系列沟通活动和质量成果逐渐展现出来。

很确定的是,坚持编码规范所带来的收益能够远远高于它的成本。它为你节约的时间,能远远大于你花在它上面的时间。

能赚钱的就是好生意!

这绝对是一笔好生意。

能提高代码可读性。

遵守相同编码规范的代码,常常看起来就像是一个人写出来的一样。具有相同的风格是降低学习曲线的有效方式。当你新到一个具有编码规范的公司,读懂某几个函数或模块的写作方式后,常常代表你可以快速读懂相同规范的所有代码了。

能减少人与人之间的沟通成本

理解并遵守相同编码规范的人,就像在讲同一种语言,沟通会快速而准确。而在发生编码风格冲突的时候(不用怀疑,程序员之间的风格冲突是永恒的……),编码规范将会作为仲裁的最终依据,减少沟通的无效消耗。

能提高代码质量

合理的编码规范几乎每一条都会针对一个在编程世界里常见的技术问题。在实践中应用编码规范,就像是常备了一位高水准的代码审查者,能帮助你规避很大比例的常见问题。

简单的来说,在一句If语句中错误的使用了赋值(=)而不是判等(==),可能会带来一个隐藏超过一年的bug,在特定的客户机房,花费你超过一个月的调试时间才能解决。释放一块内存后指针没有清零,可能会带来内存的第二次释放导致系统崩溃。变量没有初始化,可能会在函数栈的多次值传递后,将程序引入一个未知的随机态……

这许许多多的常见错误,都可以通过在头脑中的强烈规范意识,以及严格的代码规范审查所避免。(我不太喜欢用“低级错误“这个词,因为实际上几乎所有的程序错误都是”低级错误“。)

能为团队工作建立脚手架

团队,需要规范。

在所有的团队中,不是每一个成员,都拥有相同的知识领域、教育程度、行业背景、项目经验,从而不是每一个成员,有着相同的思维深度、隐喻哲学和学习能力。

建立合理的规范,可以建立团队在技术上沟通的模式,前文已提及,更重要的是,还可从团队内部,重(chóng)用已有的程序智慧,为成员提供了有高度的脚手架,避免成员个体在程序设计上特定弱点所带来的质量短板。

团队中个人的优势能力决定了团队的质量能力的上限,而编码规范的执行,则决定了团队代码质量的下限。

能节约智力投入

还记得在你在遥远的中学时期吗?英文考试的倒数第二题永远是找茬题:给十多行英文让你找错。

很快你就自己总结了一个检查表,包括在试卷上出现过的所有错误类型(单复数错误、时态错误、介词错误……),此后考试时对每一行都遍历一遍检查表,基本上快准狠。自然而然的找你妹的题就变成了完全不花智商的按图索骥送分题。

编码规范就是这样的一个检查表,它必然是程序世界和公司经验的知识沉淀物,它能帮助你减少思考的密集程度,将最重要的智力资源投入到真正需要你去设计和关注的核心点上。

你不用再在多种程序风格中进行翻译和映射,因为只有一种程序风格。你看一眼函数名就知道它是做什么用的来自于什么模块,你看一眼变量名就知道它是什么内容大概应该是什么类型。

你不用再去思考变量的初值,因为变量的初值总在定义的时候有说明,对整数来说大多是0,对指针来说大多是NULL。

你不用再去思考来自于外部的一个buffer是否需要你去释放,或者你定义的buffer应该在什么地方去释放。

……

是的,我们希望在一切在程序世界里可能有争议的地方,或者完全没有争议的地方,都有我们自己的规定和习俗。

让软件工程师在最常见的程序过程中沿袭习俗,在关键和艰难的创新点上灵活创新,继而充分的用80%以上的智力来解决20%的核心问题。这才是对软件工程师团队的最大效率提升。(请把你积攒的每一点怒气都用在释放大招上!)



巴比伦之塔


110V和220V的电压哪一个更科学合理? 不同的人有不同的理据,不同的国家有着不同的标准。没有谁能说服谁。

同样,缩进是4个空格还是2个空格?函数体左边花括号应该在行尾还是在行首?注释应该用“/**/”还是用“//”?

这些问题软件行业中有着永恒的争论。这些争论是宗教狂热信仰式的,也许直到人类灭绝或太阳熄灭也不会有结论。

可能采用这些争论中的任何一个答案都是okay的,或从成本收益的角度判断,其区别微乎其微。为了建设团队内部沟通的巴比伦之塔,为了代码的可读性,公司、项目、模块,其内部一定要有统一的答案。

略带讽刺意味的是,常作为全人类之间无障碍沟通标志的巴比伦之塔,居然也有巴别塔,巴贝塔、巴比伦塔、通天塔等多个中文名。但对于一条具体的编码规范,我们不能留下任何争论,只能有确定的结论。即,我们需要选择一个答案执行。

在执行过程中,如果你对已经制定的编码规范还有任何疑惑,唯一的处理方式是:给出足够强的理由,说服所有人,修改或者抛弃。当你找到的理据不够强大还无法说服大家时,请把那个撅着嘴的小孩放在心里,严格遵守团队现有的规范。

它一定能帮到你。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,085评论 25 707
  • 1月25日,我的一天之2017年的第1次写计划。 (啦啦啦,啦啦啦,我又回来了!) 今天我就来讲讲,在2017年,...
    Sernedipity阅读 332评论 0 3
  • 分享一篇不错的文章。
    梅梅吖阅读 310评论 0 0
  • 刘伶醉 文/米修 朝廷问策,刘伶上书建议无为而治,晋武帝嗤之。...
    一休知米阅读 1,671评论 1 5
  • 这篇文章主要包括iOS蓝牙开发的简介以及如果进行蓝牙开发, 具体的蓝牙知识不再详细介绍了. iOS蓝牙开发的实现基...
    superLee阅读 667评论 3 11