他的代码不是自记录的,其他程序员在理解他的代码时都遇到了困难。借口或声称他以后会做。他担心的是,添加注释将花费太多时间,并会延迟项目。
在那一点上,我错在专注于代码注释吗?或者这表明应该解决一个更大的问题?
#1 楼
仅凭注释并不能带来更好的代码,仅推动“更多注释”可能就给您带来比/* increment i by 1 */
样式注释更多的东西。除非您了解原因,否则“最佳实践”不会被视为一个论点。注释,它们要么是笨拙的鹦鹉,要么很难理解正在使用的代码。所以不要抱怨缺少注释:抱怨代码不可读。或者更好的是,不要抱怨,只是不断询问有关代码的问题。对于您不了解的任何内容,请询问编写者。无论如何,您都应该这样做。使用不可读的代码,您只会问更多问题。而且,如果稍后再返回一段代码,并且不确定自己是否正确地记住了它的功能,请再次提出相同的问题。 ,他/她将在某个时候意识到,注释代码比让您一直无休止地询问愚蠢的问题容易得多。而且,如果您无法提出问题,那么也许该代码已经很容易阅读了,这是您的错-毕竟,并非所有代码都需要注释。 ,不惜一切代价避免屈从于屈辱或指责;对您的问题要诚实和诚实。
评论
+1表示“不要抱怨缺少评论:抱怨代码不可读”。
– Mahbubur Rahman博士
13年2月5日在6:39
如果关于代码的任何问题的答案都是“您做了什么才能理解它”,该怎么办?
–扫罗
13年2月5日在9:58
+1:推送可读的函数名称可能会带来更多好处……在代码审查中:“无法理解xg_jkhsfkasq在做什么”。 “哦,它正在冲洗主要的提要缓冲区,现在可以释放吗?” “当然,但是在您将函数重命名为flush_primary_buffer重命名之前,我一直很犹豫。”“啊,但是它也正在清除主缓存,因此名称会产生误导。”“这是什么?不要清除该缓存,它“将使系统停止运转!在更改逻辑时,您介意重命名该功能吗?”
–deworde
13年2月5日在10:03
我担心会给我留下无法阅读代码的印象。非技术经理可能只是注意到我一直在向'Bob'寻求帮助,因为Bob的代码对我来说太高级了。那意味着鲍勃是一个“高级”开发人员,而我还不准备在他的水平上工作。
– RobP。
13年2月5日在10:03
@RobP。我看到了恐惧,但是如果您看不懂代码,并且期望您将维护代码,那么代码编写得不好,或者您不够了解。如果您不够了解,则需要询问。如果询问显示该代码根本难以阅读,请推动对其进行修复。诀窍是,如果您沿着社交工程路线走下去,那么无论鲍勃去您的办公桌还是去他的办公桌,都要把它混在一起,并且要非常积极地指向事物。毕竟,非技术经理将无法掌握讨论的内容...
–deworde
13年5月5日在10:13
#2 楼
我遇到了很多开发人员,他们在编写自文档代码或有用的注释时遇到了麻烦。这类人通常缺乏足够的自律或经验来正确地做到这一点。这将不会增加他们的自律性或经验。恕我直言,唯一可行的方法是进行频繁的代码审阅和重构会话。开发人员完成任务后,请让他/她解释您不理解的代码的任何部分。立即重构或记录代码,以使你们两个月后都能理解。在几个月的时间内执行一次,至少每周两次。如果您足够幸运,其他开发人员将通过这些课程学习,以便您减少审阅频率。
评论
+1这是将变更真正实施为我发现的同事,与他们坐在一起并与他们一起审查/重构的唯一方法。如果您无法拒绝代码审查,则可能会很困难。有时,当您处于中级水平时,您只需要向年长者提出问题,如果他们不听,直到您年长并且可以否决此类垃圾时,您的鼻子会被打扰
–吉米·霍法(Jimmy Hoffa)
2013年2月5日14:48在
在我提高团队开发人员总体水平的经验中,代码审查和结对编程是最好的方法。这是关于在团队中共享知识和技能。没有它,您将使开发人员难以学习,并假设他们脱离了大学。整个行业普遍缺乏这种实践,这可能是为什么这么多具有10年以上经验的开发人员无法编写易读,组织良好的代码的原因。
–马丁·布朗
13年2月18日在13:25
#3 楼
我很惊讶没有人提到代码审查。做代码审查!当他的检查质量不佳时,不要只说“添加评论”。不断问问题,让他告诉您他的代码做什么以及为什么。做笔记。然后,在代码审查的最后,给他一份注释的副本,并告诉他使您的问题相当明显。通过添加更多注释或仅重构其代码以提高质量(可能的话最好是后者)评论
+1-如果您必须就代码的任何部分提出问题,则该部分需要注释或重构,因此将来无需其他人提出问题。
–扣篮
13年2月6日在14:16
+1同样令人惊讶的代码/同行评审对答案的回答是如此之低。实施团队级别的代码审查(以免挑人)可以帮助解决问题(也许您甚至不认识其他人)。在极端情况下,您可以实施禁止独推的政策,除非您的更改已由另一位团队成员审阅,否则您不得推动。
–克里斯·李(Chris Lee)
2013年9月17日19:32
我公司代码审查政策中的@ChrisLee在技术上没有强制执行,但是有一项政策规定,在故事可以标记为“准备测试”之前,无论开发人员是谁,都必须对其进行代码审查。当CTO签入时,必须进行代码审查非常有趣
–埃尔兹
2013年9月17日21:21在
#4 楼
这取决于团队工作人员生成的代码。如果您阅读Bob叔叔的“清洁代码”书,您会发现他实际上更喜欢不在代码中添加注释。如果代码本身具有应有的可读性,则几乎不需要注释。如果不是这种情况,或者由于某些不可协商的政策而需要注释,则主要问题在于,是否只有您要他/她发表评论,还是整个团队还是团队/项目负责人。如果只是您,那么您应该与其他同事交谈,以找出为什么根本没什么大不了的事情。完整性,即,如果提交的代码缺少注释,则工作尚未完成。他可能不会继续做其他工作,直到他当前的工作完成并且需要评论。但是,请记住,这种强制很可能会导致可怕的注释(期望大量糟糕的重复代码注释)。您和其他所有人从评论中获得的实际利润。如果他/他不能仅仅通过讨论来理解它,那么总也有困难的方法:与其让他们编写新代码,不如让他们在现有代码上工作。如果可能的话,您应该找到它们两个不同的工作区域-一个带有适当的有用注释,另一个没有注释。必须阅读别人的不可读的未注释代码,这对您自己的工作大开眼界。
我们都去过那里一次,并对某些工作如此草率的消息的原始作者感到生气。这是我们每个人也是这样的作者的另外一种反思,使您意识到您应该关注可读性-因此,请不要忘记与同事讨论结果以促进这种反思。
评论
+1用于讨论评论的实际收益。注释旨在为源代码增加价值。
–火花
13年2月6日在13:16
回复:“这种强迫很可能导致可怕的评论”。如果您在编写代码时未发表评论,那么无论您是否相信,在完成代码后回填评论几乎总是会导致可怕的评论。在进行编码时,这是您确切知道为什么要以某种特定方式进行操作的时间。是时候让其他人知道了。如果您在完成操作后发表评论,很有可能您甚至都不记得编写代码时的想法,因此您往往为了评论而抛出无用的评论。
–扣篮
2013年2月6日14:13
那本书的方法总是有问题。注释可能对解释没有大量干净代码的业务流程/逻辑(或原因)很有用。
–巴尔
13年2月6日在16:45
尽管代码中的注释不是必需的,但是至少应该有方法描述,例如Javadoc
–努比亚水手
13年2月8日在8:59
清洁法典是一本不错的书,但不应被视为福音。您必须运用常识并自己决定有效的方法。我不同意关于注释的建议,因为编程语言旨在表达问题的方式而对原因的关注很少。我正在为Google购物编写代码,该代码将国家/地区代码附加到产品SKU。很明显,代码在做什么,但是除非您知道一次只能使用相同的产品代码,即使在不同的市场中,您都不知道为什么要这样做。我添加的评论对此进行了澄清。
–GordonM
13年2月17日在11:48
#5 楼
如果您的员工无法按照指示进行操作,请训斥他,并确保很显然这不会帮助他的职业发展。编码风格的一致性对团队至关重要,如果其他所有人都在写评论,而注释不是这样,那将会损害编码风格。以我的经验,当有人抗议评论花费太多时间时,就会遇到诸如...的心理障碍。散文散布。 (代码审查不仅可以帮助破坏别人的自信心,还可以帮助他们破坏信心。)
他的工作方式非常线性,没有太大的想法。注释很痛苦,因为它迫使他从工作记忆中卸载即将编写的即时代码,从而以不同的方式构成自己的意图。 (如果是这样,注释对于他的代码质量非常重要。)
从历史上看,人们不理解他的注释。它们不仅供将来使用,而且还供程序员自己使用。他们迫使他对他的方法有所不同。
这些都不能替代CI,测试或代码审查。它只是编码的许多关键部分之一,本身就是不编写代码。
评论
我认为威胁不一定一定会有效,它们可能会被视为欺凌(即使这不是故意的),并且编码人员通常会对高层的命令感到愤慨,在这种情况下,他可能只是挖更多的脚跟。这可能是最后的手段,但只能是最后的手段。
–GordonM
13年2月17日在11:50
@GordonM您认为最好不告诉员工什么时候是不适当的行为,持续不当行为的后果是什么?
– kojiro
13年3月2日在20:38
完全不说什么都不是一个好主意,但是威胁人们只会加剧恐惧的气氛,尤其是在相对较小的事情上,例如评论风格。如果您合理地向他解释,为什么团队认为评论很重要就可以了。但是我知道,如果有人因为相对较小的事情用麻袋威胁我,我会更倾向于刚开始寻找另一份工作。
–GordonM
13年3月3日在8:46
@GordonM实际上,我对我所说的内容正在威胁这一暗示表示例外,但无论如何,我已将其修复。
– kojiro
2013年9月14日13:01在
#6 楼
获取代码审查软件,并将其很好地使用。我们使用Kiln,并且喜欢它。我们有一项政策,必须对每个变更集进行审查(尽管我们允许开发人员自己对标签和无冲突的合并提出/批准审查(尽管我们大多数人都使用rebaseif);这样,我们可以快速发现变更集而无需审查)。 br />
代码不清晰是拒绝代码审查的原因。修复是注释还是更清晰的代码都没有关系,但是审阅者必须能够理解它。一些开发人员更喜欢重写代码,但其他开发人员(包括我自己)通常会发现更容易在注释中表达意图(代码可以轻松显示其功能,但很难显示其功能)。 >如果对代码的清晰度存在疑问,则审阅者总是胜出。当然,作者理解了,因为他们写了它。它需要别人清楚。
通过使用Kiln之类的软件,不会忽略任何变更集。开发团队中的每个人都更喜欢这种方式。代码审查软件对我们的代码质量和应用程序质量都产生了巨大影响:-)
开发人员在初次引入该软件时很容易对被拒绝的审查进行防御,但是根据我的经验,它并没有他们花了很长时间才意识到这种方式会更好,并接受它:-)
编辑:同样值得注意的是,我们尽量不要让开发人员以口头方式或在评论中的注释中解释隐秘代码。如果不清楚,最好在代码中进行解释(在注释中或通过重构),然后将新的变更集添加到同一评论中。
#7 楼
有趣的是,应用于自然语言的可读性是通过阅读和理解的速度来衡量的。我想确实可以采用一条简单的规则,如果特定的代码注释不能改善此属性,则可以避免。为什么要注释?作为嵌入式文档的一种形式,高端编程语言有多种方法可以通过使用语言本身的元素来避免(有意义的代码的)多余的“过度文档化”编程。将代码转换为编程教科书中的清单也是个坏主意,在该文本中,几乎以重言式的方式逐字解释了单个语句(请注意已提供的答案中的“ / *将i递增1 * /”),使此类注释有意义但是,仅是试图注释真正是“万恶之源”的“文档不足”(但毫无意义)的代码。 “文档不足”代码的存在本身就是一个不好的信号-它要么是无组织的混乱,要么是神秘的迷失了目的的古怪黑客。显然,这种代码的价值至少值得怀疑。不幸的是,总是有一些例子,当确实要比将注释包装到新的子例程中时,在一段(视觉分组)格式的代码行中引入注释确实更好(注意“愚蠢的一致性”,即“小头脑的妖精”) 。
代码可读性!=代码注释
可读代码不需要注释注释。在代码的每个特定位置,总是存在该特定代码应该实现的任务的上下文。如果缺少目标和/或代码做了神秘的事情,请不惜一切代价避免它。请勿让怪异的骇客填充您的代码-这是将越野车技术与缺乏时间/兴趣来理解基础的直接结果结合在一起的结果。避免在您的项目中使用神秘的代码!
另一方面,可读程序=代码+文档可以包含注释的多个合法部分,例如便于生成“对API的注释”文档。
遵循代码样式标准
很有趣,问题不在于为什么要注释代码,而是与团队合作有关–如何以高度同步的方式生成代码(其他所有人都可以阅读/理解)。您是否遵守公司中的任何代码风格标准?它的主要目的是避免编写需要重构的代码,而这些代码过于“个人”和“主观”含糊。因此,我想,如果看到使用代码样式的必要性,那么就有大量严肃的工具来正确实现它-从教育人们到以自动化进行代码质量控制(大量棉絮等)和(修订控制集成)代码审查系统。
成为代码可读性的传播者
如果您同意代码的阅读比编写的次数多。如果清晰地表达思想和思路对您很重要,则无论使用哪种语言进行交流(数学,机器代码或古英语)。 ,最后一个来自另一个“清单”。)提出问题,发起讨论,开始散布发人深省的代码清理书籍(可能不仅类似于Beck的设计模式,而且更像RC Martin已经提到的),解决了歧义。在编程中。进一步总结了关键思想(摘自O'Reilly的可读性书)
通过适用于每一行的提示简化命名,注释和格式设置代码
重新定义程序的循环,逻辑和变量,以减少复杂性和混乱性
在功能级别上遇到攻击问题,例如重组代码块以一次执行一项任务编写有效,简洁的有效测试代码,以及易于理解的
删除“注释”,仍然有很多内容(我猜写不需要注释的代码是一件很棒的行使!)。为语义上有意义的标识符命名是一个好的开始。接下来,通过将逻辑连接的操作分组为函数和类来构造代码。等等。一个更好的程序员就是一个更好的作家(当然,假设还具备其他技术技能)。
评论
您可以编写仅出于娱乐目的而无需注释的代码。这确实是一个很棒的练习,但是如果您需要返回代码并且不能真正更改任何内容,则不是这样,因为您将不知道为什么该功能会起作用,因为可能确实有些客户端想要这样。当然,您可能会在项目外部记录和推理项目的1%,但是即使如此,您在编码期间所做的决策也不会退回到文档中。坦白说...谁在阅读不在代码中的文档。当然不是程序员;-P。
– Nux
13年1月1日在3:12
一个好的工程师会关心整个系统(包括非代码生成的文档)-但是,在这里,我们当然要注意编码。.我的观点是,在名为foo,bar,tmpSomething2和IamJustTooSmartAssToCare的代码中没有标识符这种情况,并减少了解释代码是什么及其作用的总体需求。代码应使用“思维模式开启”编写,就像设计良好的API一样,人类可以读取,理解,重用和维护它们。代码中的注释太多了,否则很难理解!
–尤恩·亚基莫维奇(Yauhen Yakimovich)
13年1月1日在15:02
BTW以HACK或“临时”错误修复的形式对任何类型的领域特定逻辑进行编程/编码实际上会产生“怪异的HACK”-一旦您将很多黑莓压缩在黑盒中-期望它们失败并回击。这可以通过“现实世界”项目中的截止日期等来证明。但实际上,它只是便宜的软件,需要对域逻辑进行重塑(或可能找到新工作)。
–尤恩·亚基莫维奇(Yauhen Yakimovich)
2013年3月1日15:13
我同意可读性很重要,但我不同意的是,您似乎说“如果将可读性作为优先事项,则不需要注释”。那明显是错的。去过也做过。推理您所做的不仅仅来自以有意义的方式命名变量。当然可以这样做,但是还要在注释中添加原因(即使它是某些外部系统中的错误/需求/层号的形式)。我就是这么说的
– Nux
13年4月4日在12:33
“如果您将可读性作为优先事项,那么您将不需要评论”-是的,这正是我在说的(而且我知道这似乎并不容易实现)。顺便说一句,您是否处于维护完整提交(版本控制)历史记录不足以反映“错误/需求/层数”的情况?我一直在练习很长时间的提交-对我有用,并且可以使代码不受开发历史的影响。
–尤恩·亚基莫维奇(Yauhen Yakimovich)
2013年3月4日13:53
#8 楼
我错在专注于代码注释吗?或者这表明应该解决一个更大的问题?
有点。好的代码不需要注释。但是,正如您所说,他的代码不是自记录文件。因此,我不会专注于评论。您应该专注于提高开发人员的技能和工艺水平。
那么该怎么做呢? Doc Brown关于审阅/重构会议的建议是一个好主意。我发现结对编程甚至更有效,但是实现起来也可能要困难得多。
评论
结对编程是一个很棒的主意,它使另一个程序员可以深入了解代码的开发,以便他们知道发生了什么,从而使两个人对代码负责。它还使两个人之一有机会说某事应该发表评论,因为它与众不同,或者其他人可能因为它看起来像...“内存泄漏”,“编码错误”而进行更改,等等。有些事情需要评论,以便将来其他人不会撤消某些事情,因为它看起来不正确。
–玛拉基
13年5月5日在16:20
#9 楼
首先,我建议您重新处理有关评论的方法。如果它们是API级别的文档注释(稍后向公众公开),则该开发人员根本就没有做好自己的工作。但是对于所有其他评论,请小心。
在我遇到的大多数情况下,评论都是邪恶的。我建议阅读罗伯特·马丁(Robert Martin)的“干净代码”的代码注释一章,以更好地理解原因。
注释以几种方式损害了您的代码:很难维护。重构时,您将不得不付出额外的工作;如果您更改注释中描述的逻辑,则也需要编辑注释。
2)它们通常是说谎的。您不能信任注释,而必须阅读代码。这就引出了一个问题:为什么您完全需要这些注释? > 3)注释使代码混乱,并且很少添加任何值。
我的解决方案:与其添加更多注释,不如完全消除它们!
评论
这真是愚蠢。我希望没有人相信如此糟糕的评论风格会有所帮助。但是,您诚实地认为不应使用评论吗?
– jmk
13年2月16日在22:27
是的,这是一个愚蠢的建议,如果代码的可读性令人难以置信,我可以理解很少的注释,但是看到注释应该说明该方法的作用,以及到达多个类后将在哪里使用该方法没有理由不发表意见,他们可以帮助所有人。
– DBlackborough
13年2月17日,0:56
要记住的重要一点是,尽管现在一切对您都有意义,但其他人将不得不在三年内维护您的代码。不要拧过来。
–xaxxon
2013年2月17日在2:32
@xaxxon更不用说那个苹果了,即使那个人可能是你。
–蓬松
2013年2月17日3:00,
@mehaase-不是什么,不是怎么做,但是为什么是在代码中添加注释的最重要原因。
–汉克·兰格维德
13年2月26日在21:38
#10 楼
如果一个团队成员在理解另一个团队成员的代码时有困难(出于任何原因);那么该团队成员应该能够找出谁是原始代码的编写者(任何健全的版本控制系统),并应被鼓励要求代码的作者直接对其进行解释(例如,走到办公桌前,坐下来讨论)。在这种情况下,如果缺少注释是一个问题,那么没有充分注释其代码的人将花费大量时间来解释他们的工作;并且(如果他们很聪明)将开始添加评论,以避免在所有这些解释上花费时间。例如,也许一个团队成员经验不足,可以向经验丰富的团队成员学习。在这里,不同的团队成员可以彼此“自动调整”。
#11 楼
这很大程度上是tdammers答案的扩展,但是要定期执行代码检查。让他(和其他开发人员)坐下来,仔细阅读他们的代码,或多或少地在上级和同级面前防御,这将使每个人都成为更好的编码人员,并在相对较短的时间内增加真正的价值时间。在短期内,它不会给开发人员任何借口,在审查时正确注释其代码。
编辑:我不确定为什么有人会拒绝我的建议-也许我理所当然地认为代码审查的好处是常识...请参阅此线程以了解实践的社区分析:
评论
当满屋子的人开始嘲笑您无法阅读的代码时,您将开始更好地进行编码和注释。 :)我是代码审查的大力提倡者。
–埃维克·詹姆斯(Evik James)
13年5月5日在16:15
让人们在其他同事面前嘲笑代码不是办法:-\
– Danny Tuppeny
13年2月5日在21:04
如果进行代码审查的人是在笑而不是在建设性,则他们需要像无法编写可读代码的开发人员一样多的培训。我发现开发人员通常缺乏建设性而不是贬义的批评。
–马丁·布朗
13年2月18日在13:10
#12 楼
考虑到通常对评论的极端看法,我犹豫不决。话虽如此...编写应该正确记录的(不可读的)代码?了解如何编写可维护和可读的代码需要花费时间,实践和经验。缺乏经验的程序员(以及可悲的是,许多经验丰富的程序员)经常遭受宜家效应(PDF)的困扰。那是因为他们构建了它并对其非常熟悉,并且他们确信代码不仅很棒,而且可读性强。
如果这个人是一个伟大的程序员,那么几乎不需要任何文档。但是,大多数程序员不是很好,他们的许多代码将在“可读性”部门中受苦。让平庸或发展中的程序员“解释他们的代码”是有用的,因为它迫使他们以更为批判的眼光来看他们的代码。
这是否意味着“记录”他们的代码?不必要。举例来说,过去我有一个类似的程序员遇到这个问题。我强迫他记录下来。不幸的是,他的文档和他的代码一样难以理解,并且没有添加任何内容。回想起来,代码回顾会更有用。不是他仅仅通过研究就知道的新东西。您应该要求他以最少的交互引导您完成他的代码。这也可以是一个单独的“文档”会话,他将在其中编写代码来进行解释。然后他应该获得关于更好方法的反馈。
顺便说一句...有时需要一些文档,无论代码的“可读性”如何。 API应该具有文档,极其技术性和复杂的操作应该具有文档,以帮助程序员理解所涉及的过程(通常超出了程序员的知识范围),并且诸如复杂的正则表达式之类的东西应该真正记录您要匹配的对象。
#13 楼
许多项目需要代码文档:接口文档,设计文档,...一些项目要求将此类文档放在代码注释中,并使用Doxygen或Sphinx或Javadoc之类的工具提取,以便代码文档保持更加一致。
这样,开发人员需要在代码中编写有用的注释,并且这项职责已集成到项目计划中。
评论
不,这样开发人员就需要写一些评论。它们的实用性随着编写它们的压力而降低,如果大力推行该政策,它们通常会降到零以下并进入有害活动区域(无效评论比没有评论更糟)。
– Jan Hudec
13年2月5日在8:25
@JanHudec-我同意你的看法。这就是为什么要设置一些控件的原因。自动生成可确保例如代码中的函数自变量与注释中的自变量相同。此外,只有一个PDF而不是源文件目录可以使文档被更多的人阅读(即更易于查看)。
–mouviciel
13年2月5日在8:40
好吧,不,不是。您将如何在.pdf中注意到该代码实际上做了一些与描述中所说的略有不同的事情?
– Jan Hudec
13年2月5日在8:45
也许我的观点受到我的领域,空间关键型软件的偏见,其中对软件的所有内容进行两次,三遍或四遍审查,控制,验证,测试。自动生成文档并不能消除不一致,但有助于减少不一致。
–mouviciel
13年5月5日在8:52
是的,您极有偏见。在像这样的领域中,在大多数单元测试中,对于QA而言已足够,记录每个最后的功能将浪费时间。
– Jan Hudec
13年2月5日在9:01
#14 楼
我要说明大多数答案和评论所暗示的内容:您可能需要在此处找出真正的问题,而不是尝试通过提出的解决方案来实现。在他的代码中;为什么?你说了一个道理;为什么这个原因对您如此重要?他更有动力去做别的事情。为什么?他会给出理由;为什么这个原因对他如此重要?重复此过程,直到达到真正引起冲突的水平,然后尝试在那里找到双方都可以接受的解决方案。我敢打赌,它与评论无关。#15 楼
如果您遵循良好的编码标准,则需要的注释最少。命名约定很重要。方法名称和变量名称应描述它们的作用。.
我的TL建议我使用较少的注释。他希望我的代码应该易于理解和自我描述。
简单的例子:
用于搜索模式的字符串类型的变量名
var str1:String="" //not uderstandable
var strSearchPattern:String="" //uderstandable
#16 楼
喜欢代码审查的答案,但是也许我的过程也会有所帮助。我喜欢注释,但是我几乎从不将注释第一次添加到代码中。也许这只是我的风格,但在开发过程中(重构,编写测试等),我会在同一段代码中碰到3到5次。关于一段代码,我尝试对其进行修复,以使其有意义。就像提取一个新对象一样。
我建议您鼓励小组中的每个人都“拥有”自己的代码对他人可读,这意味着每次有人问您有关您代码的问题时,您承诺进行更改-或更好地与该人结对,然后立即进行更改!您没有一个)-这样,每个人都对此达成了共识,然后将其放在墙上的某个地方,这样就不会对您有什么疑问了您已经同意这样做。
#17 楼
也许这个人需要对良好的编码纪律有所了解,以及为什么其他人能够理解他所编写的代码很重要。我已经在我的职业生涯中开发了一些非常糟糕的代码库,这些代码库的组织得太差,变量名太差,注释太差或不存在,以至于代码库损害了我的工作效率。您无法修复或改进您不了解的代码库,并且如果以对新手来说难以理解的方式编写代码库,那么他们将比实际工作花费更多的时间来理解它。
没有比苛刻的经历更好的老师了!
每个代码库中都有一些可怕的隐患,系统的某些部分没人愿意触摸,因为他们害怕破坏某些东西,或者因为编写代码的人而无法进行有意义的工作已经走了很久,并带了他们对代码的理解。如果该代码没有注释并且没有自我记录,那么只会使情况变得更糟。
我建议您找到类似的代码库,并给您麻烦的编码器责任。给他所有权,让他承担责任,让他学习编写无法维护的代码的真正痛苦,因为代码缺乏充分的文档记录或无法在短时间内理解。经过几个月的努力,我相信他会开始出现的。
#18 楼
给他一些没有注释的代码,并请他理解代码。可能是他那时了解适当评论的重要性。评论
我只是勉强避免使用-1按钮。我编写的大多数代码都很少注释。我认为我没有让人们抱怨它至少在过去的几年中是无法理解的。除极少数例外外,如果代码需要注释才能被理解,那么它就不需要注释,因此需要进行改进以提高清晰度。 (当然,您必须假定对语言的语法有基本的了解。在C ++中,不要仅仅为了避免使用reinterpret_cast <>()而是因为人们可能会感到困惑;在C#中,如果?是否满足您的需要,使用它;等等)
–用户
2013年2月5日在10:37
@MichaelKjörling:这可能在很大程度上取决于您正在编写的代码类型。如果您的代码依赖于某种语言或API的鲜为人知的特性,或者您以一种违反直觉的方式进行了某些操作,以避免出现需要您花费数小时才能发现的晦涩的错误,那么对以下内容进行评论会更有效(可能包括指向文章的链接),而不是尝试使有关此背景信息的代码“清晰”而不加注释。
– LarsH
2013年2月5日14:41
@MichaelKjörling:今天,我特别愿意这样说,因为在过去的一个月中,我一直在努力使用深层次的GIS API。 API的功能很复杂,并且没有非常详尽的文档。我们不断遇到惊喜,其中一些使我们一次回到过去。期望别人(或我在6个月内)必须重新发现这些块才能有效地使用我们的代码将浪费该人的时间。而且,这些秘密通常无法通过未加注释的“为清楚起见进行改进”来记录。
– LarsH
2013年2月5日14:48在
@LarsH这可能符合我在评论中提到的“极少数例外”之一。我不反对评论它实际上在哪里增加价值。但是,注释的数量并不是使代码易于阅读或难以阅读的原因。也就是说,使用API,我会更倾向于在其他地方记录这些怪癖。例如,在Wiki或类似形式中。也许还可以在每种用法旁边添加指向相关页面的链接。这样,只要代码无法按您初次尝试的预期运行,您就不必寻找其他使用API特定功能的地方。
–用户
13年2月6日在8:16
@MichaelKjörling:普遍同意。这些异常是否罕见,取决于您要为其编程的域以及必须使用的API。链接/引用适用于通常适用的注释,而不仅仅是适用于当前情况。没有人希望在代码本身中发表论文。
– LarsH
13年2月6日在15:01
#19 楼
该程序员是否进行一些代码维护。如果不是,那么他应该:检查您周围是否有任何不受欢迎的项目,并将其分配给他。可能很容易纠正。如果这种经历不能使他想要最新的信息,那么正确和有用的文档将一无所获。
评论
这种方法更容易使程序员退出,而不是以正确的方式培训他们。
–马丁·布朗
13年2月18日在13:11
#20 楼
在我过去的一个项目中,缺少数十条注释(算法,结果或一些基本的JavaDoc),因此我决定为他制作130个问题,每4天通过电子邮件通知每个问题。 3周后,他有280期,然后他决定写评论。#21 楼
注释只有一个目的,只有一个目的:为什么此代码执行此操作?应该删除。使代码变得混乱的无用注释比无用少,它们实际上是有害的。它们以绿色背景上的白色文本突出显示。确实会引起您的注意。
这是因为代码说明了正在执行的操作,而注释则说明了执行该操作的原因。我对此不够强调。
一个很好的注释示例: />
/* Must instantiate clsUser before trying to encrypt a password because the code to
encrypt passwords only uses strong encryption if that module is loaded. */
如果将注释用作代码的“节”:将猛mm方法切成较小的有用的命名函数,然后删除注释。
如果在说下一行的操作:使代码不言自明并删除注释。
如果将注释用作警告消息:请确保说出原因。
#22 楼
为了补充这里的答案,我可能会添加“如果您想正确地做就必须自己做。”演示您希望其他开发人员执行的操作。他们说表演比讲故事更有效。如果您可以证明高质量注释的好处,甚至可以指导其他开发人员(在他愿意的范围内),那么您可能会发现在代码注释采用方面取得了更大的成功。我不愿意做的琐事。然而,那些杂事恰好是我妻子的“小偷小摸”杂事……为了使她开心,必须做的杂事。反之亦然。我认为您可能不得不接受其他开发人员的优先级与您不同,并且不会在所有事情上都与您保持一致。我和我妻子发现的解决方案是,对于那些“小偷小摸”的琐事,我们只需要自己做,即使这意味着我们自己要做更多的工作。评论
我认为显示较干净的代码/将其代码重构为更具可读性显示出比将注释内容放入代码中更大的更改。
– Makoto
13年2月17日在17:15
谁能向我解释他们对我的想法不满意...?
–杜德利先生
13年5月14日下午2:30
#23 楼
简单:如果员工未发表评论,请告诉他在输入代码的同时按shift+alt+j
在每种方法中进行自动评论。请进行代码修订以避免这些问题。评论
“自动评论”?那就是所有这些“ i递增1”注释的来源吗?哪个IDE可以做到这一点(所以我可以避免使用它的工作)?
–用户
13年2月5日在12:14
我试图将其编辑成可读的格式,但是我不确定“ first”一词在其前还是后都应有逗号。在每种方法中,先发表评论还是先发表评论?
– TRiG
13年2月5日在15:31
评论
为了注释起见,注释并不能使代码更好。如果代码是可以理解的(包括为什么)而没有注释,则可以以其他方式注释。哦,是的,当某些代码的复杂性增加三倍以解决竞争状况或僵局时,请不要对此发表评论!让人们解决以下难题:为什么代码必须保持原样,以及如果进行实验性更改,为什么代码会以神秘的方式破坏。每个人都应该是并发的国际象棋大师...
@Kaz Sarcasm(我希望)不能很好地翻译为文本。
@deworde&artjom-是的,这很讽刺。不,它不会像可能的那样干净整洁,但这显然很讽刺。
遵循Dale Carnegie的原则,您应该尝试理解为什么他不想发表评论。.您提到他不想拖延该项目。能够理解代码,这将进一步延迟项目..这肯定会有所帮助..