The Kollected Kode Vicious

Kode Vicious - @kode_vicious

  下载本文的PDF版本 PDF

Kode Vicious 再次出击

KV,一个态度强硬的程序员,回答你的问题。他可不是礼仪小姐。

叫我们疯狂也行,但我们正让 Kode Vicious 成为常驻专栏。所以我们再次齐声高呼:不要害怕,Kode Vicious 在此!解答你的问题,解决你的难题,让世界变得更美好。

尊敬的 Kode Vicious:

我遇到了一个问题。我总是找不到我明明写过的代码片段。这倒不是工作代码——那些都在我们的源代码服务器上——而是你知道的,那些我上个月写的测试代码,我总是找不到它们。你是怎么处理这个问题的呢?

语言迷失者

亲爱的迷失者:

丢东西会让我觉得自己很蠢,而我讨厌那种感觉。几年前,我一个聪明但非常健忘的朋友指出了一个显而易见的答案,可以用来跟踪我电脑上的所有东西。把它们放到源代码仓库里!不是工作用的那个,笨蛋!你最不希望的就是让你的雇主看到你所有的个人代码、文档和杂物。我的意思是,如果他们倒闭了怎么办,这种情况经常发生,不是吗?

我所做的是这样的:几年前,我把我家里的一台服务器(你家里有服务器吧,对吧?)拿出来,并在上面放了一个 CVS(并发版本系统)仓库。我现在把我关心的所有东西,几乎是所有东西,都检入到我自己的个人 CVS 中。这包括我所有的配置文件(因为我是 Unix 迷,所以是点文件),所有文档(包括这封信和回复),所有代码,所有脚本,几乎所有东西。任何我在电脑上创建的、打算使用一次以上的东西都会放到仓库里。考虑到现在磁盘空间如此廉价,扔掉任何你认为可能会再次使用的东西是没有意义的。

作为一个额外的福利,我现在可以在大约 10 分钟内在任何计算机上设置我的环境。我只需确保新机器上安装了 CVS,然后检出我的 Personal/DotFiles 目录。然后我运行一个小脚本,将所有必要的文件从 Personal/DotFiles 链接到它们正确的位置,砰,一台即时 KV 编码机器就完成了。这在非 Unix 平台上也能同样出色地工作,但我不用那些平台,所以你需要自己研究一下具体操作。

哦,记住要以某种方式备份仓库。镜像它,刻录到 CD-ROM 或 DVD,但一定要为“以防万一”的时刻做些准备。如果你认为丢失一个文件时你感觉很蠢,想想当你丢失几兆字节或更多时,你会有多么绝对、令人震惊的愚蠢感觉。

我确信我在本专栏发表后收到的第一封信将来自某人抱怨一旦你存储了所有东西,如何找到它们。我建议你使用目录,这是自 1970 年代以来操作系统就有的功能。我还建议你使用合理的名称,不要包含 “foo”、“bar” 和 “baz”!

KV

*

亲爱的读者们:,

在本期中,讨厌的老顽固 Vicious 叔叔不打算刊登和回复来信。为什么呢?嗯,不是因为你们都保持沉默,绝不是。这个月我想谈谈我的五大编码痛点。我为什么要谈论这个呢?嗯,因为当我来你们工作的地方工作时,我已经厌倦了在你们的代码中看到这些东西,就是这样!所以,按递增顺序,以下是那些让我下班后狂饮不健康酒精饮料的事情。

5. 糟糕的注释。你,没错就是你,你知道我说的是谁。你们就是那些写出像这样的注释的人:

// 将 i 设置为 1i = 1;

当这很明显时,却让那些庞大而复杂的函数,在 20 种不同情况下执行 9 种不同操作的函数,完全没有注释。

哦,还有,请记住 CS101 课程,并在每个函数的开头放置有用的注释?仅仅因为你不认为有人会看到那个函数,并不意味着像我这样的人以后不需要清理那个烂摊子。

4. 悬空的 else 子句。在修复或扩展软件时,最常见的错误之一是在你认为是一个代码块的内部添加代码,结果却发现不是。这就是我所说的悬空 else,当我看到它们时,我倾向于直接添加花括号。为什么?嗯,每增加一个 else 多两个花括号字符又不会使你的磁盘过载,除非你在一些非常老旧的硬件上编程。在这种情况下,向你妈妈要 50 美元买一块更大的硬盘,或者删除一些你下载的电影。

3. 魔法数字。 我不知道有多少次我看到这样的代码:

name_buf[128]; // 保存文件名。

然后要么是 name_buf 被错误地索引,要么是相同类型的存储以不同的方式声明

new_name_buf[127]; // 保存文件名。

无论你使用哪种语言——C、Java 等等——在某些时候你都需要使用常量,当你这样做时,你应该给它们命名。为什么?嗯,这不仅是一种更简洁的编码方式,而且它还提供了更一致的结果,因为你更有可能在你需要的任何地方使用常量名。现在,如果你将代码移植到一个名称较短或较长的系统怎么办?你想搜索所有代码来找到这些魔法数字并更改它们吗?!我不这么认为。

这种特殊用法的魔法数字比平时更糟糕,因为有一个众所周知的、操作系统定义的常量你应该使用。在我写这篇专栏的机器上,它实际上是 1024 字节,它被称为 FILENAME_MAX。

2. 代码丁字裤。 在阅读代码时,没有什么比在文件或函数的中间遇到一大块注释掉的代码更令人震惊的了。既然你正在使用源代码控制系统(等等,你正在使用源代码控制系统,对吧?),你可以简单地删除代码并检入新版本。如果你需要复活已死的代码,你可以简单地检索旧版本。

同样的抱怨也适用于在构建时使用诸如 #if/#endif 之类的东西有条件地编译掉的代码块。有些系统依赖于 #ifdef 进行配置,我也觉得这有问题,但这与 #if 0 的情况不同。如果你不想让代码在那里,那就不要把它放在那里,或者让你的源代码控制系统记住它曾经在那里。代码应该始终代表系统现在的样子,而不是它过去的样子,或者应该成为的样子。

1. 全局变量。 我真诚地希望,地狱里有一个特殊的层次是为那些程序员保留的,他们每次未能做出正确的抽象时,都会向他们的程序添加另一个全局变量。 在此之上,我希望还有另一个层次,带有更糟糕的惩罚,是为那些给这些全局变量起名为 “s” 和 “r” 的程序员准备的。追踪用这种方式编写的软件中的问题并非不可能,但这绝不是我喜欢的乐趣。所以,请,如果你真的需要一个全局变量,给它起一个容易让其他人用 grep 或其他像 Cscope 这样的工具找到的名字,并确保你真的,真的,真的需要它。

就是这样,我的五大痛点。抱歉,没有奖品,甚至连安慰奖都没有,只有我尖叫着,“停止这样做!” 现在我将打开讨论的闸门,让你们给我写信,告诉我你们的痛点。如果我喜欢它们,我很可能会发表它们。如果我不喜欢它们,嗯,总有 “d” 键。

KV

*

尊敬的 Kode Vicious:

我的老板一直抱怨我有一种 NIH 态度,并且我所有最好的想法都“在已发表的文献中”,无论那是什么地方。这真的让我很沮丧。你有没有想到任何巧妙的方法来让他不再唠叨我?

沮丧的人

亲爱的沮丧的人:

嗯,我确实有让老板不再唠叨我的方法,但我不会在这里分享它们。首先,因为许多方法都是非法的,其次,因为我认为你的老板可能是对的。

我的经验是,许多程序员上次阅读论文还是在学校里某门课程的必修课上。尽管有很多关于行业最新流行语的书籍,但这些书籍从未涵盖基础知识——我们每天所做事情的基础——也没有谈论我们构建系统的重大变化。学习本周的语言固然很好,但如果你不理解语言是如何以及为什么编写的,你可能会为你的项目选择错误的语言。对于我们领域的任何部分来说,情况都是如此,无论是数据库、Web 应用程序框架、安全产品还是网络协议。

“但是期刊太无聊了!” 我听到你抱怨。嗯,是的,除了 Queue 当然,没有太多令人兴奋的睡前读物。我承认我会带着一套特别好的会议论文集上床睡觉,但是,正如你很清楚的,我碰巧是一个极端案例。

归根结底,了解你所在的领域是你的责任。如果你是一名管道工,并且错过了从铅到铜的转换,你肯定会对你的客户和你自己造成损害。

我可以给你一些提示,让这个过程变得容易得多。首先,你应该四处询问,看看你的同事们都在读什么。找到那些你尊重其代码或设计的人,看看他们的书架上有什么。然后从他们那里借一两期,或者在线阅读一些文章。

一旦你有了几本不同的期刊,就去当地的咖啡店,或者把它们带到你的下一次飞行中。通勤也是阅读的好时机,但前提是你不开车!在阅读期刊时,你应该记住两件事。第一件事是,大多数期刊(如果不是全部)都会为他们的每一篇论文发表摘要。首先阅读所有摘要,然后决定你想阅读哪些论文。要记住的第二件事是,论文不是小说。如果你不喜欢你正在阅读的论文,并且你没有从中获得任何东西,那就把它放在一边。生命太短暂,不值得阅读写得不好的论文。

现在,在我用完空间之前,我应该为 的好人们做个宣传。当然,这个组织拥有涵盖 IT 行业各个方面的期刊和会议论文集,这是一个很好的起点。我另外两个最喜欢的期刊和会议论文集来源是 IEEE 和 Usenix。每个组织服务的社区略有不同,但它们都值得一看。现在放下你的《雪崩》,回去工作吧!

KODE VICIOUS,凡人称之为 George V. Neville-Neil,为了乐趣和利润而从事网络和操作系统代码的工作。他还教授各种与编程相关的科目。他的兴趣领域是代码探险、操作系统和重写你的糟糕代码(好吧,也许不是最后那个)。他获得了马萨诸塞州波士顿东北大学的计算机科学学士学位,并且是 、Usenix 协会和 IEEE 的成员。他是一位狂热的自行车爱好者和旅行者,自 1990 年以来就以旧金山为家。

© 2004 1542-7730/04/1100$5.00

acmqueue

最初发表于 Queue 第 2 卷,第 8 期——
数字图书馆 中评论这篇文章





更多相关文章

Catherine Hayes, David Malone - 质疑评估非加密哈希函数的标准
尽管加密和非加密哈希函数无处不在,但在它们的设计方式上似乎存在差距。 针对各种安全需求,存在许多加密哈希的标准,但在非加密方面,存在一定程度的民间传说,尽管哈希函数历史悠久,但尚未得到充分探索。 虽然针对真实世界数据集的均匀分布很有意义,但在面对具有特定模式的数据集时,这可能是一个挑战。


Nicole Forsgren, Eirini Kalliamvakou, Abi Noda, Michaela Greiler, Brian Houck, Margaret-Anne Storey - DevEx 行动
随着领导者寻求在财政紧缩和人工智能等变革性技术的背景下优化软件交付,DevEx(开发者体验)在许多软件组织中越来越受到关注。 技术领导者凭直觉接受,良好的开发者体验能够实现更有效的软件交付和开发者幸福感。 然而,在许多组织中,旨在改善 DevEx 的拟议举措和投资难以获得支持,因为业务利益相关者质疑改进的价值主张。


João Varajão, António Trigo, Miguel Almeida - 低代码开发生产力
本文旨在通过展示使用基于代码、低代码和极限低代码技术进行的实验室实验结果来研究生产力差异,从而为该主题提供新的见解。 低代码技术清楚地显示出更高的生产力水平,为低代码在短期/中期内主导软件开发主流提供了强有力的论据。 本文报告了程序和协议、结果、局限性和未来研究机会。


Ivar Jacobson, Alistair Cockburn - 用例至关重要
虽然软件行业是一个快节奏且令人兴奋的世界,其中不断开发新的工具、技术和技巧来服务于商业和社会,但它也很健忘。 在其快速前进的过程中,它容易受到时尚潮流的影响,并且可能会忘记或忽略针对其面临的一些永恒问题的成熟解决方案。 用例于 1986 年首次引入,并在后来普及,是这些成熟的解决方案之一。





© 保留所有权利。

© . All rights reserved.