acm-header
登录

ACM通信

观点

Kode Vicious:永久和变化


当你第一次写一段代码时,你打算维护它多长时间?在编写一个重要的类时,与编写一个100行的一次性脚本相比,您是更谨慎呢?不可能您编写的每段代码都必须经历与其他代码相同的过程和相同级别的审查,对吗?您是否曾经把一段代码抛在身后,让它消失在过去?

害怕和厌恶过去的代码

回到顶部

亲爱的恐惧和厌恶

我相信我和其他程序员一样,有很多代码我都想忘记。不幸的是,尽管你可能会忘记一段代码,而且在我这个年纪,我忘记的代码比写的还要多,等等,这可能吗?无论如何,虽然你可以忘记旧代码,但它永远不会忘记你,而且多亏了互联网,其他许多人可能能够读到你忘记的东西。如果您曾经为开源项目做过贡献,那么您的代码可能永远不会丢失,尽管它可能会被最近的签入所掩盖。

在我成长的过程中,我的母亲总是让我重做作业,她说:“没有时间把作业做对,只有时间重做。”当我把事情做对的时候,我有很多愧疚感。令人高兴的是,从那以后我已经能够克服一些内疚,但在我的灵魂中仍然有一层薄薄的光泽,这使我关心每一段代码,就好像它是别人有一天会读到的东西一样,我不想让他们失望。我的主要目标是让代码足够好,即使10年后,当我再次看到代码时,我也不会发现它有什么不足。我并不总是能达到这个目标。

计算机程序员和工程师在我们所做的工作中处于独特的地位。我们都是科学家,处理帮助我们解决问题的抽象概念,也都是工匠,把这些抽象概念运用到我们的现代车床上,使现代世界成为今天的样子。当我们精心编写代码时,它会工作得更有效、更漂亮,有助于创建更好的系统。当我们匆忙地完成工作,而忽略了刻痕和划痕时,这些部件就无法匹配,最终我们得到的软件看起来更像你小时候在后院建造的堡垒。当然,在那个堡垒里闲逛很有趣,但你在真正的暴风雨来临的第一个迹象时就跑回了房子。

我最喜欢的日文单词是ganbarimasu,cacm5112_z.gif这是一个词,它取代了英语短语“Do your best”。如果有人在工作中告诫你要尽最大努力,你可能会觉得他们有点奇怪。日本人彼此之间相对频繁地说这句话,而且他们很认真地对待这种告诫,无论他们是在扫地、做饭、盖房子还是写代码。我建议您对所有的代码都这样做。

当你养成了第一次就把事情做对的习惯,每一次,事情就会变得简单和自然。所以,是的,无论你是在为飞机编写导航系统,还是为邮件文件夹编写清理脚本,你都应该尽最大努力。有一天,其他人可能需要这些代码,而您不希望他们认为您的代码缺乏,对吗?

KV

回到顶部

亲爱的KV,

有一天,我正在安装,或者实际上是试图安装一些软件,我陷入了交换软件、硬件和线缆的无限循环中,只为了让一个小东西工作。真是浪费时间!一定有一些方法可以避免这些类型的循环。

感觉糊涂

回到顶部

亲爱的糊涂

显然,既然你有时间给我写信,循环就不是无限的了,对吧?你知道怎么检测无限循环吗?计算出您愿意在没有得到不同结果的情况下做多少次相同的事情,然后在多次迭代之后停止!毕竟,疯狂通常被定义为一遍又一遍地做同一件事,却期望得到不同的结果。你不想让你的同事认为你疯了,除非,当然,你喜欢坐在一起吃午餐。不过,比起重复同样愚蠢的过程而一事无成,还有更好的方法让人们相信你疯了。

你的描述让你听起来更像一个变革者而不是一个工程师。changeineer是什么?通常情况下,当出现故障时,他们会派人去远程站点,比如数据中心。他们并不真正知道系统是如何工作的或如何修复它,但他们知道如何改变系统中的每一个组件,直到问题神奇地消失,至少在几天内。磁盘是缓慢的吗?改变磁盘。没有工作吗?升级的CPU。还慢吗?得到更快的内存。 Ad nauseam.

Changineer是我从一些在数据中心工作的朋友那里学来的术语。不出所料,我是在喝着酒、吃着午餐时听到这个词的。他们每天都能看到改变者,并学会发现他们并迅速消除他们,这样他们就能解决问题,而不是让他们被许多随机的新组件所掩盖。

你要避免的是成为一个改变者。changineer使用他们的手,或者更糟的是,使用文本编辑器,而工程师使用他们的头脑。当你发现自己一遍又一遍地做着同样的事情,你仍然感到沮丧的时候,是时候离开这个问题,好好想想了。纸和钢笔或铅笔仍然是最好的,或者白板。写下症状。想想是什么导致了这个问题。提出一个假设,也就是猜测问题的真正原因。想想如何验证你的猜测。然后测试你的猜测。这个过程也可以重复,但与您描述的过程不同的是,每次更改之前都要经过仔细的思考。 You're a lot less likely to go on spinning around.

KV

回到顶部

作者

乔治诉Neville-Neil(kv@acm.org)是Neville-Neil Consulting的所有者,也是ACM队列编辑委员会。他从事网络和操作系统代码方面的工作,教授各种与编程相关的课程,并鼓励您的评论、俏皮话和与他相关的代码片段通信列。

回到顶部

脚注

DOI: http://doi.acm.org/10.1145/1409360.1409372


©2008 acm 0001-0782/08/1200 $5.00

允许为个人或课堂使用本作品的全部或部分制作数字或硬拷贝,但不得为盈利或商业利益而复制或分发,且副本在首页上附有本通知和完整的引用。以其他方式复制、重新发布、在服务器上发布或重新分发到列表,需要事先获得特定的许可和/或付费。

数字图书馆是由计算机协会出版的。版权所有©2008 ACM, Inc.


没有发现记录

Baidu
map