在编码和维护期间写下笔记,思想,算法,决策是否正常/可以接受?[关闭]


22

有些人有这个问题,他们一言不发。写下他们的想法和决定是最有效的方法。

那么-在编码过程中在一些Notepad ++文件中写下我的想法和决定是否正常并且可以接受?

有时应该是可以接受的,例如在重新创建技术文档或对更复杂的算法进行推理时,但是有时可能很奇怪,例如当我在考虑设计选项并试图做出判断时。

这种做法对生产率的影响尚不清楚。从一方面来看,使用内在单词的推理可能比使用书面单词的推理更快。另一方面,更复杂的问题需要编写。此外,如果人们坚持使用更多的设计选项,那么在撰写决策时感觉会更好,因此鼓舞士气。


5
我也倾向于这样做,如果不这样做,我通常会后悔。稍后再回顾一些事情,以记住为什么要以某种方式做某件事,或者稍后在您不被隧道视线深深吸引时才能够做出决定,这真的很有帮助。当我忘记记下某些东西时,我通常会忘记原因,然后花更多的时间来追踪自己的脚步。
PseudoPsyche

21
我觉得我们缺少上下文的一部分了吗?这种观察是否围绕效率而提出的?通常,批评伴随着对根本原因的暗示,可能无关紧要。
Jim Rush

9
“注释和文档”需要记录到源代码中并加以保留。您可能会记下关于考虑设计选项的想法,但通常不会保留下来,因为这些东西以后很少会给您带来帮助(如果从源代码本身还不清楚,则可以保留有关该想法的结果的注释,但那不是你问的。如果您更喜欢电子表格,铅笔和纸质表格,或者如果您能全力以赴,则取决于您自己,只有其他人可以告诉您哪种方法最适合您。
布朗

4
……PS:我通常更喜欢铅笔和纸或白板来做这些事情,而且我想如果我想尽全力做到这一点,我将不会成为更好的程序员,这恰恰相反。
布朗

7
为什么不能接受?可以接受谁?
Paul D. Waite

Answers:


62

这不仅正常,而且是个好主意。

有句名言

“给我六个小时砍下一棵树,我将用头四个时间来削斧头”。

在编码之前花一些时间组织您的想法和计划工作,这是花费的时间。将这些想法记录在纸上将使您有时间思考您的计划,对其进行批判并以仅在您的脑海中很难完成的方式来组织它们。


8
这是一个很好的报价,尽管我会删除错误的出处。quoteinvestigator.com/tag/abraham-lincoln
Paul Draper

1
当然,这是正确的说法,而且引述很好,但据我所知,这个问题的重点不同。据我了解,OP对事先计划的重要性毫无疑问。他在问,写下这些想法/计划,还是仅仅将所有想法都保留在脑子里,是否更有效率。
布朗

2
估计一个小时的磨削绰绰有余。估计此任务最多需要3个小时,但闲暇时间花在了毫无准备的过度准备上。道德又是什么?;-)
史蒂夫·杰索普

26

是的,这完全可以接受并且是正常的。

重新访问代码时,记录决策过程通常很有价值,有助于确定为什么以某种方式编写代码。

如果足够简短,可以将这些注释作为注释直接包含在代码中。扩展注释通常作为外部技术设计文档的一部分保留。


4
我强烈建议不要在注释中包含有关考虑设计选项和试图做出判断的注释,因为注释永远不够“简短”。仅是思考过程的最终结果,但这与OP要求的完全不同。
布朗

3
我经常在讨论过程中发现自己“为什么要做出这个决定”。回到我的日常项目笔记以提供上下文,包括我们讨论的替代方案,这是非常有用的。我认为我的公司很好:根据《一切商店》的说法,杰夫·贝佐斯也是如此。
kdgregory

8
@DocBrown-有时最好包括一个原因,说明为什么您使用其他可能的方法/算法,以便将来的开发人员不会尝试替换您所做的事情
HorusKol,2016年

1
@HorusKol:当然,在极少数情况下,这是微不足道的常识。但这与“记录决策过程”完全不同。
布朗

1
@DocBrown是的,我认为没有人希望在其源代码中包含注释页面。:)
mcknz

20

这真是个好主意。直到它成为拖延的一种方式。

关键是平衡。我发现,如果我不投入自己的精力,而是在想法出现时抓住他们,我会最有生产力。

如果我的学习水平很低,但高层次的想法来了,我就记下来,然后再回头。

计划工作是一个好主意,但是除非您必须在观众面前交流或展示,否则最好的工具是笔和餐巾纸。抓住想法。不要浪费时间使它漂亮。


Markdown是记下这些笔记的另一种好方法。将您的手放在键盘上,因此对思维过程的干扰降到了最低。
RubberDuck

1
辞退编辑人员还是握笔和餐巾纸是更好的选择,这完全取决于您的个人打字和手写技能。对我来说,更好的解决方案显然是编辑器。
cmaster

9

在任何专业情况下,它不仅是“正常且可以接受的”,而且是强制性的。典型的开发周期由两个文档阶段组成,甚至没有开始任何编码:

  1. 功能需求文档:通常由业务分析师编写,指定要实现的功能。

  2. 详细设计文档:您正在谈论的内容差不多,只是更为正式,它指定了系统,算法等的功能分解(分解)。我的一些(非常)旧的在线,例如this

对于不太正式的文档,我110%同意之前关于嵌入式注释的评论。那是唯一的方法。一种或另一种方式,其他所有东西最终都会丢失。但是,整齐周到的内联注释是一项独立的编码技能,是通过努力和实践而开发的,就像其他任何技能一样。您可以在this上看到我的一些(很旧的)东西。这种风格可能会或可能不会吸引您。我建议您首先找到一些喜欢的风格良好的代码,然后在自己的代码中进行仿真。稍等片刻,根据需要调整它。


4

直接在版本控制系统的提交消息(SVN,git等)中放置此类信息的好地方。这样,您可以在同一位置查看更改及其原因。


1
这也使它们可搜索。您可以在命令行git和sourcetree中搜索提交消息,例如。如果您仅使用记事本,则很有可能永远不会再次打开这些文件,并且很难在不知道大量bash和编写脚本来搜索所有相关位置的情况下进行搜索。
HopefulHelpful

我尝试在我的commit语句以及带有提交链接的bug或功能请求中都这样做。我还会在代码中添加过时的内联注释,并说明更改代码的原因。这对于我们破旧不堪的代码库(在很大程度上未知注释)有很大帮助。
delliottg

不,这是另外一回事。提交消息应该描述所做的事情,而不是原因。为什么在文档代码注释,随附的文档和问题跟踪程序解决方案中使用。您不能在提交消息中放入五页的笔记和设计工作,也不应该这样做。
与莫妮卡(Monica)进行的轻度比赛

很好地将它放在版本控制系统中。更好的地方是内部纯文本文件。这些比提交消息更易于使用。
托尔比约恩Ravn的安德森

2

除了其他好的答案之外,我还要补充一点,就是我经常写下自己对要做的事情的想法。

明确表达我要做什么,可以帮助我认识到不一定成立的假设,假设和/或要求。

这样就暗示了替代方案,然后我可以依次考虑各种替代方案。如果我想到其他事情,那篇文章有助于挽救我的位置。

我会快速记录一下以探索呼吸和深度,因此它可以递归工作,帮助我详细阐述,导航和评估解决方案树,进行备份,探索,发现,实现和决定。


1

写下任何可以节省您/(新)团队成员时间的东西就是花时间。只要确保这是某人以后可能需要的东西就可以了,除非这是一个真正的长期项目,否则不要想太多。

也不应该花费任何时间。如果您花时间思考,您可以将您的想法写下来,以1比1写下(只要它们对某人有用)。

真正的问题可能是过度思考了您所写的内容。仅仅因为您在写作并不意味着您必须遵守某些现有格式,也不需要一路创建完整的文档。

如果您的选择是不写下任何东西,而只是在记事本上写下非正式的笔记,则只需写下非正式的笔记。


1

您说:“有些人有这个问题,他们一言不发就无法思考。写下自己的想法和决定是最有效的方法。”

如果写下您的想法和决定是最有效的进行方式,为什么以最有效的方式进行处理是不正常且不可接受的?您做最适合您的事情。这可能不是对其他人最有效的方法。在这种情况下,您不会让别人告诉您什么对您最有利,您也不会告诉他们什么对他们最有利。每个人都为他们做最好的事。


1

人类一次只能将大约七个“东西”抱在脑海中。这就是七位数电话号码的原因。为了使程序员高效地工作,他们必须找到某种系统以从内存中分担事情,并在需要时快速检索它。做笔记是一种显而易见的直接方式,但是从事任何中等复杂性工作的每个人都必须以某种方式做到这一点。当您将程序与某人配对时,请务必寻找他们的方法。

一种常见的方法是测试驱动的开发。在这种方法中,您编写一个失败的测试,编写足够的代码以使该失败的测试通过,然后重构代码以使其看起来更好,同时保持所有现有测试通过。这种方法可以使您的所有“注释”在测试中保持编码。人们可以非常快速地以这种方式工作,而无需记笔记,因为他们只专注于下一个测试。

另一种常见的方法是将注释以伪代码注释或存根的形式写在代码中,然后逐步将其替换为真实的东西。这就是我通常编写算法的方式。我的第一稿只是带有伪代码的主要功能,然后逐步将其填充到越来越深的抽象层次中。

使用任何适合您的方法都不会感到不好,但是请尝试注意“高效”同事正在使用的方法。它们具有与您相同的人为限制。


1
TDD是记笔记的练习吗?我不这么认为。
罗伯特·哈维
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.