在Java 2010大会上,一位发言人给我们展示了几段简短的代码,并且问我们每段代码都是做什么用的。代码写的很明了,但没有提供上下文的注解。下面的就是这最后一段代码:
这个测试是在这天快要结束时进行的,我有些累了。我说不出这段代码是干什么用的。可后来我发现自己处于很尴尬的境地,其实这段代码所实现的算法我是十分熟悉的。我曾经写过相同的代码,而且还写在了博客里。
这个事件使我改变了对“自我注解”程序的理解。没有上下文的提示,你很难理解一段代码是干什么用的,即使是很小一段。
有意义的变量名称和函数名能给理解程序带来很大帮助,但一句简单的注释带来的帮助更大。我们不需要那些冗余的注释,就像解释这行代码x = 1.0 / x
是取一个数的倒数,我们要的注释是能解释这段代码是来解决什么问题的。
这还有个例子,你认为这段代码是干什么的?
m_z = 36969 * (m_z & 65535) + (m_z >> 16);
|
m_w = 18000 * (m_w & 65535) + (m_w >> 16);
|
return
(m_z << 16) + (m_w & 65535);
|
很明显这段代码是处理底层问题的 — 它只有一些操作 — 但我们完全不知道它是干什么的。
在继续往下读之前你最好尽力思考一下这段代码。如果你放弃了,那我告诉你,上面的第一段代码是来自这里的,第二段代码是来自这里的。
在通常我们的面对面交流中,有很多的信息是来自口头表达之外的。我们通常会认为我们的语言表达是最重要的,但是我们的语调,面部表情,肢体语言等传递了更多的信息。程序源代码跟这些很相似,我们通常会在里面隐含着大量的其它信息。
假设你的同事Sam请你帮他审查一下他的代码。工作中发生这种情况一般你能得到大量的上下文语境帮助;它们并不是网上的某个随机的代码片段。更特殊
的是,你还对Sam所工作的项目有相当的了解。你知道Sam为什么希望你帮他看一下他的代码。也许他想炫耀一下他引以为豪的杰作,或者他希望你帮他找出一
个bug。你在看他的代码之前已经有了相当的了解。
但如果你是个接手人。Sam不幸被车撞了,你被要求在Sam出院之前维护他写的代码。你很可能会向他的同事抱怨,说他写的代码是如此的糟糕,但他的同事却不理解你为什么要这样说。他的同事会认为Sam的代码非常的清晰易懂。
再假设你是Sam接手人,而且在世界的另一端。你不能跟他的同事很好的交流,你只知道很少的上下文语境。在痛苦的折磨后,你把你修改的程序发回Sam的公司。你把你的程序注释的非常充分,但Sam的同事却抱怨你的代码乱极了,你并没把问题真正的解决。
共事共识比源代码注释更有价值。所以说替换一个程序员的代价是巨大的,即使是他走时留下的是注释很好的程序。
翻译来源:外刊IT评论
:)
分享到:
相关推荐
这段程序是一个改进的粒子群算法,主要用于解决电力系统中的优化问题。下面我将对程序进行详细分析。 首先,程序开始时加载了一些数据文件,包括gfjl、fljl、fhjl1、cjgs和fhbl。这些文件可能包含了电力系统的各种...
8. **MWP文件**:中断程序做流量累计.mwp文件可能是一个MathWorks的MATLAB工作空间文件,其中包含了关于这个流量累计程序的MATLAB代码或数据。使用MATLAB,可以方便地进行数值计算和数据分析,也可以生成算法代码供...
【七段数码管计数器汇编程序】的实验旨在...总的来说,这个实验提供了实践经验,使学生能够深入理解8255A接口的工作机制,以及如何编写汇编程序来控制七段数码管的显示,同时增强了他们的问题解决能力和程序调试技巧。
这段程序主要是对图像进行处理和分析,用于检测车道线并计算车辆的偏离率。下面我将逐步解释代码的功能和工作流程。 首先,程序进行了一些初始化操作,定义了一些变量,并读取了一张图片。接下来,程序对图像进行...
这段程序主要是对图像进行处理和分析,用于检测车道线并计算车辆的偏离率。下面我将逐步解释代码的功能和工作流程。 首先,程序进行了一些初始化操作,定义了一些变量,并读取了一张图片。接下来,程序对图像进行了...
5.VB可以作什么程序? VB能做的太多了,除不不能开发ddk程序,不能开发sys,vxd其他的基本都能做。(呵呵,开发OS肯定不行了。) ,而用VB做个图书管理系统,医院管理系统等做毕业设计,是再快速和简便不过的了,...
制作自毁程序,程序自删除_自杀很容易,加一小段汇编就行了, 这段代码.运行时删除自已
在易语言中,我们经常会遇到需要判断程序段是否运行结束的情况,这对于控制程序流程、确保程序正常执行至关重要。下面将详细介绍如何在易语言中实现这个功能。 首先,理解“程序段”是编程中的一个概念,它指的是...
总之,`uniapp`微信小程序的时间段选择组件涉及到了`uni-app`的基础知识,如组件化开发、数据绑定、事件处理等,同时也涵盖了微信小程序的特定API和自定义样式设计。通过学习和实践,开发者可以构建出符合业务需求、...
标题中的“ss.zip_lsp程序_多段线_多段线闭合 lsp_面积lsp_面积标注”指的是一个名为“ss”的ZIP压缩文件,其中包含了一个LISP(AutoLISP)程序,这个程序主要用于处理CAD(计算机辅助设计)中的多段线(POLYLINE)...
这个程序的结构简单,易于理解,是初学者学习89C52单片机和C语言控制7段数码管的好例子。需要注意的是,实际应用中可能需要添加延时函数来控制扫描速度,以及考虑消隐处理,避免闪烁现象。此外,电路设计也非常重要...
《HT1621段式液晶驱动程序详解》 在电子设计领域,液晶显示(LCD)作为一种低功耗、高效率的显示技术,被广泛应用于各类嵌入式系统中。HT1621是一款专为段式液晶设计的驱动芯片,它能够驱动128段的液晶显示屏,常...
在这个场景中,我们关注的是“读写EPOS的运行程序段参数值功能块_FB函数库_V16版本”。 EPOS系统中的“运行程序段参数”是指在执行特定任务时,设备会遵循的一系列设定值。这些参数包括但不限于速度、加速度、位置...
随便双击一个应用程序,都会弹出一个独立窗口,显示出当前应用程序的更多相关信息以及目前状态,用户可选择“取样”,便会获得此程序在一段时间内的活动报告。 5. 当计算机系统失控的时候怎么处理? 在有些情况下...
在这个例子中,`DATASEGMENT` 和 `CODESEGMENT` 分别定义了数据段和代码段,`START:` 标签指示程序的开始位置,`EXIT:` 标签则用于标记程序结束的位置。 **2.2 指令集的组成与格式** 汇编语言指令集由基本指令和伪...
本资源聚焦于ESP8266的多段式程序烧写测试,这是一个关键步骤,确保模块能够正确运行分段代码,以实现特定功能。 首先,我们要理解烧写程序的概念。烧写,又称编程,是指将编译后的固件或软件加载到硬件设备的闪存...
在微信小程序开发中,"小程序日期时间段日历选择"是一个常见的功能需求,它允许用户方便地选取特定的日期范围或时间段。这个功能通常用于预订、安排活动或设置提醒等场景。下面将详细介绍如何在小程序中实现这样的...
这个小程序是干什么的? 资源分享小程序为网络资源分享类自媒体解决变现与传播问题,小小的资源,要钱不合适,不要钱又不能用爰发电,让用户分享又没有效果,那么我们就可以让用户打开小程序,看一段广告,直接获取...