这学期头脑发热,辅导了两个人编程(第一个 Python,第二个 C++),真的是很难忘的经历。
学习编程是一件有挑战的事情。相比之下,教一个人编程更加困难。第一个障碍,就是思维方式的改变(针对大学生而言)。

有了高中的经历,学习者很希望能得到一个 “知识体系”,一个树状的知识结构图,就像这样 biology
(原链接 http://zxshw.jyjy.net.cn/Article/UploadFiles/200511/20051102160138116.gif)

问题是,编程并不是要回答原有的问题。我喜欢将编程比作乐高积木:给定若干规则,你要按照你的想法想起组合在一起。来 搭建 你所需要的东西。如果不能让他们掌握新的思维方式,那你就可以打 GG 然后 Alt + Q 了。

回头想想,有几点建议,还是留给自己吧:

指出错误要直接

我并不时说我们要像 Linus Torvalds 那样 “直白”,但对于学习者的错误,要果断的指出。如果发现对概念有错误的理解,一定要第一时间指出。如果因为他们看上去很努力,就给了不客观的鼓励,那会是非常不负责任的行为。

####避免使用自然语言 need description

大家应该很熟悉这幅漫画吧。一个团队内的成员,尚且会相互误解,更何况在一个半斤八两的教授者,和一个一片空白的学习者间呢?
相比于含糊的自然语言,流程图是一种更可靠的交流方式。而且,还能帮助他们形成正确的思路。

####不要相信“我听懂了” 很多时候,“懂了”的意思,是“我知道了”(参见图一)。学习者经验少,不自觉地自欺欺人,如果你也被忽悠了,那结果将会是悲惨的。

####不要在练习上吝啬时间 《我编程,我快乐》 一书中,作者将编程与音乐做了类比。虽然两者间的区别很大(比方说没有维也纳新年编程会),但个人愚见,有一点是共同的:需要大量的练习。贸然跳过一些自认为“简单”的练习,很可能埋下某些“定时炸弹”。今天坑挖的越深,明天掉进去的时候摔的就会越痛。

不要轻易挖坑

但趁着年轻,多做一些有挑战性的事情吧