The Kollected Kode Vicious

Kode Vicious - @kode_vicious

  Download PDF version of this article PDF

被戏称为意大利面条代码的糟糕耦合

教你的初级程序员如何阅读代码

亲爱的KV,

请原谅我,因为我的会员资格已经过期,并且由于我的罪过,我不得不指导一位意大利面条代码程序员。

我正在开发一个新软件,这次是全新的项目,但有严格的可靠性要求。我的助手,一位年轻的、自称“devop”的人,旨在提高作为一名程序员的能力,不幸的是,这个人被分配给了我。

无论我如何限制我分配的工作,我都无法阻止这位助手编写被戏称为意大利面条代码的糟糕耦合,所有这些都伪装在看似完美无瑕的语法之下。我们甚至无法深入研究软件的硬性可靠性方面,因为那些语法完美但故障不透明的混乱代码不断堆积。

经过多次尝试,每次尝试的范围都比上次更窄,我已经降低到分配工作单元,这些工作单元被限制为在Python库中编写单个、定义明确的函数,但即使这样,我也无法阻止这个人不必要地链接函数,默默地混合和透明地通过多层接口传递数据,以及,最痛苦的是,以我们都非常熟悉的意大利面条代码的方式埋没重要的错误输出。

假设这位学徒愿意且渴望学习,如何才能打破这种在实现中根深蒂固的耦合心态,并打开这个人的思路,让他们专注于手头的实际问题——软件的功能是什么!

我不想搞砸这件事,培养出下一个达斯·维达!

函数定义形式 先生

亲爱的函数,

好吧,至少你没有提到goto,它是我美好青春岁月中大部分意大利面条代码的根源。是的,KV也曾年轻过,但因为像你指导的程序员这样的存在,他再也没有年轻或英俊过。

曾几何时,意大利面条代码的定义是它毫无理由地到处跳转,但是,正如你所说,你有一个人,即使在被给予像单个函数这样的受限契约时,仍然能够把它变成一盘意大利面条。

也许是时候向你的学徒介绍叙事的概念了。正如我无数次指出的那样,代码是编写和维护它的人们之间的一种交流形式,并且只是附带地在机器上可执行,我们称之为计算机。我似乎说得不够频繁,不够清楚,因为我说了很多次。也许有一天我会失声,那些我对着大喊大叫的人最终会认为他们会得到一些安宁;但如果真的发生这种情况,我有一个录音版本,我可以对着扩音器播放。

沟通只是故事讲述的一个花哨词汇,人类可能早在获得语言之前就开始做这件事了。除非你是一位造诣很高的超现实主义者,否则你讲述故事的方式是从开头开始,然后在一段时间内向读者展示更多的细节,最后到达结尾,希望读者体验到令人满意的闭合。作者(或编码员)的目标是在读者的脑海中形成与作者相同的图像。这就是沟通的过程,无论它是散文、程序还是诗歌都无关紧要——归根结底,如果我们的信息的接收者不知道我们的意思,那么一切都将是徒劳。

当然,正如许多杰出的作家随着时间的推移所证明的那样,清晰的叙事并非完全必要,但让我们坚持代码的清晰叙事隐喻,而不是声称我们应该基于《裸体午餐》编写一个会计系统。我的意思是,我会喜欢它,但它会奏效吗?只有Mugwumps才知道。

简单叙事的概念可以以下列方式应用于代码。我们试图写下用机器完成特定工作所需的步骤,以便当其他读者遇到叙事(代码)时——通常是带着像婴儿手臂一样长的错误列表强加给他们的——他们能够从他们选择的任何地方开始理解故事。对于一个短程序,少于100行,叙事可以全部在一个main()函数中。我建议你找到一些这样的程序——编写良好、注释充分,并且做好一件事并且做得很好。然后让你的学徒阅读它们并向你解释。

KV赞扬了阅读优秀代码作为学习编写优秀代码的方法的美德,对于年轻读者来说,短程序是最好的。即使你正在开发全新的代码,这在我们行业中是罕见的,但也一定有一些你并不讨厌的脚本或代码,并且它们赞扬了你希望灌输给这位学徒的美德。这些程序中最重要的部分是它们只做一件事,它们做得清楚,即使对于最没有经验的程序员来说,正在发生的事情也是显而易见的。找到那些代码,解释它们的美妙之处,然后让他们扩展和维护它们。

由于你们都在同一个代码库上工作,你也有充分的机会通过向这个人展示你是如何编码的来发挥领导作用。你必须小心地做到这一点,否则初级程序员会认为你是在摆架子,但是,通过一点温和的展示和讲述,你可以让你的学徒明白你的意图。对于我们这些更喜欢与看似逻辑的机器共度时光的人来说,这种人际互动通常很困难。指导是对领导力和同情心的终极考验,我真的希望你最终不会在一个行星撞击空间站的甲板上被切成两半。

KV

相关文章

人-KV 互动
Kode Vicious
一个有态度的编码员,KV回答你的问题。他可不是礼仪小姐。
https://queue.org.cn/detail.cfm?id=957782

阅读、写作和代码
Diomidis Spinellis
编写可读代码的关键是培养良好的编码风格。
https://queue.org.cn/detail.cfm?id=957782

与 Steve Bourne、Eric Allman 和 Bryan Cantrill 的对话
三位Queue编委会成员讨论软件工程的实践。
https://queue.org.cn/detail.cfm?id=1413258

Kode Vicious,凡人称之为George V. Neville-Neil,为了乐趣和利润从事网络和操作系统代码工作。他还教授与编程相关的各种主题的课程。他的兴趣领域是代码探险、操作系统和重写你的糟糕代码(好吧,也许不是最后一个)。他获得了马萨诸塞州波士顿东北大学的计算机科学学士学位,并且是、Usenix协会和IEEE的成员。Neville-Neil是与Marshall Kirk McKusick和Robert N. M. Watson合著的《FreeBSD操作系统设计与实现》(第二版)的作者。他是一位狂热的自行车爱好者和旅行家,目前居住在纽约市。

acmqueue

最初发表于Queue第16卷,第3期
在数字图书馆中评论本文








© 保留所有权利。

© . All rights reserved.