程序员会在开发过程中忘记自己写过的细节么？
题主没有什么大项目的开发经验，但是最近在临摹（也就是看懂了别人的代码然后用脑子里残存的思路重写一遍代码）别人的项目的时候发现自己会写着写着忘记自己之前一些功能是怎么实现的。诚然项目不是自己的，需求分析也不是自己从头到尾做的，实现的思路上也会有很多直接照搬的时候，但是这种写了没两周就已经闭上眼睛想不起来很多实现过程的细节的现象，是将来会经常面对的问题么？软件开发的过程中需要经常的回顾自己的代码来保持自己对自己写了什么的印象，以确保前后一致性么？或者说更重要的提高代码质量保证自己留给自己的功能接口都能足够自明而不需要在乎以前考虑的细节问题呢？
当然会了，不但会，而且经常忘记。所以这也是注释的重要性。你可以看看有注释和没注释的代码差别，前者读起来很轻松，后者根本不想看对吧。举一个python的代码注释，拿class类来讲，援引google开发文档下文所指的函数,包括函数,方法, 以及生成器.一个函数必须要有文档字符串, 除非它满足以下条件:外部不可见非常短小简单明了文档字符串应该包含函数做什么, 以及输入和输出的详细描述.通常, 不应该描述”怎么做”, 除非是一些复杂的算法. 文档字符串应该提供足够的信息, 当别人编写代码调用该函数时, 他不需要看一行代码,只要看文档字符串就可以了. 对于复杂的代码, 在代码旁边加注释会比使用文档字符串更有意义. 覆盖基类的子类方法应有一个类似 See base class的简单注释来指引读者到基类方法的文档注释.若重载的子类方法和基类方法有很大不同,那么注释中应该指明这些信息.关于函数的几个方面应该在特定的小节中进行描述记录，这几个方面如下文所述. 每节应该以一个标题行开始. 标题行以冒号结尾. 除标题行外, 节的其他内容应被缩进2个空格.Args:列出每个参数的名字,并在名字后使用一个冒号和一个空格, 分隔对该参数的描述.如果描述太长超过了单行80字符,使用2或者4个空格的悬挂缩进(与文件其他部分保持一致).描述应该包括所需的类型和含义. 如果一个函数接受*foo(可变长度参数列表)或者**bar (任意关键字参数),应该详细列出*foo和**bar.Returns: (或者 Yields: 用于生成器)描述返回值的类型和语义. 如果函数返回None,这一部分可以省略.Raises:列出与接口有关的所有异常.def fetch_smalltable_rows(table_handle:smalltable.Table, keys: Sequence[Union[bytes, str]], require_all_keys: bool =False, ) -> Mapping[bytes, Tuple[str]]: """Fetches rows from a Smalltable.Retrieves rows pertaining to the given keys from the Table instancerepresented by table_handle. String keys will be UTF-8 encoded. Args:table_handle: An open smalltable.Table instance. keys: A sequence of stringsrepresenting the key of each table row to fetch. String keys will be UTF-8encoded. require_all_keys: Optional; If require_all_keys is True only rowswith values set for all keys will be returned. Returns: A dict mapping keys tothe corresponding table row data fetched. Each row is represented as a tupleof strings. For example: {b'Serak': ('Rigel VII', 'Preparer'), b'Zim': ('Irk','Invader'), b'Lrrr': ('Omicron Persei 8', 'Emperor')} Returned keys are alwaysbytes. If a key from the keys argument is missing from the dictionary, thenthat row was not found in the table (and require_all_keys must have beenFalse). Raises: IOError: An error occurred accessing the smalltable."""更多语言请看：C++:8. 注释 - Google 开源项目风格指南JS:Javascript 风格指南 - 内容目录