程序员超强大脑_【荷】费莉安·赫尔曼斯_AZW3_MOBI_EPUB_PDF_电子书(无页码)_【荷】费莉安·赫尔曼斯
内容节选
第5章深入理解代码 内容提要 介绍程序中不同的变量角色 比较文本结构知识(了解代码使用的语法概念)与计划知识(理解代码编写者的意图) 比较阅读和学习自然语言与阅读和学习代码 探讨适用于深入理解代码的不同策略 前几章讨论了利用抽认卡和反复练习来学习编程语法,还介绍了通过圈出变量及其关系来尽快熟悉新代码。虽然掌握语法并了解变量之间的关系对于理解代码至关重要,但其他深层因素也会影响代码思考。 遇到一段不熟悉的代码时,程序员可能很难判断代码的作用。用第4章介绍的认知术语来说,阅读陌生的代码会显著增加大脑的认知负荷。而学习新的语法和编程概念并重构代码可以大幅减轻认知负荷。 在充分了解代码的作用后,接下来需要进一步思考当前的代码。代码采用哪种方式编写?可以在哪些位置添加新功能?是否还有其他设计方案? 你或许还记得第3章讨论过的图式,也就是记忆在大脑中的组织方式。记忆不是孤立存储的,它们彼此关联。推理代码时可以利用这些联系,因为长时记忆和工作记忆存储的信息有助于进行代码分块,从而提高代码思考的效率。 本章聚焦于代码思考,旨在剖析代码的深层含义。我们将给出深入思考代码的3种策略,包括如何推断代码编写者的理念、思路和决策。本章首先介绍有助于程序员推理代码的一种框架,然后讨论不同层次的理解和一些更高级的技巧,最后剖析如何运用阅读自然语言的策略来阅读代码。近年来的研究表明,阅读代码所需的技能与阅读自然语言所用的技能密切相关,这意味着程序员可以从研究如何阅读自然语言中得到很大启发,从而提高自己的代码理解能力。 5.1 变量角色框架 毫无疑问,变量在代码推理中处于主导地位,了解变量包含哪些信息对于分析代码和修改代码至关重要。如果不清楚某个变量应该承担的任务,那么思考代码将变得举步维艰。正因为如此,含义明确的变量名堪称程序的“指路明灯”,能帮助程序员更好地理解正在阅读的代码。 东芬兰大学教授Jorma Sajaniemi指出,变量之所以难以理解,是因为大多数程序员的长时记忆没有建立起能够关联变量的有效图式。Sajaniemi在研究程序员喜欢使用的变量名后发现,这些变量名包含的信息不是过于笼统(例如“variable”或“integer”),就是过于具体(例如“number_of_customers”)。其实,既不太笼统也不太具体的变量名对程序员更有帮助。有鉴于此,Sajaniemi决定设计变量角色框架(roles of variables framework)。变量的角色描述了变量在程序中承担的任务。 5.1.1 变量不同,承担的任务也不同 我们以下面这个Python程序为例讨论变量的不同角色,其中prime_factors(n)函数的作用是根据指定条件返回质因数的个数。upperbound = int(input('Upper bound?'))max_prime_factors = 0for counter in range(upperbound): factors = prime_factors(counter) if factors > max_prime_factors: max_prime_factors = factors 这段程序包括4个变量:upperbound、counter、factors和max_prime_factors。但如果我们的认识仅仅停留在“该程序包括4个变量”这种相当抽象的层面,那么并不能给理解程序带来太大帮助。变量名也许可以提供一些线索,但无法解决所有问题。例如,“counter”相当宽泛,仅从变量名很难判断这个变量在程序中是否会发生变化。这种情况下,研究4个变量的角色可能有所帮助。 上述程序将用户输入的值存储在变量upperbound中,然后执行for循环,直至达到变量counter指定的上界。变量factors暂时保存counter当前值的质因数个数,变量max_prime_factors则存储循环执行过程中找到的最大质因数。 变量角色框架可以反映出上述4个变量在行为方面的差异:upperbound的角色是固定值,负责存储用户最新输入的上界值;counter的角色是步进器,负责在循环中进行迭代;max_prime_factors的角色是最佳持有器,负责存储搜索过程中的最大值;factors的角色同样是最近持有器,负责存储当前的质因数个数。5.1.2节将详细解释这些角色以及框架中的其他角色。 5.1.2 涵盖大多数变量的11种角色 从5.1.1节讨论的Python程序可以看到,变量角色很常见,程序中经常能看到步进器变量或最佳持有器变量。实际上,Sajaniemi认为只需要11种角色就能描述大多数变量。 固定值(fixed-value):如果变量的值在初始化操作后不会发生变化,那么变量的角色就是固定值。它既可以是常量......
- 信息
- 本书讨论的3种认知过程一览
- 序言
- 前言
- 致谢
- 关于本书
- 关于封面插图
- 第一部分 代码阅读
- 第1章 剖析程序设计之惑
- 第2章 快速阅读代码
- 第3章 快速学习编程语法
- 第4章 阅读复杂的代码
- 第二部分 代码思考
- 第5章 深入理解代码
- 第6章 更好地解决编程问题
- 第7章 迷思概念:错误的思维方式
- 第三部分 代码编写
- 第8章 提高命名的质量
- 第9章 避免低质量代码和认知负荷:两种框架
- 第10章 提高解决复杂问题的能力
- 第四部分 代码协作
- 第11章 编程活动和任务
- 第12章 设计和改进大型系统
- 第13章 对新程序员进行适岗培训
- 写在最后
- 看完了