注:本文译自Coding Horror博客。《高效能程序员的修炼》的第83页提到了这篇文章。
最近,Scott Koon谈到了纪律作为开发者的一项基本素质的重要性。他是这么说的:
每个月,总有一些新的编程语言或者方法论冒出来。随后,信徒们的溢美之词便会充斥互联网的每一个角落。这些东西貌似都能提高生产力和产品质量。但他们忽略了所有成功的开发者都拥有的一个特质。这个特质足以决定项目的命运。那就是纪律!
不受纪律约束的开发者不能保障产品的按时发布,他们也不会写出易于维护的代码。相反,自律的开发者不仅是项目成功的保障,他们还能提升其他人的生产力水平。如果软件架构师和开发者把他们的成功归功于他们所采用的工程方法,这对他们其实是一种伤害。归根到底,其实要看他们有多么遵守纪律、多么训练有素。
真是很凑巧!我最近给一个开发团队做了一次关于源码控制(Source Control)的演讲,期间我也反反复复地提到了“纪律”这个词。纪律!纪律!我反复提到它,是因为单纯建立一个优秀的源码控制系统是不顶事的,它并不能让人自觉自愿地以一种结构化的、合理的方式去使用它。这事必须得靠纪律!然而,依我的经验看来,纪律严明的公司并不多。我所看到的源码控制,往往更像下面的Windows桌面那样一团糟:
项目之间本该有一种优雅的结构,并且使用符合逻辑的代码分支和标签,但事实又是怎样的呢?源码控制系统里满眼都是胡乱命名的文件夹,凌乱不堪,毫无逻辑可言!就像一个普通电脑用户的桌面那样……
这其实跟你选用哪种编程语言没有关系。因为纵然功能要求一样,FORTRAN程序也可以被写得千差万别。
FORTRAN是英文“FORmulaTRANslator”的缩写,意思是“公式翻译器”,它是世界上最早出现的计算机高级程序设计语言,广泛应用于科学和工程计算领域。FORTRAN语言以其特有的功能在数值、科学和工程计算领域发挥着重要的作用。——译者注
因此,我更倾向于赞同Scott的观点。如果没有纪律的保障,编程语言和工具都将是浮云。然而,在口头上反复强调“纪律”并不见得能带来多少帮助。也许,那些入门级的开发者需要的是一位导师(他会毫不客气地主张必要的纪律),或者像Dave Cutler那样雷厉风行的人,更或者像枪炮士官哈特曼那样在强化纪律训练方面很有手段的人。
David Cutler(大卫·卡特勒)是一位传奇程序员,他是VMS和Windows NT的首席设计师,1988年去微软前号称硅谷最牛的内核开发人员,被人们称为“操作系统天神”。在开发Windows NT 3.5的时候,他带领的开发员有1500名之多,自己还兼做设计和编程,丝毫不改程序员的本色。他天生脾气火爆,与人争论时喜欢双手猛击桌子以壮声势。日常交谈也脏字不离口。——译者注
哈特曼(Hartman)是电影《全金属外壳》(《Full Metal Jacket》)中的一个角色。这是一部描述美国海军陆战队与越南战争的影片,被认为是电影史上最出色的战争电影之一。在影片中,哈特曼粗鲁的语言、刻薄的训练方式,夸张但也真实地刻画了海军陆战队新兵教官的形象。——译者注
如果你们这些“女人”能从我这里学成出师,如果你们受得了这新兵训练,你们就会变成一件武器,成为祈求战争的死亡牧师。但在那天到来之前,你们屁也不是!你们是地球上最低等的动物。你们甚至都不是他妈的人类。你们什么都不是,还不如两栖类动物拉出来的大便!我很严厉,所以你们不会喜欢我。但是,你们越恨我,就学得越多。我很严厉,但我很公平。这里没有种族歧视。我不鄙视黑鬼、犹太佬、意大利佬或墨西哥佬。在这里,你们都一样,全是废物。我奉命淘汰你们中的无能之辈,把那些跟我所热爱的海军陆战队格格不入的人踢出去!你们这些蛆虫听明白了吗?
Steve McConnell的《代码大全》给出了同样的建议。不过,他的措辞要温和许多:
面对一个刚刚从计算机科学专业毕业的学生,你很难向他解释为什么需要遵循工程规范和纪律。在我读大学的时候,我编写过的最大的一个程序不过500行代码。工作之后,尽管我也开发过一些少于500行的工具,但主项目一般都达到了5000~25000行代码的规模。我甚至还参与了几个规模超过50万行代码的项目。而在这些大项目中,原先“小米加步枪”的应对方法已经力不从心了,我们需要一套全新的技能。
McGarry和Pajerski在美国宇航局软件工程实验室工作了15年,在回顾了这段工作经历之后,他们在1990年总结道:注重纪律的方法和工具起到了显著的成效。很多有创造力的人都是极其自律的。有句谚语说得好,“形式即自由”。伟大的架构师总是在人力资源、时间和成本的约束范围内开展工作。伟大的艺术家也是这样。只要你仔细看过列奥纳多的画,你就不得不承认他对细节的一丝不苟。米开朗基罗在设计(罗马梵蒂冈的)西斯廷教堂(Sistine Chapel)的天顶时,他把它分成了几何形状的对称集合,比如三角形、圆和正方形。他根据柏拉图(在《理想国》中提出)的3个阶级,把天顶对应设计成了3块区域。如果没有这种他自己设定的结构和他的自律,300个人体画像挨在一起可能会陷入一片混乱,我们也就看不到如今的这个旷世杰作了。
列奥纳多·达·芬奇(意大利语:Leonardo Di Ser Piero Da Vinci,1452~1519),意大利文艺复兴三杰之一,也是整个欧洲文艺复兴时期最完美的代表。他是一位思想深邃、学识渊博、多才多艺的画家、寓言家、雕塑家、发明家、哲学家、音乐家、医学家、生物学家、地理学家、建筑工程师和军事工程师。他是一位天才,他一面热心于艺术创作和理论研究,研究如何用线条与立体造型去表现形体的各种问题,另一方面他也同时研究自然科学,为了真实感人的艺术形象,他广泛研究与绘画有关的光学、数学、地质学、生物学等多种学科。他的艺术实践和科学探索精神对后代产生了重大而深远的影响。——译者注
米开朗基罗(意大利语:Michelangelo,1475~1564),他是一位雕塑家、建筑师、画家和诗人。他与列奥纳多·达芬奇和拉斐尔并称“文艺复兴三杰”,以人物“健美”著称,即使女性的身体也被他描画得肌肉健壮。米开朗基罗脾气暴躁,不合群,但他一生追求艺术的完美,坚持自己的艺术思路。他的风格影响了几乎三个世纪的艺术家。——译者注
柏拉图(Plato,约前427年~前347年),古希腊伟大的哲学家,也是全部西方哲学乃至整个西方文化最伟大的哲学家和思想家之一,他和老师苏格拉底、学生亚里士多德并称为古希腊三大哲学家。他的《理想国》向我们描绘出了一幅理想的乌托邦的画面;柏拉图认为,国家应当由哲学家来统治,理想国中的公民划分为卫国者、士兵和普通人民三个阶级。——译者注
纪律有很多种形式,并且它渗透在软件开发的每一个环节。从小处着手吧!假设你的数据库模式定义里包含了3个主键,它们的名字分别是“list_id”、“ListId”和“list_value”。你的开发团队里应该有个像枪炮士官哈特曼那样的人,让他去“温柔地”提醒大家:在开始深入编码之前,最好先把那令人困惑的主键问题先解决了。
你不必制定严厉而死板的军事化行为准则。但即使软件工程尚是一个不成熟的领域,我们也已经有很多公认的规范以形成现代软件开发模式。 要想从这些规范中受益,我们需要做的只是遵守一点老生常谈的纪律。如果你不严于律己,那么谁还会把纪律当回事呢?