初阶编程学习

一日不编,如隔三秋

前几日生活的琐事缠身,有几天没有继续编程学习,今天面对空白的编译环境,竟然有些恍惚。设定了场景,发现刚学习的内容无从下手,回去翻看官方文档,找了半天,沮丧感来袭。仿佛要用一个汤勺,舀尽面前的滔滔江水。

这段时间写了Data103数据科学课回顾教十年前的自己学编程Data103数据科学课后30天一起玩Python几篇文字,部分想法成为了内隐知识,总觉得缺点什么。刚好开智学堂发布了“黑客养成计划”的系列文章,给了我很大的启发:

顺藤摸瓜,我又找到了这几篇文章:

以及其他的一些资源:中国谷歌开发者社区蟒周刊大妈博客

初阶学习者

我在卡片大法中提到了初阶学习者的定位。在编程世界里,自己也属于初阶状态,找到正确的学习方式并加以大量的实践应该是最重要的。
前段时间阳志平老师讲的一个故事:上了Python一期课程的学员,告诉老师他最大的收获是学会了如何学习。今天写博客的时候才明白这个故事的含义。编程这件“小事”最重要的是“编程”本身,而不是寻找最佳的学习方法。这个目的搞错了,有可能本末倒置。

正确的入门姿势

「learn python the hard way」是Python经典中的经典入门材料。简单的东西背后蕴含的不仅仅是简单。看似简单的材料我自己前后刷了两遍,每一遍的感受都不相同。第一遍:浅尝辄止,为了求快,到后面就只看代码和解释;第二遍,结合官方文档,死磕前17个练习,查阅文档,找到书中案例指向的知识点,恍然大悟。看到这篇文章Zoom.Quiet:如何快速掌握 Pythonic 要义?后意识到,自己可能要刷第三遍,甚至第四遍了。

用最短时间刷得最核心的 20% 知识点,然后就别学了,直接来解决实际问题吧。千万别将一门开发语言,弄成一门学科来研究/深入。
其实,自学中最难的就在无法获得足量的成就感/持续的正反馈。

LPTHW传递出来的绝对不仅仅是简单的语法结构,每一次简单的练习背后都有大量的相关知识点和实践可以尝试,而输入->运行->输出->调整的方法贯穿了编程的始终。每一次简单练习也不会让人疲劳,反而容易激发起自己训练的热情。所以正确的入门姿势是:首先完成习题,抽取和理解知识点,用自己想到的案例来实现,写博客输出(输出姿势下面会讲到)。

正确的输出姿势

教会别人得能想清楚,说明白,举个实际的案例,最好结合其他的知识点融合成复杂的案例。我以前的学习误区是:在学习过程中把知识点直接摘录下来,记录在文字的草稿里。这样降低了难度,提高了博客输出的便利性。现在意识到,这没有结合必要难度理论,博客写的再好,也成为了重复制造轮子。甚至有一些本末倒置,因为博客的输出仅仅是一个结果,过程却被自己忽略了,最大的不应该。先学会知识和案例,通过卡片积累素材,根据必要难度理论,要自己用自己的语言和自己的记忆来书写,用自己的案例教别人,而不是书上的案例摘抄。在写博客的时候重新做一遍案例,而不是Crtl C和Crtl V。编程也要以案例为主,知识点讲解用自己的语言说清楚,并给出索引文档。这一种痛苦的可以训练,成为习惯的时候,我相信自己真的入了门。

如何理解平台期

童牧晨玄:登峰造极的艺术讨论了一个枯燥却核心的话题:如何理解平台期。

想成为本领域内的高手,就必须要跨越平台期。平台期可能是一个漫长的过程,从你学会了基本Python语法开始,到自己能够顺利的解决各种复杂的编程问题,个人觉得至少需要两年的时间。可以说这两年的漫长平台期会“熬死”很多人。事实上,我曾经就死在了平台期。

文中提到了三种人,身上惊出一身冷汗:

  • 站在门口,从未踏入殿堂的人:享受新鲜事物的快感,却无法在了解新鲜事物后持续的学习,接受漫长的训练过程。
  • 急功近利的人:仿佛明天就是世界末日,不断的寻找更好的方法,解决实际问题。忽略基本功的训练,不断的找找找。用书上的话说:在感情方面,不能忍受平淡,通过不断地制造浪漫来保持高潮。
  • 丢失关键路径的人:呆在平台期里久久不肯离去,忽略登峰造极过程中的关键过程。在平台期里享受平台期带来的舒适和枯燥,却忽略了走上巅峰的关键路径。不再接受全新的挑战。

保护好内在动机

第一次学习编程的人,需要有“死磕到底”的精神,如果这一关过不去,不管过多久再次捡起编程学习的大旗,都会需要再来一次。与其不断空想,不如用一次“笨办法”学会一门语言。至此程序员的世界不再困难,学习第二门语言的难度会大大降低。Data103数据科学课后30天中提到的对开源世界的理解,让自己产生了使命感,期待真正参与到开源世界中来。虽然现在是小白,我坚信通过不懈的努力,一定可以做到。

原则正确与细节正确

如果说前面讲到的道理是“原则”,原则正确并不能让我们真正的学会编程,还需要做到细节正确。把原则落实到具体的细节中,经过大量实践,训练自己的编程能力,而不是“学习能力”

编程学习方法的调整计划

  • 博客的输出案例要自己写
  • 提高学习时的难度、初步回顾的难度
  • 多案例、多反馈、解决实际问题
  • 知识体系了解路径,以解决问题为主

现在的学习策略

当时的学习

学习时大脑处于工作记忆状态,在该状态下尽量的多融入案例,而不是仅仅看知识点,官方文档,这对于编程是远远不够的。

  • 学习知识点,通过案例的方式学习,尽量了解透知识点、代码的案例等
  • 用自己的方式根据知识点编写新的案例,做好记录

过后的学习

必要难度在这里体现最为明显,此时自己需要调用记忆进入自己学习时候的工作记忆状态。这时候一定要坚持住,不能立刻去看源代码,去翻书。这一关必须要过去。

  • 不借助任何的外力和工具,立刻想到知识点,用案例实现出来
  • 不借助任何的外力和工具,通过博客把自己理解的知识点与自己写的案例输出

巩固学习

过了必要难度的坎,给自己的“神经网络”加点料

  • 尝试把知识点结合,解决自己实际遇到的问题,用代码来说话,用代码来说话,用代码来说话(重要的事情说三遍)
  • 不借助任何的外力和工具,写成博客,输出

最后送给自己四个字:知行合一

声明: 本文转载需标明出处,禁止用于商业目的。

ChangeLog

161226 新建