如何高效地学习编程语言

这是Clojure好书《Clojure for the Brave and True》作者 Daniel Higginbotham 写于2017年4月16日的博文。从作者的丰富的经验来看,本文非常具有指导意义。

学习编程语言是一种技巧:做好了,你会感受到掌握新事物之后的快感(dopamine:多巴胺);做不好,就会接二连三的沮丧,甚至放弃。下面这些学习编程语言的最佳技巧是我从多年的著书写作演讲培训中总结出来的。这里头很多技巧来源于对高效学习前沿研究做了解释的书籍。你可以在 Community Picks Learn Programming 中找到那些书(还有其它牛x的编程书籍)。

持续测试自己以抵抗胜任力错觉

最不济的学习方法中的一种就是重读或者重看材料。这种重复会给你一种感觉——似乎不用花什么气力,你就理解了话题所涵盖的内容。研究者们把这种现象称作胜任力错觉。

更好的一种方式(你可以掌握的最佳技巧之一)则是持续地测试自己。不要重读一个函数、类或者一个对象是什么,而是让自己定义这些概念或者把它们用到短小的程序当中——强迫你用某种方式显示自己的理解。这一过程常常很不舒服的,但是对形成长期记忆非常有效。更进一步,你可以在阅读材料之前先去行测试,举个例子,尝试在阅读一个章节之前做做练习。值得一提的是,这也被证明有助于记忆的形成。

测试对于学习的显著影响被称为测试效用,下面是一些具体方法可以利用:

  • 在阅读章节或者看视频之前,尝试猜测你将要学习的东西,并写下来。
  • 在阅读章节之前先做做这个章节的练习题。
  • 一直做练习,即使是最难的那些。暂时(永远)放弃一个练习也是可以的,不过至少要尝试一遍。(下个章节会详细谈到)
  • 阅读短小的程序并且尝试不看源码重新写一个。或者,再小一些,写个函数也行。
  • 在学习了对象、类、方法或者高阶函数等新概念之后,立即编码做示例。
  • 创建阐述这些概念的图示,以及这些概念之间的区别和联系。
  • 把你刚刚学到的概念写成博客。
  • 尝试把概念解释给非技术的朋友听。(在写《Clojure for Brave and True》的时候,我常常这么干。这样能够以外行的话阐述一个想法,进而迫使你深入理解想法本身。)

这些技巧的大部分都要规约到编写代码上!说到编程,由于程序都是重文本和概念性的,所以很容易以为我们仅仅通过阅读(代码)就在学习。但是程序同时也是一门手艺,就像其它手艺一样你得操练才能娴熟。编码是暴露你对程序作有错误假设的最佳方式。你越快地这么做,就会越快地纠正错误和提升技能。

如果你想了解更多测试效应的事情,敬请查看坚持:成功学习的科学(make it stick: The Science of Successful Learning)

花时间放空自己

如果你纠结在一个问题上,或者对刚才读到的东西不能理解,就去散散步甚或洗个澡 —— 只要能进入一种舒缓、放空的状态就行。解除障碍的最佳方式之一就是歇一会儿,这可能听上去有点反直觉,但确实如此。

问题是,当全神贯注解决问题时,我们很容易陷入思维障碍(mental blinder)。我的意思是,这差不多就是“关注”(字面上)的意思。不过,全神贯注会导致我们只能一直探索解决方案空间的一小部分。一旦放空,我们的潜意识就可以探索并联结我们经验中的广泛领域。

对我来说,这就像当你试图在纸质地图上找到一个目的地(是否还记得?)。你不用刻意就确信你想抵达的城市应该就在这里!在地图的左上角的区域,所以你看了一遍又一遍,都没有成功。然后你放下地图,做了深呼吸并让目光游离了一会儿。当你重新看地图时,确切的地点立马映入眼帘。

我们曾经都有过这样的经验,在洗澡的时候突发灵感。现在你对于为什么这么做有了更好的了解,那么也就能刻意地使用这个技巧。个人来讲,如果纠结在某事上,我真的会洗个澡,这个技巧的功效显著。另一方面,我又是多么干净(注:洗澡这件事)。

如果你想多学一些关于思考的关注和分散模式,敬请查看A Mind for Numbers: How to Excel at Math and Science (Even If You FLunked Algebra)

别浪费时间沮丧

和上一个章节相关:别浪费时间为代码沮丧了。沮丧会让我们做一些愚蠢的事情,比如重新编译或者重刷浏览器,期望这次会有所不同。

把沮丧看作你的知识有差距的信号。一旦你意识到自己沮丧了,它可以帮你后退一步,清晰地识别问题。如果你写的代码不起作用,坦率地向自己或者别人说明你期望的结果。使用科学的方法,就非预期行为的根因提出一个假说。然后测试你的假说。再次试验后,如果依然解决不了,就把这个问题放到一边,待会儿回来。

在一些似乎没法解决的问题上,我不知有多少次恼怒地扔掉了自己的笔记本电脑。隔天再看,一个显而易见的解决方案立马跳入脑海。甚至上周就发生过。

确认你正在处理语言的哪个方面

个人观点,我觉得记住这些是有用的——当学习一门编程语言的时候,你实际上正在学四件事情。

  • 怎么写代码:语法、语义以及资源管理
  • 语言的范式:面向对象,函数式,逻辑等
  • 产出物的生态圈:如何构建、运行可执行文件以及如何使用库
  • 工具:编辑器,编译器,调试器,代码质量检测器(linter)

这四项很容易搞混,不幸的结果是,当你遇到问题最终完全找错了地方。

举个例子,某些完全的编程新手,可能准备开始构建iOS应用。他们可能会试着让自己的应用在朋友的手机上运行,只看得到有关需要开发人员证书或其他信息的消息。这是产出物生态圈的一部分,不过小白可能将此视为编写代码的问题。他们可能会浏览自己写的每行代码来尝试解决问题,尽管问题和代码没有半毛钱关系。

如果我系统地处理这些方面,我会发现学习一种语言会更加容易。我将在其它的博客文章中罗列一些待回答的宽泛问题的列表,应该能帮助你学习任何语言。

明确目的,外部模型,内部模型

任何时候你学习使用新工具,明确学习的目的,外部模型和内部模型都是十分有用的。

当你了解了工具的目的时,你的大脑会加载有用的上下文细节,使你更容易吸收新知识。这就好比拼图:当你看到完整拼图之后,更容易把各部件拼到一起。这个道理适用于语言本身以及语言库。

工具的外部模型就是它呈现出来的接口以及它想让你思考问题解决的方式。Clojure 的外部模型就是一个 Lisp,它想让你把编程当做大部分以数据为中心,不可变的转换过程。Ansible 希望你把服务器的整备工作想成定义最终状态,而不是定义抵达那种状态所要采取的步骤。

工具的内部模型就是如何将输入到其接口转换成一些底层的抽象。Clojure 把 Lisp 转换成 JVM 的字节码。Ansible 把任务定义转换成了 shell 命令。在一个理想国中,你不需要理解工具的内部模型,但事实上,理解内部模型总是有用的,因为在某些看上去迷惑或者矛盾的部分,它可以让你有个统一视图。举个例子,当 DNA 双螺旋模型被发现的时候,它帮助科学家们了解更高层次的现象。从我的角度来讲,当然,这篇博文也是历来所有伟大科学成就之一。

很多教程经常混淆工具的外部和内部模型,使学习者感到困惑。意识到这点可以帮你轻松辨别何时你会感到沮丧。

间隔重复帮助记忆

间隔重复被证明是长期记忆中新信息编码的最佳方法之一。 这个想法是以不断增加的时间间隔来测验自己,使用最少重复次数来最小化记忆衰减。 卫报写了一篇很好的介绍性文章

睡眠和练习

保重身体!身体可不仅仅是你脑袋的载体。如果你想保持专注和高效的学习,就要足够的睡眠和练习,而不是(原文:beats the pants off)狂饮咖啡因和能量饮料。

更多小贴士

如果你还有其它有用的技巧,请不吝评论!如果你想知道更多关于学习编程的优质资源,敬请查看Community Picks: Learn Programming,这是一个社区策划编程学习书籍的收集活动,内容广泛,包含入门编程,工艺以及关于软技能和面试方面的书籍。


原文链接 [1] Techniques for Efficiently Learning Programming Languages

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PPV课数据科学社区

如何创建用户模型:问卷调查与数据分析

很想写一些东西来总结总结自己的工作,可惜工作太忙一直也没顾得上来写。最近闲来想和大家讨论讨论关于创建用户模型的事情。 一、用户模型的建立与问卷数据的采集 Per...

4624
来自专栏斑斓

两步到位,快速找准Bounded Context

如何识别Bounded Context,在领域驱动设计方法学中无疑是一个挑战。我尝试利用可视化的用例图,通过两个步骤驱动出Bounded Context,从而完...

3024
来自专栏文渊之博

数据仓库基础介绍

本文将会讲述 BI/DW/DA 领域的一些常见概念,如:事实表、维度表、建模、多维分析、cube 等,但不涉及具体实例分析。

1794
来自专栏AI科技大本营的专栏

基于Python实现的微信好友数据分析

本文转自微信公号5厘米的理想 作者 | 飞鸿踏雪 最近微信迎来了一次重要的更新,允许用户对”发现”页面进行定制。不知道从什么时候开始,微信朋友圈变得越来越复杂,...

5805
来自专栏PPV课数据科学社区

【工具】数据科学家必知必会的 7 款 Python 工具

如果你有志于做一个数据专家,你就应该保持一颗好奇心,总是不断探索,学习,问各种问题。在线入门教程和视频教程能帮你走出第一步,但是最好的方式就是通过熟悉各种已经在...

3366
来自专栏杨建荣的学习笔记

SQL审核中的打分模块设计

如果你花了一些时间和精力来对SQL审核做一些改进,对于审核的规则和定义已经炉火纯青,里面肯定包含了很多的细节,也包含了很多的技巧,一条SQL语句我们可以给出20...

1342
来自专栏腾讯移动品质中心TMQ的专栏

编写BUG报告有诀窍?Toulmin模型来帮忙

前不久,桓哥的分享PPT中提到了Toulmin论证模型,并在其中提到了这么一句话“尝试建议:用Toulmin模型指导编写BUG报告(特别是容易被忽略限定部分,即...

3688
来自专栏CDA数据分析师

做数据分析,Python和R究竟哪个更强?

几十年来,研究人员和开发人员一直在争论,对于进行数据科学和数据分析,Python和R语言哪个才是更好的选择?近年来,数据科学在生物技术、金融和社交媒体等多个行业...

3541
来自专栏PPV课数据科学社区

【学习】为什么你的数据分析那么好,图表做得那么烂?

导读 所有优秀的数据可视化依赖优异的设计,并非仅仅选择正确的图表模板那么简单。全在于以一种更加有助于理解和引导的方式去表达信息,尽可能减轻用户获取信息的成本。当...

3263
来自专栏ACM算法日常

世界顶级选手的刷题之道

当时dreamoon已经是世界上的顶级选手,甚至前一场的div1他排名第3!(当时cf的分制和现在不同,所以现在看起来只是个红名)

4234

扫码关注云+社区

领取腾讯云代金券