Skip to content

Commit

Permalink
WHAT: essays
Browse files Browse the repository at this point in the history
WHY:

* XXXXX

HOW:

* NOTHING TO SAY
  • Loading branch information
ecmadao committed Jun 22, 2018
1 parent f0e9303 commit b580df7
Showing 1 changed file with 247 additions and 0 deletions.
247 changes: 247 additions & 0 deletions Notes/杂文/《程序员的思维修炼》碎片化记录.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,247 @@
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*

- [《程序员的思维修炼》碎片化记录](#%E7%A8%8B%E5%BA%8F%E5%91%98%E7%9A%84%E6%80%9D%E7%BB%B4%E4%BF%AE%E7%82%BC%E7%A2%8E%E7%89%87%E5%8C%96%E8%AE%B0%E5%BD%95)

<!-- END doctoc generated TOC please keep comment here to allow auto update -->

# 《程序员的思维修炼》碎片化记录

- 当你从以上各个领域发现事物虽有不同的表象却有着相通之处,这其实是一个信号。在如此众多的不同情境下却拥有类似的思想,那么必然存在某些根本和重要的东西。

德雷福斯模型的5个阶段:

1. 新手
2. 高级新手
3. 胜任者
4. 精通者
5. 专家

关于新手:

- 由定义可知,新手在该技能领域经验很少或者根本没有经验。这里提到的经验,指的是通过实施这项技术促进了思维的改变。举个反例,可能一个开发人员声称拥有十年的经验,但实际上只是一年的经验重复了九次,那么这就不算是经验。

关于精通者:

- 精通水平的从业者需要全局思维。他们将围绕这个技术,寻找并想了解更大的概念框架。对于过于简单化的信息,他们会非常沮丧。

- 在德雷福斯模型中,处于精通水平的从业人员有一项重大突破: 他们能够纠正以往不好的工作表现。他们会反思以前是如何做的,并修改其做法,期望下一次表现得更好。到这个阶段,自我改进才会出现。同时,他们会学习他人的经验。作为精通者,他能够阅读案例研究,倾听有关失败项目的流言蜚语,观察别人怎么做,从故事中认真学习,即使他没有亲自参与。

- 敏捷开发依赖反馈。敏捷开发就是在一个高度协作的环境中,不断地使用反馈进行自我调节和完善

关于专家:

- 不知道自己不知道:当你在某一领域不是很擅长时,你更可能认为自己是这个领域的专家。缺少准确的自我评估被称为二阶不胜任,即不知道自己不知道。新手尽管能力差但是信心十足,而专家在情况异常时会变得愈发谨慎。专家会更多地自我怀疑。“无知往往来自于自信而不是知识”,一旦真正称为专家,才会痛苦地意识到自己知道的多么少。

- 相反,我们也往往喜欢使用新手,把他们扔在发展水平等级的最底层,让他们觉得未来遥不可及。在这种情况下你可能会说,我们正在试图赛羊。同样,这不是一个使用新手的有效方法。他们需要“被驾驭”,也就是说,明确方向,快速成功,等等。敏捷开发是非常有效的工具,但它不适用于一个完全由新手和高级新手组成的团队。

- 新手使用规则,专家使用直觉

- 从依赖规则向依赖直觉转变。观念的改变,问题已不再是一个相关度等同的所有单元的集合体,而是一个完整和独特的整体,其中只有某些单元是相关的。最后,从问题的旁观者转变为问题涉及的系统本身的一部分。

---

积极的实践需要四个条件:

1. 一个明确定义的任务
2. 任务需要有适当难度,有挑战但可行
3. 任务环境可以提供大量反馈,以便你采取行动
4. 提供重复犯错和纠正错误的机会

学习的三个阶段:

1. 模仿
2. 吸收
3. 创新

---

没有银弹。警惕工具陷阱:

- 规则无法告诉你在某种情况下应该采取的最合适行为或者正确路线。它们充其量也就是“自行车的辅助轮”——可以帮助启动,但是却限制并大大妨碍了以后的表现。对形式模型的过度依赖往往会鼓励羊群行为(从众心理)而贬低个人创造力。

- 形式方法有其他优点和用途,但是在实现这些目标时不起作用。虽然它可能有助于为较低技能水平的人建立基准规则,但是判断力是无法取代的。随着判断力增强,对于规则的依赖必须放宽,伴随着严格的制度执行。

- 如果需要创造力、直觉或者独创能力,避免使用形式方法。

- 不要屈服于工具或者模型的虚假权威。没有什么可以替代思考。

---

L 脑和 R 脑:

- R 型对直觉、问题解决和创造性非常重要。L 型让你细致工作并实现目标。L 脑可以按照关联、依序推演问题和思考,经常会得出收敛性结论。而 R 型绝对是注重整体的,总是希望一次就能看到事物整体,感知整体的模式和结构。它具有空间性,喜欢弄清楚事物之间的空间关系,部分如何形成整体。最重要的是,它是直觉性的、跳越性的思维,通常基于不完整的模式、直觉、感觉或者视觉影像来做判断。

- 每个人——不论教育背景、经济状况如何,不论日常工作是什么,不论年龄大小——都有好想法。但是在这么多拥有好想法的人里面,只有少数人在努力跟踪它们。而其中,又只有更少数人会努力付诸行动。随后,仅有少之又少的人有能力将好想法成功实现。要想达到金字塔的最顶层,必须跟踪好想法,这是最基本的要求。

- 增加感官体验来促进大脑的使用。在学习新事物时,可以让 R 型打头阵,先从整体去认知和感触,创建各部分的联系,然后转到 L 型去归纳总结,将知识“生产”出来。

- 思维的两种方式天生就是一起工作的。例如,首先运用类比方法来解决关联性、理论性的问题,然后运用分析法来验证你的想法。不过请记住,这不是单向旅途,你需要回到 R 型以保持思维的流畅。R 型是源头,你要给它自由、 无限的空间。

- 如果想法过早地受到束缚,那么创造力就会被扼杀。如果你还没有全局的概念就试图记忆细节,那么学习就会陷入僵局。不要太着急。解决问题时,学会轻松面对不确定的事情。进行创造时,坦然面对荒谬和不切实际的东西。学习过程中,不要太迫于学会和记忆,首先只是适应它。试着先理解其意思,掌握主旨思想。

- 很多时候你难以看清摆在面前的事情,因为你已经习惯于通过某种特定的方式来看待模式。我们往往会遵循老套子,即陷入特定的思维模式和习惯的思维方式。努力从完全不同的角度看待问题,这是获取洞察力的诀窍。

- 你可以在调试的时候使用这种技术: 不要努力预防难以发现的 bug,努力找到三四种会主动引起 bug 的方式。用户界面设计时或许也可以尝试同样的方法: 不要努力去想完美的格式或者流程,先做一个最差的设计方案。这将帮助你意识到什么是真正重要的。

- 大部分问题都有多个解决方案或者多个“正确答案”。唯一正确的答案可能只在小学算术里才有。担心解决方案没有逻辑性?大部分大脑处理过程也并非合乎逻辑性,但是都没有出错。有想法的“角色扮演”也是一种最强大的工具。有想法却不受目的引导的角色扮演会帮助你建立联系、发现关系和获取洞察力。这有助于你改变思考角度。

- 错误是一种潜在的提示

---

认知偏见:

1. 思维定势
2. 基本归因错误:我们倾向于把别人的行为归因于他们的个性,而不去考虑行为发生时的情境。
3. 自私:可能是一种个人防御机制导致的
4. 认可上的偏见:每一个人都根据自己的成见和喜好原则来选择相应的事实,即只看见自己想看的
5. 曝光效应:我们往往只因为非常熟悉某些事物而对它有所偏爱。
6. 霍桑效应:人们在知道自己正被审视时,往往会改变自己的行为。
7. 虚假记忆:大脑很容易把想象的事件和真实的记忆混淆。我们易于受到暗示的影响
8. 名词谬论:符号约简谬论的一种形式,以为给事物贴上标签就意味着能够解释或者理解它。但是标签只是标签,单靠命名并不会带来任何有益的理解力。
9. 符号约简谬论:L 型非常乐于提供一个快速的符号来表示一个复杂的对象或者系统,这至少丢失了细节,有时甚至是事物的真相。

- 当你激烈地支持或者赞成一个观点时请记住这一点。你提出的论据是逻辑性的,还是情感作怪,或者只是因为熟悉?在特定的情境中论据成立吗?你是否真的考虑过别人的看法?旁观者清,所以你需要从正反两个方面看待问题。

- 要想避免你所处时代的特有偏见,最好的方法是保持多样性。**如果你和你的团队思考问题方式相似,你可能会认为你们的集体观点是唯一正确的。其实不是。只是因为你珍视自己的方法,你的个人主义或者你的集体主义,并不意味着年轻一代或者年长一代就会认同你的观点,也不意味着这个观点在那种情境下就是正确的答案。**

- 你可能从心底觉得某一个设计方案或者算法是正确的,其他建议都不可行。这可能是你的专家级直觉,也可能只是一种认知偏见之类的错误。你需要获得反馈:建立原型,运行一些单元测试,设立一些基准。只要能证明你的想法不错,无论需要做什么,你都应该去做,因为你的直觉可能会出错

- *世界上有三种谎言:谎言、该死的谎言、统计数据*

- 如果你认为自己已经明确了一些事情,那么试着解释一下它的反面。这有助于避免之前提到的表面上的谬论。如果你所拥有的证据只是一个标签,那么不论从哪个方面来讲,都难以确定其相反面(当然,另一个标签不算数)。将行为、意见、理论和它们的对立面进行详细的比照。这种措施强制你从更加批判和细致的角度反思你的观点。

- 为了避免一厢情愿、盲目乐观的想法,记住任何一个决定都是一种权衡。不是没有免费的午餐。凡事总有两面性,仔细权衡——积极和消极的两面——有助于确保你更全面地评估形势。

---

关于教育和学习:

1. 学习不是强加于你的,而是需要你主动做的事情
2. 仅仅掌握知识,而不去实践,没有用
3. 随机的方法,没有目标和反馈,往往会导致随机的结果

- 教育(Education)来自于拉丁文 educare,字面意思是“被引出”,即引导出某样东西。我发现一件非常有趣的事情,当我们想到教育时,通常并不考虑它这个词源的含义——从学习者那里引导出一些东西。相反,更常见的看法是把教育当作学习者被动接受的事情——灌输,而不是引导。这种模型在公司培训中尤其流行,称之为羊浸式培训。

用 SMART 法制定学习目标:

- Specific:具体的
- Measurable:可度量的
- Achevable:可实现的
- Relevant:相关的
- Time-boxed:时间可控的

- 稳扎稳打。采取循序渐进、比较细小的里程碑。当实现它们后,你会更有动力去实现下一个里程碑。

具体的:

- 一个目标任务应该是具体的,达到一个实际的、可描述的结果

可度量的:

- 为了努力实现目标任务,不管采用什么方法,你必须能够度量它。可度量的与具体的相辅相成。很难度量笼统抽象的事物,但是很容易度量具体和详细的事物,只要使用确切的数字即可。如果你认为无法度量自己的目标任务,那么很可能它还不够具体。度量你的目标任务,但是要采取增量进步的方法。

可实现的:

- 确定目标是否合理(在指定资源、指定情景、指定时间等条件下),让目标可以被完成

相关的:

- 这个目标与你有关吗——对你重要吗?你对此有热情吗?是在你控制之下的事情吗?真正的热情是完成目标的主要动力

时间可控的:

- 这可能是目标最重要的一个特性。这意味着你需要设定一个最后期限。没有期限,目标会逐步衰退,永远被每天更紧急的事情所排挤。这样它永远都不会实现。

---

关于制定计划:

- 制定计划是实现任何目标的一种非常有效的步骤。我们大多数人常常陷入一种默认的学习日程表:等到有空时再花时间学习一门新语言或者新函数库。不幸的是,把你的学习活动流放到“空闲时间”去,这就等同于失败。很快你会发现,事实上你没有任何“空闲” 时间。时间,就像壁橱空间或者磁盘空间,会很快被填满。“为......创造时间”的说法有点用词不当,时间是无法创造和销毁的。时间只能分配。主动安排你的学习,分配合适的时间,聪明地使用时间,你可以更具效率。

增强学习:

1. 主动阅读和总结书面材料的更好方式
2. 使用思维导图探索和发现模式和关系
3. 以教代学

使用 SQ3R 法主动阅读:

1. 调查(Survey):扫描目录和每章总结,得出总体看法。
2. 问题(Question):记录所有问题。
3. 阅读(Read):阅读全部内容。
4. 复述(Recite):总结,做笔记,用自己的话来描述。
5. 回顾(Review):重读,扩展笔记,与同事讨论。

- 首先,**带着问题审视你要看的书**。看一看目录、各章介绍和总结,以及作者留给你的其他标志性内容。你需要在深入细节之前得到一个总体印象。

- 接下来,**写下你想要弄明白的所有问题**。这项技术如何解决这个问题?我是要学习如何使用这项技术吗?或者这项技术实际是指向另一个源头吗?把各章节的标题改写成问题,这些都是你期望这本书回答的问题。

- 阅读这本书的全部内容了。在困难的部分放慢速度,如果内容不是很清楚就重新阅读。

- 随着阅读深入,复述、回想和使用你自己的语言改写书本最重要的部分。要点是什么?对想法做一些初步的记录。创造一些缩写来帮助你记忆等。真正感受这些信息,利用你的 R 型、通感构建等等。

- 最后,回顾这本书。如有必要,重新阅读一些部分,当你再次发现一些有趣的内容时,可以扩展笔记

- **学习某项事物的最简单和有效的方法是尝试教别人。**

- 真正的学习——对你有用的学习——来自实践和认知,而不是外部的教学活动或者死记硬背。他们的方法称为构造主义:我们通过构造而学习,而不是学习来构造。

---

如何解决问题?

1. 先自我提问:

- 未知量是什么?
- 已知量是什么?
- 条件是什么?

2. 制定计划

- 努力回想用于相同或类似未知量的常见问题
- 解决一个相关的或者更简单的问题,放宽限制,或者使用已知量的子集
- 所有已知量和条件都使用了吗?如果没有,为什么?
- 尝试重新叙述这个问题
- 尝试从未知量推到已知量

从错误中学习:

- “不作为”是敌人,但“错误”不是

- 在采取纠正行动之前完全知道“这是什么”对于调试非常重要。太多程序员往往在没有完全明白真正的错误是什么之前就着急修正它。匆忙地作出判断或者过早地进行修补。你需要首先完全明白系统的原理,然后再判断哪部分错了,最后提供解决方案。也就说,不要动手做,而是要袖手旁观。

- 下一次面对困难局面时,请记住:“尝试会失败,认知会弥补。”停下来,首先完全弄明白问题在哪里。为失败做计划。要知道,如果犯了错误,也没关系。看看这是不是有助于减轻压力和提高表现。

-*不断积累的经验会逐步改变你的观点,你会发现自己从新知识的角度重新诠释过去的经验,并且增强了思维模型*。记忆的每一次读取都是一种写入。记忆不是固若金汤的,逐步增长的专业知识会渐渐添加到你要使用的过滤器和匹配模型中。直觉就是这样增长的:你有越来越多的模型来借鉴和应用,也有越来越多只可意会的知识来帮你确定要搜索什么,以及何时搜索。换句话说,你开始感受到专家行为的初级阶段。

---

控制力

- 你可能常常对自己说:“我很想去做,但我没有时间。”或工作中出现了新任务,而你认为自己只是苦于没有足够的时间来处理它。时间不是真正的问题。正如在前面所指出的,时间是你自己分配的。并不是我们没有时间了,而是我们注意力不够。与其说你没有时间,不如更准确地说你没有带宽。当你的带宽——你的注意力资源——过载时你将会错过某些事情。你无法学习,无法适当地开展工作,你的家人也许会开始认为你得了脑瘤或其他疾病。

有效地组织和处理任务:

1. 仅扫描输入队列一次
2. 顺序地处理每组工作:一旦你选择一组工作,就要*持续进行,避免情境切换*。正如我们前面看到的,切换到另一个工作将破坏你的精神堆栈,当你返 回到之前的工作时会损失更多的时间。
3. 不要在头脑中保留任务清单

- 不是每天都是富有成效的一天。如果事情变得混乱,接受事实并意识到自己不会进入最佳状态,这样可能更有效。首先处理紧急状况。

如何才能保持注意力集中:

- 最重要的是自我意识——记住你需要集中注意力做什么
- 学会安抚喋喋不休的 L 型思维
- 主动在前进中思考和增强思想,即使是不成熟的
- 明确情境切换的昂贵代价,尽可能地避免

---

- 对于专家来说最致命的弱点是像专家一样行动。一旦你相信自己的专业水平,你就会对其他的可能性视而不见。你停止了好奇心。你可能开始抵制所属领域的改变,担心在你花费了很多努力才得以精通的主题上失去权威。你自己的判断和看法不再支持你,而是囚禁你。

- 要总是保持一个新手的头脑。你需要像小孩一样拥有无穷的好奇心,充满问题和惊讶。可能这种新编程语言真的很酷。或者另一种更新的语言是这样。或许我可以从这门新的面向对象的操作系统中学到知识,即使我从未准备用它。

- 处理学习方面的事情,不要先入为主,不要存在事先的判断或者固定的看法。要像小孩子一样看待事物的真实面貌。

0 comments on commit b580df7

Please sign in to comment.