《程序员的思维修炼》读后感

说在最前面
最近又看了一遍《程序员的思维修炼》这本书,好书的确是用来回味的,然而在回味的过程中我才发现,书中的内容我竟然已大半没有印象,更何况书中存在那么多的实践项目好像什么样的好习惯终究都没有养成,突然背后一阵凉汗,因为我不知道我看其他的书是不是也是这样的,看完就忘又有什么用呢?于是对自己的看书的质量又有了新的认识也有了新的目标。
当然,幸运的是,当我在探查究竟如何读书时,发现此书的作者向我介绍了一种SQ3R的读书方式,而我又联想到SQ3R结合思维导图或许又是更佳的方法时喜出望外,当然如果不去实践说多了都没用啊,所以决定近期做一个这种实践的分享。

接下来介绍一下这本书,从书名中可以看出是一本训练思维的书,而其实也是一本认识思维和如何优化思维的书,作者Andy是当年提出”敏捷宣言”的17人之一,除了是一名非常牛逼的开发者之外也是一名作家,在软件开发领域有着很重要的影响。这本书主要向我们介绍了从新手到专家各个阶段的特点及升级方法论,同时以科学论证的德雷福斯模型说明了人类的大脑思维的组成,很有意思的是作者以一些术语比如CPU、总线等形象的介绍了L型左脑和R型右脑不同的工作模式,以及如何将两者的效率最大化。在此基础上,如果你是一名程序员,在阅读本书的后半段后,你无法解释的经历会很容易的得到解释,而且还不得不服,呵呵。当然除了这些理论性但不是趣味的内容外,还包含着一些实践章节,不妨读来试试。

按照惯例,还是把握自己认为不错的段落收藏起来。


当我们痛苦地追逐时尚的新鲜玩意时,更需放慢脚步,冷静地修炼自己的”内功”!

是的,记得一位长者问我你看过凌晨四点的北京吗?我说没有,他又问你知道我多久没写过代码了吗?我说不知道,他说:”不记得了,但是如今市面上出现了好多技术,我只要看看源码就知道它的实现方法”。巩固好自己的基础修炼好自己的内功,只要计算机科学还是基于冯诺依曼体系的,就不怕自己掉队。


我们曾经让宇宙飞船偏离了轨道,撞向遥远的星球;让昂贵的火箭爆炸,蒙受无法弥补的实验损失;给消费者寄去所要零美元的催款信,搞得人家莫名其妙;时不时还让航空旅客滞留在机场。


软件并不是在集成开发环境(IDE)或其他工具上设计出来的,它是在我们的大脑中想象和创造出来的。


当前最重要的两项技能就是:沟通能力和学习和思考能力。

由于现实世界的相关性,小的事物可能会有意想不到的巨大影响。现实世界事物都是息息相关的,尤其不要小看一些微不足道的小事更能够体现一个人的素质,这一点也很类似于蝴蝶效应。


冥想与大声说出你的想法,或者在纸上写一句话与计算机编辑器中输入这句话。抽象地讲,这些事情应当是完全等价的。然而事实并非如此。这些活动使用了人脑中完全不同的思维路径,这些思维路径深受人类思想和思考方式的影响。

比如在这里,不同的行为使用不同的思维,有可能会是L型的线性思维,有可能是R型的抽象思维。


德雷福斯技能获取模型,概括了从新手到专家必须经历的5个阶段。新手->高级新手->胜任者->精通者->专家。

作者以德雷福斯模型为基础向我们介绍了一个人从新手到专家的过程,以及各自阶段的特点。
1.新手需要一个执行列表,也就是先做什么,然后再做什么。
2.高级新手能够阅读并使用一些相关的文档,并能够按照文档实现想要的功能。
3.胜任者已经能够建立问题的概念模型,能够独立解决问题,并开始考虑如何解决新的问题。
4.精通者已经有了重大突破,能够纠正以往不好的工作表现,他们会反思以前是如何做的,并修改起做法,期望下一次表现得更好,或者叫做自我改进。处于精通水平的人员知道什么地方有可能出错,他们具有经验和判断力。
5.专家与众不同之处是他们使用直觉和在情境中识别模式的能力。这不是说新手没有任何直觉或者胜任者根本不能识别模式,但是专家的直觉和识别模式的能力已经超越了他们显性的知识。

模仿 吸收 创新

这同样也是从新手到专家的一段旅程。

我只是执行命令。

作为一个程序员,如果只是执行命令,那么可能就永远会停留在高级新手级别了。在执行命令的基础上要更多的关注到产品上,提出驳回或者改进意见,这也意味着承担责任,改变工作的态度,提高自己的技能。


对于“破门而入”的例子,只是说“我想打开这个锁住的门”是完全不够的。情境是什么?为什么需要打开这扇门?可以使用斧子、锯子或者开锁工具吗?

这很容易会映射到学习一门新技术的时候,欠缺思考有可能会浪费时间。比如这门语言有什么特点? 什么东西促使我们去学习这门语言? 如果学习的话该采取什么样的策略?


理想情况下,你希望团队里混合各种层次技能水平:拥有一个全部是专家的团队也存在它的难处。当所有人在考虑森林的时候,你也需要一些人来关注一棵棵大树。


比如一个团队中会有架构师,会有高工,会有码农,是的,我是按照技术级别来排列的。架构师具有考虑系统全局的思维,而高工或者码农会更加专注在系统的局部,这样才能保证项目稳定的前行。


大脑的配置为双CPU,单主机总线设计。1号CPU可能你最熟悉:它主要负责线性、逻辑思维和语言处理。它就像传统的冯诺依曼式的CPU,按步就班地处理指令。2号CPU则有很大不同。不再是采用线性、按步执行的方式,而更像是一个神奇的数字信号处理器。它就是大脑中的Google。

你是否有这样的经历,一个棘手问题(bug、设计问题或一个遗忘很久的乐队名字)的答案突然灵光闪现,可能在你洗澡的时候?或者在某一天你没有思考这个问题的时候?这是因为R型是异步的。它作为后台进程运行,处理过去的输入,努力挖掘你需要的信息。


这很容易令人联想到,为什么冥思苦想不知如何解决问题的时候,和同事出去抽一根的时候突然想到了解决方案,或者出去散散步也是好的,毕竟吸烟有害健康。


美来自于选择。也就是说,艺术不是来自于创造本身,而是来自于选择,从几乎无限的可选项中进行选择。


使用乐高积木做面向对象设计对团队成员来说非常有效:每个人都可以参与,而无需争夺键盘或者白板笔,大家的举止行为更富有活力,还促进了多感观参与。


没人喜欢文字胜过图片了,而图片便利了我们对概念的理解,然而参与其中或者深入到情境中去会更加会深入对概念的吸收。

你不能忽略思维模式的任何一面:你需要两者协调一致。你需要让R型打头阵,然后转到L型去“生产”出来。

这也完全可以映射到写算法,r型思维帮助我们出算法思想,而落实到具体的实现上就不是R型思维的枪响了,这时L型会出场。


解决问题时,学会轻松面对不确定的事情。进行创造时,坦然面对荒谬和不切实际的东西。学习过程中,不要太迫于学会和记忆,首先只是适应它。试着先理解其意思,掌握主旨思想。

将大问题划分为一个个小问题,然后总结出现有的所有条件,通过这些条件来逐个击破这些小问题,自然也就解决了大问题。

将想法首先捕捉到纸上,然后再输入到博客中,这样做其实更迅捷。

我写的每一篇博客说实话都不是今天突然来了感觉写一篇博客吧,然后直接就写了,我的桌面通常会很乱的,充斥了大量的Markdown文件,当我觉得哪一篇已经积累的差不多可以的时候,我才会发布到我的博客站点上。

但是,你不需要像亚瑟一样真的变成一只鸟,只需要把自己想象成一只鸟也会具有同样的效果。

记得在学生时期,尤其是在学习力学的时候,在解决问题时,我有个诀窍是把自己想象成物体,感受着重力,感受着我上面的物体压我的感觉又感受着旁边的哥儿们推我在地板上做匀速运动。呵呵,这其实不失为一种解决问题或者理顺思路的方法,你可以试试把自己想象成一个网络请求,想象一下这个旅程究竟是什么样的。


我们相信真理是建立在它的确通过强有力的逻辑推理出来的情况下,然而事实上并非如此,尤其是在当今这种信息过剩的环境下。当你坚信某件事情时,是否真的那么可信?问问自己原因。为了获得更大的视野并测试一下自己的理解和心理模型,问问自己以下问题

● 你怎么知道的?
● 谁说的?
● 有什么特别的?
● 我的做法会如何影响你?
● 与什么或者谁比较?
● 这总是发生吗?你能想到一个特例吗?
● 如果你这样做了(或者不这样做)会怎么样?
● 什么阻止了你?


SMART代表具体的、可度量的、可实现的、相关的和时间可控的(Specific, Measurable, Achievable, Relevant, and Time-boxed)

如何学习可能和个人的学习能力还不太一样,如何学习是一个比较大的概念,一个具体的、可度量的短期学习目标会更加科学的实现学习目标。


即使你从来不会在工作中使用某项技术,它也会影响你思考和解决问题的方式。因此,你学习的任何东西都有价值,只是有可能不是直接的、有物质回报的或和当前工作相关的价值。

这一点和《把时间当朋友》中的一个观点是一致的,世间万物之间都是相互关联的,也就是说会相互影响,而如果你作为一个程序员,那么去学习烹饪可能不会直接提升你的技术水平,注意我这里说的是不是直接,但是学习烹饪会影响你的思维方式,或者说影响你的R型思维,从而间接的影响到你的编程思维。


学习一本书或其他印刷品的方法称为SQ3R,是该方法具体步骤的首字母缩写。

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

这个真的可以试试,尤其是通过SQ3R搭配思维导图来读书或许效果更好,下一本书打算就开始这么干!


波利亚的解题方法

解决问题时,先提问自己。
● 未知量是什么?
● 已知量是什么?
● 条件是什么?
● 然后制定一个计划,执行之,回顾结果。波利亚建议的一些技巧(如下所示)听起来非常熟悉。
● 努力回想拥有相同或类似未知量的常见问题。
● 画一张图。
● 解决一个相关的或者更简单的问题,放宽限制,或者使用已知量的子集。
● 所有已知量和条件都用上了吗?如果没有,为什么?
● 尝试重新叙述这个问题。
● 尝试从未知量推到已知量。


一个密友(姓名保密)第二天有一门重要的考试,但是前一天晚上,她并不学习,而是坐在沙发上剪纸娃娃。当时这在我看来就是典型的耗费时间: 一个无关的非生产性的活动阻碍了你需要做的真正工作。


新手的大脑有很多可能性,但是专家心里只有很少。

永远保持好奇心。

《程序员的思维修炼》读后感

发表评论

电子邮件地址不会被公开。 必填项已用*标注