Learn By Making


学校里安排一些动手实习,编程教学网站上课后会有浏览器上的编程挑战,大家都把这个叫做 Learn By Doing 。这个我觉得还不够,我觉得应该从第一天开始就让学习者去做一个实际的作品,或者叫 Learn By Making.

不做东西啥也学不成

我的本科四年是电气自动化专业,你知道数电模电,电机学那些书有多厚吗?每天就是苦学,就是考试,动手类的, 好像就是做了一个收音机,其实也不是我自己想做,是被逼着做的。这样,四年下来,什么也没学会。

要做出一个东西来的冲动,我觉得首先是一种情怀,一种渴望用手工而不是说话的形式跟他人交流的愿望。 比如你喜欢画漫画,想要搭建一个小网站来和他人分享你的作品,那就首先写几个 Html 页面。这样,你学了什么是编辑器, 浏览器,文件后缀,这些概念,你可能最初觉得这些概念本身没什么意思,但是东西出来了,你就很幸福,有进一步学下去的兴趣了。 后来你觉得页面不太好看,想来美化一下, 那每次你学到一个 css 的小技巧,就是如获宝贝的感觉。因为每一行代码都是你的朋友,都在帮你达成心愿。

多年的学校教育,咱们中国学生其实是喜欢拿起一本书,从头到尾来“系统的学习”。如果你很喜欢这种方式,也请继续。 学习方法是一个个人的事,是一个长期形成的习惯,一下子改过来可能走火入魔。并且如果真的遇到好的教材,这种方式 学习方法也确实不错的。但是,基本上,我支持”碎片式”学习,理由很简单,很多时候一本书中总有一些知识点是你暂时动手 用不到的,时间长了不用,也就慢慢忘了。所以,不要再以页码和章节号来贯穿你的知识体系了, 用一个个具体的作品来承载那些零碎的知识点更有效。可以到 github.com 上了解一下,项目和 wiki 的关系。

Keep it simple, let it grow

研究生阶段,我跟导师其实是堵着一口气的,他非让我用 Windows CE 来跑嵌入式系统,但是我喜欢嵌入式 Linux。 于是苦干,就是要把这个东西做成,但是两年多下来,效果也是很不好的,因为每天大量的时间都浪费在调试上了。 为啥?东西太难。所以说 Learn By Making 也是要讲究方式的。

不要无病呻吟,要作一个情怀驱动的点,做开源项目就是一个好的方式,到 github 上开一个项目吧,做自己最喜欢的事情。 一点一点,步步为营。 总之,让创作冲动指引你,如果你没有创作冲动,那就先去看一些人文类的书,恢复一下你对生活和人群的热爱, 创作的冲动从最本源上是一种与人交流的冲动。

我自己学和教的思路

英文语法你讲的再简单清楚也没用,重要的是说。说得多了,不会语法也行。说得少了,会了语法也不会用。 学习编程我的思路是一样的。就是培养兴趣,保证多写代码,越多越好。

再回到我本科学英文时候的困难,字典有吗?有。优秀的英文资料有吗?有,疯狂英语阅读版,VOA,toefl 教程,都能在石家庄买得到。 缺少的是一个说英语的环境,和一个每天能陪着我的老外朋友。类推到 web 开发领域,文档资料也并不少。大家应该最缺的是一个带着自己一起动手做东西的朋友。 我的 happycasts.net 视频就是要给大家提供一个陪在身边的朋友。视频本身以做成各个实际功能为诱饵,吸引你来和我交流。 交流的过程就是动手,做你自己想要的功能。理论上的难点,我会给你说说,但是主要还是给你分享一些材料,你自己沿着动手的需要去看。 跟我在一起的时间就是动手做东西,建立成就感。

多年来,一直都在思考 web 开发的正确的理论由浅入深的次序是什么,现在看来这跟学英文时强行规定哪些词汇是“最常用”的, 是你应该“马上掌握”的一样,都是要把学习变得很枯燥的蠢主意。

所以来总结一下,正确的学习编程的路线就是。第一天,就选一个比较简单的作品,一点一点把它做成。动手,以兴趣为驱动,像一个孩子学习语言一样来学 web 开发才是正确的思路,不要太在意哪些是基础知识哪些是中级知识,你最先遇到的知识,或者说最经常遇到的知识,就是你应该最先花力气掌握的。


欢迎所有朋友加我微信:happypeter1983