本文对《软技能:代码之外的生存指南》书中的“十步学习法”展开讨论,该书作者是John Z. Sonmez,一名程序员,书中有很多面试、专业等建议。有一些建议相见恨晚。某天在喵哥群里看到了本书的推荐,非常感谢推荐。

本文末尾附上了John Z. Sonme推荐的书单(自我提升、软件开发、投资类),感兴趣的可以看一下。

虽然本书说的是“程序员必备的软技能”,但我认为这是所有职业都通用的软技能。该书中总共分成七个部分,分别是:职业、自我营销、学习、生产力、理财、健身、精神。我做了下面的思维导图,可以概括个大概,可以根据需要随意读取某个章节:

本书总共71篇文章,可以把每一篇都看成一篇高质量的博客,也就是说如果你能够写出71篇高质量的博客,你也就能够出书了(手动狗头)。

这位作者老哥很会玩,他有自己的youtube频道,网址youtube.com/jsonmez 我点进他的油管主页看了一下,好家伙,作者本人还是个猛男:

十步学习法

你是不是和我一样,学习知识的时候就喜欢拿着一本书“从封面到封底”仔细阅读,这样可以学到东西,但是效率很低。因为我们往往只会用到书中的一部分内容而已,没用到的内容会迅速忘记。这是关键,没用到的内容会迅速忘记……通过不同的方法,对于知识的掌握程度也不同,可以参考下面这张图:

仅仅通过阅读,学习信息的留存度只有10%。因为我们并没有掌握那些没被用到的知识。学到了某个知识,叫懂得;练习过学到了的知识,这叫掌握。掌握了的,不容易忘。

懂得很多道理,但是依然过不好这一生。——因为这些道理只是头脑上的懂得,但并没有身体力行的掌握……

学习二字,学——头脑上的懂得,习——头脑和身体上的练习。练习中的体验,极大加深了该知识的记忆。我们都有背单词的经历,但真正掌握这个单词的时候,还是和这个单词在某个地方不期而遇时,比如某一天下午你在看国外新闻时,看到了这个单词,这个时候才发现这个单词还有这个用法。我们学会了使用它,直接用它,也就记得了它。

十步学习法如下:

不要被这么多步骤给吓到了哈,总共分成两个部分:

第一步到第六步:学习前的准备部分,即为前期调研以及设定目标。

第七步到第十步:学习过程部分,即这四步:学习-实践-学习-分享教授(Learning, Doing, Learning, and Teaching)

第1步,了解全局

这些年有个很流行的认知的四个阶段:不知道自己不知道什么、知道自己不知道什么、知道自己知道什么、不知道自己知道什么。

“了解全局”就是从第一阶段到达第二阶段的过程。如果想要学习一门编程语言,那么首先得知道计算机的编程语言都可以做些什么,市面上有哪些编程语言,这些编程语言之间又有什么关系等等。关于这些我们可以在网上搜索一些文章,或者请教相关的人,了解个全局。

等到我们了解个差不多的时候,我们终于知道了这些东西大概是个什么,但是具体是啥我们是不知道的。这就进入了“知道自己不知道什么”的状态。

了解全局是必要的,如下面:

如果我们按照图的上半部分,在没有了解全局,就开始精细地学,这样恐怕不会持久。

但是像下半部分那三张图一样,先了解一个模糊的大局,再逐渐精细地了解,这样的效果会更好

第2步:确定范围

我们大致了解全局之后,需要确定范围。因为计算机知识浩如烟海,我们无法掌握全部——穷尽一生也不可能。甚至就算单是学习一门编程语言,比如如果想要精通C++,那没个好几年是不可能的。但是我现在的学习时间只有一两周,那只能把范围缩小,这样的范围可以是,使用学习某个编程语言中的:

1,图形界面相关的编程。
2,文件操作相关的编程。
3,网络通信相关的编程。

短时间内我们可以聚焦在以上三个主题中的一个。一个主题就是一个聚焦范围。

为什么要聚焦,我们啃知识的过程就想打怪。还记得《灌篮高手》里面,宫城良田是怎么把三井寿的门牙打掉的吗?其实三井寿是带兄弟围殴的,如果宫城不聚焦地去打三井,那么他就会被围殴的毫无还手之力。

我们打知识也要聚焦,不然会被知识围殴地毫无还手之力。

第3步:定义目标

确定一个小范围之后可以定一个小目标,比如下面的任意一个都是小目标:

1,写出一个图形界面
2,用程序操作文件
3,用程序进行PC之间的通信。

第4步:寻找资源(学习材料)

学习一个知识点的时候,最好不要就只用一本书,可以参考不同各个书上的指定的章节,因为很多时候不同的书都在描述同一个东西,但是描述的角度不一样。

当我们从A角度看某个东西的时候,可能会消除在B角度看相同东西时产生的那个疑惑。尽可能寻找更多资源。

信息来源:

图书
博客文章
在线视频,公开课
询问这方面的专家
播客
源代码
示例项目
在线文档
各种网页
付费视频、课程

第5步:创建学习计划

创建学习计划,就算我们已经在第2步里面缩小了学习范围,可能这个范围内还有比如六个如A,B,C,D,E,F个知识点,而有些知识点是最基本的,比如知识点A,所有其他知识点B、C、D都依赖于A。这个时候我们肯定要学最基础的A,再学其他不那么基础的点。

就像上图中的螺旋上升的阶梯,往上的阶梯需要稳固的基础,也就是一个起点。

很多时候可以直接参考书的目录,基础的点都在前面,进阶的内容都在后头。

第6步:筛选资源

因为我们在第4步的时候已经寻找了很多资源,那么这个时候可以进行筛选,去掉重复性比较多的,或者不太适合自己的那些书,找出最物超所值的那几本——可以看看网络上对该书的评价。

第7步:开始学习,浅尝辄止

以上学习前的准备过程就差不多了,接下来就是学习过程,学习-实践-学习-分享教授(Learning, Doing, Learning, and Teaching)。

这一步的学习是为了下一步的“动手操作”。

这个时候我们就要清楚地知道,为了下一步的操作,我们需要的“最小量的启动知识”有多少。度很关键,学太多或者学太少都影响效率。

第8步:动手操作,边玩边学

如果是学习代码,这一步可以按照示例代码自己试一遍,或者自己改一遍。
如果是学习英语单词,就使用这个单词造句、练习发音,并根据不同的释义想象可以在什么场景下可以使用。

以上过程也是根据不同的例子来强化自己的记忆。我知道有一个挺有名的程序员章亦春,他喜欢在学习的时候,手抄代码。第一次听到这事的时候,我震惊了,手抄,那效率得有多低?后来我在刷leetcode的时候,遇到看不懂的那些题解代码,复制粘贴后上程序跑一遍还是不懂。然后我就在纸上手抄这些代码,抄着抄着的过程,竟然真的慢慢懂了,真香!

第9步:全面掌握,学以致用

我们可能会在上一步的操作过程中遇到问题,这个时候可以回到资料里面,去寻找答案。又或者这个时候我们再看之前看过的内容,也会有不同的体会。

第10步:乐为人师、融会贯通

原书中是这样写的:

你可以用多种方式将自己所学教给他人。你可以写博客,也可以制作YouTube视频。你也可以跟自己的爱人探讨,将自己所学解释给他/她。重点在于,你要花时间将自己学到的东西从大脑中提取出来,以别人能够理解的方式组织起来。在经历了整个这个过程之后你会发现,有很多你以为自己明白了的知识点,其实并没有摸透。于是你会将那些以前自己没太明白的东西联系起来,并且简化自己大脑中已有的信息,将它们浓缩并经常复习。

费曼学习法也大概是这个意思,诺贝尔物理奖得主费曼说:“如果你没有办法用简单的语言表述你所学的知识,你就没有真正学会它。”著名的费曼学习法,推崇以教为学。

首先我们通过练习大量的例子,从而总结出这些例子的通用规律。然后将这些例子以他人听得懂的方式表述给他人,在这个过程中你再一次对这个通用规律进行了总结——或者说压缩。同时在表述的过程中,进行了逻辑上的验证。

有时候,逻辑验证会出现卡壳,会发现有很多你以为自己明白了的知识点,其实并没有摸透。

这还没完,在表述给别人的时候,别人会产生疑问,这时候可以将别人的例子,套用在你已经总结出的规律中,进一步验证这个规律的准确性。

分享知识的途径:

写博客文章
创建视频教程
发表演讲
与朋友或爱人进行对话探讨
线上或者线下回答他人的问题

只要善于总结,就超越了很多人。当年RTS游戏盛行的时代,WAR3(魔兽争霸3)游戏的王者,中国人皇SKY李晓峰。他当年在网吧接受采访的时候,秀出了他一个记满技术要点的小本子,这是他对很很多场对战的关键总结。说实话,字写得真的丑,写的句子也和“文笔”两字丝毫不沾边,但这并不能阻止他成为世界人皇。

最后,祝各位前程似锦。

最后的最后附书单

文末附上原书《软技能:代码之外的生存指南》作者推荐的书籍汇总。各位也可以参考以上学习方法,选择某一主题的书,进行学习哈。

自我提升和励志类图书

Steven Pressfield的The War of Art [Black Irish Books, 2002]
Dale Camegie的《人性的弱点》(How to Win Friends and Influence People)[Gallery Books, 1998再版] 没错就是卡耐基的书,英文名直译有点意思:如果获得朋友和有影响力的人
Napoleon Hill的《思考致富》(Think and Grow Rich)[Wilder Publications, 2007]
Maxwell Maltz的《心理控制方法》(PsychoCybemetics)[Pocket Books, 1989再版]
Norman Vincent Peale的《积极思考就是力量》(The Power of Positive Thinking)[Touchstone 2003再版]
Ayn Rand的《阿特拉斯耸耸肩》(Atlas Shrugged)[Signet, 2005再版]

软件开发类图书

Steve McConnell的《代码大全》
Robert Martin的 《代码整洁之道》
Eric Freeman, Elisabeth Robson, Bert Bates和Kathy Sierra的《Head First设计模式》

投资类图书

Gary Keller的The Millionaire Real Estate Investor [McGraw-Hill, 2005]
Robert Kiyosaki的《富爸爸,穷爸爸》
Kerry Given的No-Hype Options Trading: Myths, Realities, and Strategies That Really Work [Wiley, 2011]

零基础学习Java编程,可以加入我的十年Java学习园地。技术交流,经验分享,解疑答惑。

程序员必会的十步快速学习法(附书单)相关推荐

  1. java软件学习网站_Java程序员必看的十大学习网站

    无论是作为资深Java程序员,还是刚刚Java入门的小白,都不可缺少平时学习的网站.以下小编收集了Java程序员必看的十大学习网站,这些网站可以提供信息.以及一些很棒的讲座 , 还能解答一般问题.面试 ...

  2. 程序员必看的十大电影

    原文来自:http://www.aqee.net/top-10-movies-for-programmers/  中间加了些我自己的看法. 本文编者注:本人是个爱看电影的娃,下面的十大电影只有第八部第 ...

  3. 程序员必看的十部电影

    不同的行业领域中很多时候都分享着共同的思想和理念.比如,大量的计算机编程中涉及到的概念都被运用到了电影里.有些概念出现在电影里后变得如此之酷,甚至反过来能帮助我们程序员更好的理解这些概念.下面就是我最 ...

  4. 逻辑思维 代码人生 程序员必看的十大经典电影~!

    不同的行业领域中很多时候都分享着共同的思想和理念.比如,大量的计算机编程中涉及到的概念都被运用到了电影里.有些概念出现在电影里后变得如此之 酷,甚至反过来能帮助我们程序员更好的理解这些概念.下面就是今 ...

  5. 2022年程序员开工第一周,应该收藏这样一份书单

    新年新气象,开工第一周,作为程序员的你有哪些新年规划?如果还没准备好,不如小编来一份开工书单,开始你的学习旅程吧! 开工后,有哪些新书最受欢迎? 1.计算之魂 (<数学之美><浪潮之 ...

  6. 计算机系程序员必学的十大基础算法

    算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通 ...

  7. 程序员必知的十大基础实用算法及其讲解

    算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序n个项目要Ο(nlogn)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比 ...

  8. 优先深度搜索判断曲线相交_程序员必知的十大基础实用算法之-DFS(深度优先搜索)...

    深度优先搜索 深度优先搜索是一种在开发爬虫早期使用较多的方法.它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件) .在一个HTML文件中,当一个超链被选择后,被链接的HTML文件 ...

  9. 安卓开发入门教程!终于有人把安卓程序员必学知识点全整理出来了,附答案

    如何提升学习? 提升学习很大程度上就是为了跳槽涨薪,当然运气不好的情况可能是被劝退重新找工作,无论是哪种情况,自主学习的能力是要有的,而且得有一个方向,得有重点. 对于Android移动开发来说,热修 ...

最新文章

  1. 我从高级开发者身上学到的19条编码原则
  2. React学习笔记7:React使用注意事项
  3. linux入门教程命令,Linux入门命令掌握
  4. android读取SDCard任意路径下的文件
  5. 数据库中的乐观锁与悲观锁详解
  6. 转:SCI、EI和ISTP收录号的查询方法
  7. 如何利用 gulp 压缩混淆 “上古”时期的项目文件
  8. wordpress引入php文件,WordPress主题制作之模板文件的引入方法,wordpress模板
  9. maven 的安装配置 和编译java程序
  10. dubbo源码深度解析_Spring源码深度解析:手把手教你搭建Spring开发环境
  11. fgets()与gets()的区别
  12. jmeter使用_jmeter工具的使用
  13. 控制台服务编写 Linux,一步步搭建ubuntu server console(控制台,字符模式)开发环境...
  14. python qt gui快速编程 pdf_翻译:《用python和Qt进行GUI编程》——介绍
  15. # 再次尝试 连接失败_新一代高效连接池HikariCP设计简要分析
  16. C++面向对象高级编程(上) 第一周笔记 GeekBand
  17. php连接mysql实例留言板_一个php留言板实例详解(附源码下载)
  18. 计算机信息网络国际联网安全保护管理办法
  19. python 数学公式显示_python 数学公式·
  20. C语言实现贪吃蛇(四)----游戏存档读档(文件操作)

热门文章

  1. 记录token的作用
  2. 绘制pdf表格 (二) 通过itext实现在pdf中绘制excel表格样式设置中文字体、水印、logo、页眉、页码
  3. 强化学习:贪吃蛇AI完整游戏逻辑代码
  4. 阿里巴巴第三方接口发送短信验证码
  5. 不爱科研,只为当大学老师而读博,这种做法对吗?
  6. web端对接海康平台V1.5.1插件
  7. 批量修改数据进行分批处理
  8. PSNR峰值信噪比matlab实现
  9. MIPS汇编 汇编程序简介
  10. windows10 音频出现 未安装音频输出设备 报错的解决方式之一