20120531

我在课堂上为什么要展示编码的过程,而不止是结果

我在课堂上为什么要展示编码的过程,而不止是结果

我在上程序设计课程的时候,会在课堂上当场编程。而我见到的大多数老师喜欢
事先备好课,用PPT或WORD以更大的字体展示程序内容。

为了能够更好地展示现场编程,我试过一些办法:尽可能缩小班级人数、不用投
影仪而是用机房的广播系统。这确实带来一些麻烦,更不用说,现场编程比事先
备课更容易出错,挂在黑板上。

那么我坚持现场编程序的原因是什么呢?

1. 过程

我要向同学演示代码由无到有的过程。

事先备好课确实有很多优点,但是当我是同学的时候,我总感觉是在看场魔术。
老师拿来个帽子,展示一番,然后,突然从里面掏出只兔子来,有毛能跑的。如
果我只是观众,哈哈,很逗。但是如果我是学魔术的同学,我就会特别想看到慢
动作地重放--从空帽子到兔子的过程。

而这个过程,如果事先备好课,通常就只是打开工程,然后编译,运行,出结果
了。结果就是老师说的那个,但这一点也不令人意外。

我想看到代码修改以后还能跑么?最好是从什么都没有,开始创建一个工程,然
后代码逐渐增多。不然,除了神奇,我什么也没有学到。

作为同学我这样想,我私下猜测,同学们也会这样想吧。所以,我想展示给同学
代码的过程,而不仅仅是代码本身。

代码本身能学习和分析的东西确实很多。我们对着早就墨迹干涸的红楼梦也能分
析出比它本身厚得多的著作来。但是,如果你站在曹雪芹的身后,越过他的肩膀
看他把红楼梦写出来,那样的话,收获该是多少呢?你能看到他删除掉了哪几个
人物,哪几个人物原本不是这样的,她们 (想想真似乎没有几个男子,所以不妨
直接用女字旁了) 的命运、性格原来是那样,历经了几次修改……

但是我们都没有那样的机会。所以,"披阅十载,增删五次",作者不得不感叹,
这样好的过程你们都没有看到。

我们要看画家作画的过程,看不到甚至要用X光去还原底下一层层都是些什么。
我们要看鲁迅或韩寒的手稿,最好是不清楚的勾勾抹抹的那种,才能了解当时当
事,都发生了些什么。

代码,也是一样的。如果我们跟踪Linux核心的所有历史版本,而不仅是分析最
近的,会得到更多的东西--为什么某个特性那么迟才添加进去;最初的有力地构
成整个系统是,是哪几个要素?

同学们看到那一大砣代码时想问的问题:你咋把它整出来的。

过程说:呶,先这样,再这样。

如果只给最后的结果,那就是:你猜呢。

2. 出错

我想让同学看到 老师也会出错,挟带的私货,更重要的是学习老师解决错误的过
程。

bug人人会造,代码能跑起来靠的一个重要功夫就是把各种bug杀掉。同学们最初
遇到bug的时候容易感到惊慌失措,并倾向于自我否定,"怎么会这样呢?"然后
就想知道,如何从"这样"恢复,最终把那一砣代码整出来并跑起来。

从bug中恢复过来,除了归类总结,文字材料以外,很重要的是让同学看到:呶,就
是这样。

没看过血的,理论学得再好,也当不了临床医生。

我甚至特意造出bug,大家一起傻眼,调吧。然后,我们一起看看调试bug的过程。

也演出了编程习惯。比如一对大括号,要先写前面后面,再添中间。这些,亲眼
所见与纸上看来,对初学者,终究有所不同。

说到这里插一个话题。颇有些研究生同学喜欢看视频学习的,我和几位学长都认
为非常不可取。理由非常多。其中一个是视频太慢,还有一个是视频往往太肤
浅。还有一个是视频可能会对初学者造成一个困扰--"为啥老师那么整能行,我同
样的操作,现象就不一样了呢?之前,我只有一步有一小点不同吧。版本不同,
那是什么?"

之所以课堂上的展示不必讨论上述话题,是因为无论展示编码过程,还是只展示
结果,然后分析,视频的弊端都是存在的。

3. 还是过程

稍微大一点的代码,都不是一次成型的。尤其,一定不是从头往后写的。

小学作文老师教我们,要有大纲。写代码也是的。可能,我们一个键也没有敲,
但是此时已胸有沟壑。这个时候老师得把这些沟壑都画图画图交代一翻,指点
好,这里我要写啥,这里我要写啥。

此外,为了保持一直可以编译、测试,而有时代码写作要持续几天的时间,中间
不可能连个厕所也不去。有时代码非常长,超出了初学者直接写作的能力。这个
时候,我们会一点点写--重要的是,在这一点点写的时候,始终保持可编译和测
试。所以,有时中间结果与最终的差别非常大。代码可能先多起来,然后又慢慢
删除掉一些,后来成了最终的样子。而不是像有的同学想的,一直由少到多。

我的一个比喻。如果你体力不济,还想游过一个大湖,我们要做的不是横渡,而
是沿着湖边,不停地隔一会上岸歇会。我们确实更慢了,更是安全更重要。

这样,最终的代码 (到达对岸)与中间的代码的差别会非常大。有时,我们很难
一下子就想像到中间发生过些什么。

你能从残局猜到那些死掉的车马炮都怎么牺牲地么?我们用过程向同学们展示这
些。

4.保证

向同学们保证,你看代码确实是活人写的,因此你也能写出来。身边活人的榜
样,比书上印好的铅字更有说服力。

想当年我跟韩老师去北京学习,他买了个魔球 (能变成棒子还能变成三角什么的)。
没见过的同学,你可以把它当成三维的七巧板。韩老师很快拼了好几个形状。
拼,也正是看图纸上的最终结果,把过程猜出来。后来到球形的时候,他放弃
了,说这个不行。然后轮到我玩。他看我拼出球来,让我拆了。拿过去没两分钟
就把球拼出来了。

所以说,身边活人的榜样,比书上印好的铅字更有说服力。我用课堂上编码的过
程向同学们展示:活人编的啊,真是活人编的。

当然,让同学展示,比让老师展示的效果更好。不过同样,一旦同学们把这位同
学当成与他们不一样的人,那就失效了。这个时候,我真的也不知道该如何告诉
同学们:你真的也行。

装睡的人,你是怎么也叫不醒的。

5. 例子

我见过周老师讲JSP的时候,就在课堂上现搭环境,现写代码。见过林老师讲
win32api编程的时候,现写代码。

6. 未来的工作

考虑过做视频发布,但是我们的视频站点目前的清晰度,是为了看大片或小片准
备的,看代码,似乎清晰度还不够。再就是p2p上传了吧。

20120530

怀念,我最初的学生

怀念,我最初的学生

正下雨。约好一会儿一起去吃饭,和大E、建一、瀚哥三位同学,他们就要毕业
了。想一想,这也让人伤心不已。

最初与他们三位相识,是在我主讲的C++程序设计语言课上。也是在那门课上认识
了关同学。他们后来都做了我的学生,没有师生名义却有师生情份的。在这样的
课程上相识,现在想来,也是具有预言意味的。他们几位,在以后所有的项目
中,都承担了核心和最困难的部分。甚至,因此少有看得见的收获。

C++,像是宿命一样跟随我们。

事情上,相隔六七年,这门课程我也只讲了这一次。那一轮以后,就换成另一位
老师。我把我所有的课件都交给她了。当时有不少 (所有?)同事提到,这并非必
要,课件是属于个人的知识成果。很多理由中的一个,我如此地爱着C++,比这门
课程本身还重要,甚至比我对我的学生的感情还重要。我爱着我的学生,正是因
为他们都像C++一样,而并非相反。所以,即使换了人讲,我也希望我所看到的
C++的精神能够得到延伸。

当时那位老师说,"美国人确实挺先进的,他们现在都用STL。"我说,"我有小半
个学期的内容就是STL。"我非常欣慰,这部分内容看来不会换掉。说到这里,题
外话,我们也一直在使用最先进的工具,算是敏感地发现新的有前途的技术。

我的学生们就要毕业了,希望他们能一直秉承着C++的精神,始终成为核心,始终
承担最困难的部分。至少看得见的收获,既然大家都看得见,我们不妨不去看它。

C++,我们用这样的工具,一起征战了诸多领域,也打了很多败仗。如果有一天我
被钉十字架上了,我仍愿意承认他们是我最初的弟子。

我们是一起成长起来的。几年来,骨子里都渗透着一些彼此的性格特征。而且根
深蒂固。C++也一直在成长,也许有一天不小心就长成了别的什么。但是,有些东
西会就此固定不变,停留在你人生的某个阶段。

同时我庆幸和感到光荣的,他们都没有成为我,而是成为与我不同的人。

除了我们所说的"行政命令"以外,在工程上,我们讨论所有的可能,而无论那是
谁提出的。所谓"行政命令"就是,我们打算这么干了,不再讨论了,并且万一错
了就重头再来。

我看到他们从最初的接受我全盘的想法,逐渐成熟,在技术上屡屡试图反对我的
方案。我心中窃喜多次。

我对建一说过:我不同意你的方案,但是按你的方案去做吧。因为在项目中,你
做得爽,甚至比项目本身还要重要。

技术如此,更何况是在人生的各种选择上。最终,大家都会选择各种不同的路,
成长为完全不同的人。

如果所有的学生都和导师的想法一样,这个世界就要完蛋了吧。

其实,这是一种多么矛盾的心理。一方面,按自己的经验和判断,似乎这个方案
更好;另一方面,如果学生们完全按我的方案,那他们还能有什么前途可言--更
不用说,他们小野兽一样呲着牙死死护着自己的领域。

一起成长的六年,我看到你们的成长。当初小雏鸟一样,我还记得你们尝试那些
小程序,虽然幼稚,但是已经清晰露出的锋茫。现在,终于,一个个要展翅高飞了。

我想挨个揉揉你们的小脑袋瓜。去吧,也带着我的理想。很多父母或者老师都愿
意说,或者是这样做的,认为你们是他们全部的希望。我不愿意这样想,因为我
也有我自己的理想。但是终究,我看到你们的理想也飞起,我的理想正黯淡下去。

2008年底,我写了《北方之城》,主角的名字是建一。它还有一个副标题,在发
给你们每个人和编辑的时候都已删除。那个副标题是:告别理想,拒绝飞翔。

希望你们都努力去飞,别忘了自己的理想。偶尔,也能捎带上我的,我的那些最
初的纯真的理想。

我爱你们,更爱我的理想。愿这些理想在你们身上延伸--以各种不同的方式。

20120527

纪念一个虚构的人物

纪念一个虚构的人物

快醒的时候,正梦到我为他写纪念文章。我们主办世界学生会大会,他是哪儿来
的参会人员,开会中间意外死掉了,大家都写文纪念,要出个专集。我也写,不
过我们只有一面之缘,所以只是应景一下而已。

文字用碳素钢笔写在一张实木素漆的桌板上。桌板是用竖排的很多小片粘合而
成,小片上还有些节疤;纵向右起行文,每个节疤正好作为小节开头的标致。所
以。各个小节错落有致,小节间既有留白,也省了我很多笔墨。

* 野地生姜君,也就是xxx (此处缺失一个英文单词,是这位仁兄的英文名字,梦
醒了,我忘了)先生,他写得一手好文章,大家在未谋面前网络上俱已拜读过。
诸君及我都是他的笔下败将。

* 野地生姜此来,大家原以为是来搅事的,在邀请他参会前,我们会务组百般刁
难,几乎要拒绝发给签证,他只是从容诚恳应对,答"主要是顺便去长白山玩"。
及至见面,发现此君果然装扮不凡,大家西装革履,他一看就是会后马上要出
发,行装都已打好。

* 会议上,却是激烈地发言,言辞举止虽然不失优雅,但每次举手总是不合时宜。
好在我们会前早内部沟通完毕,任他这一票投出花来,也是枉然。

* 当时一直想问他,你是否知道结果早就会是这样,为什么一定要争早就定好的
事情?想来,他一定也仍是笑眯眯地坚持己见。

* 我问:听说学生会干部可以要求同学帮着做些事情,比如手机充值什么的,你
怎么看?

他答:当然喽,要这样。岂止手机充值,还要保镖、洗脚、代写作业、四六级保
过什么的。哈哈。

纪念文章就写到这里,我的梦醒了。

20120524

梦见鲁迅

梦见鲁迅

好像要毕业的样子,大家都在收拾行李。我有很多书,推在书架里,还有些颇积
了灰尘。一边整理,一边就发现有几本油印材料的作者还没有一起吃饭。嗯,今
天中午约了zhumao一起吃。

抬头看到鲁迅,手里夹着根烟。我说:中午一起约这几位作者一起吃吧,我原来
还约了zhumao。

鲁迅说:就只这一本刊物,我与他们还算相熟。

我说:真的啊,咱们竟然没有一起合作过几次。

梦里似乎我们合作的次数非常之少,虽然很熟悉。

鲁迅说:柔石呢,你和他熟么?

我说:学过柔石的课文。

心想,那课文就是柔石怀念你的。语似恭维,就没有说。同时也想,你一下就整
出个柔石来,也太有高度了,这饭我吃不成了。

鲁迅又说:那 江户川柯南 呢?

我说:这个看过漫画。

鲁迅说:你应该熟的啊,他还有个简称,叫 江南。

原来江户川南柯是江南的全称,第一次听说。我心想,这个也级别太高了。要是
以小资的习惯,我该说,江南我也见过。事实上只见过一次,他还不认识我,远
远地当成牛人观赏了一番,几年以后发现我记得的面貌完全不对,原来观察的是
另一位,也许是多事,反正不是潘海天先生或今何在先生就是了,他二位长相太
有特点了。

江南,或江户川柯南,这饭也吃不成了。我把刊物卷在手里。

遥想毕业的时候,没有卖掉的书,多一半都是与专业无关的。现如今,我最了解
和精读的部分,也大多是电子书。而办公室里,竟然一本书也没有。从书架上了
解一个人,其实也不怎么靠谱啊。

20120522

欧洲印象

欧洲印象

此去欧洲共2周,小有感触,汇报如下。

前半段胡吃海喝,后半段饿得七素八素,不见荤腥。先前,在雨里坐在码头上喝
小酒,看欧洲古建筑,小资得可以;后来每天只有各种沙拉,加面包,开始想念
诸多肉食。

这种反差,大至可以概括总体的感受了--各种不同。

1.白天长

刚刚查了地球仪,长春的纬度之低出乎我的意料,也解释了所有去过的欧洲城市
为什么白天那么长。长春的纬度,大致与希腊和西班牙相当,巴黎在长春很北,
估计与漠河大致齐平。

在夏季 (春分至秋分之前),整个北半球,越向北,白天越长,黑夜越短。此行所
有城市都 (哈本哈根,阿姆斯特丹,科隆,巴黎,华沙)都比长春北很多。

这与新疆比长春晚上黑得晚不是同一原理。新疆与长春都使用东八区,长春基本
在东九区,乌鲁木齐在东六区,差约3个小时。所以在都使用东八区北京时间,
在同一时间,长春落日的时候,乌鲁木齐的太阳还要再挂在天上3个小时。

同样因为都使用北京时间,长春的正午是在将近11点,而乌鲁木齐则上午14点。

而因为长春与乌鲁木齐纬度接近,所以二者的白天长度相差并不大。

这让我想起小学语文里学到 春天百花盛开,我们就问:哪儿呢哪儿呢?

世界之在,比祖国还大。人们之间的差别,也就相应存在,还来麻烦,也带来生
物和文化多样性。

2. 我丢了

阿姆斯特丹,要一顿转车。眼瞧前面有个柱子,同伴们都在柱子那边。转过柱
子,人都没了。再一看,列车开了!

转了半天,果然都上车了。我只好坐下一班车。

幸好此时已经换上了靠谱的诺基亚手机--换掉的是摩托的"心机",因为不会自动
寻找电信运营商,设置的位置又不容易找到。联系上同伴,"等我"。

然后找了位看起来英语流畅的,确定一下是坐这车到哪哪吧?不是!

下车换车,终于到了,见到了亲人。

基本算有惊无险吧。尤其后来大家又一起坐错车一次。小小国家,得分外小心,
可能一不留神就到了另一个国家。每个国家都有自己的语言,和自己的英语口
语,到处都是你不认识的字,连站的名字都发不出来那个音。

想起初中赵老师说的,学习不好的同学最痛苦了,因为他一直学的都是新知识。

3. 登山杖丢了

很文艺地参观了一些博物馆。感叹啊。。。等诸多小资做派。然后,发现把登山
杖落在了上一个博物馆的卫生间里。大家陪我一起跑回去,正是马上要关门的时
间了。

卫生间已经锁了,工作人员替我开门并取回来。谢谢啊。

此时,估计有小资准备跳出来说,在国内早就丢了。其实也不一定,差不多,看
运气。偶像在华沙吃饭,然后回去找伞,服务员说"没人看着",已经没了。丹麦
的Lars在北京喝啤酒 (在哪喝就不知道了,反正他在桂林路路边摊也喝得挺好,
还吃肉串),把一个画着国家地理标记的包扔那了,里面有尼康单反相机,还有
护照和钱,啥也没丢。

就是拼人品。

4. 购物

我没购物,但是看到老多中国人购物了。多到什么程度呢?很多商店的服务员、
很多机场免税店的服务员,都是中国人。

还是阿姆斯特丹,日本料理店。没错,在荷兰吃日本菜。先是荷兰本地姑娘负责
点菜,可算完事了,一哥们来了,一看像华人,一口英语,飞快地说完了。啊?
然后他一看我们似乎不太懂,转身走了。不一会,我身后有女声,"对不起,国
语可以么?"

我说,"酷~~"

然后顺畅沟通。先前那位哥们是香港的,完全不会普通话,这位估计是台湾的。

感觉不错是吧?这家店一杯热水2欧元。而且绝对不敢喝多,厕所在地下室,楼
梯几乎75度下行,非常窄。

各大商店,准备购物的时候,就上来一张国人面孔,外国营业员可能都不好意思
自己居然不会汉语。退税啥的,根本不用担心找不到地方,排着很长的队,直接
找个中国人问是不是排这就行了。

在德国,偶像听到两个老外说了一顿本地方言,结论是指着我们"They are
coming"。

而且,这不是旅游季。

5. 不是日本人

因为以前日本人比较多,到处日文标识很多,现在主要景点都有中文标识了。以
前老外见你经常说"困你去哇",现在一般是"你好。"

例外的。偶像在凯旋门遇到两哥们,先是用英语或者日语问了偶像一句,然后说
"japanese?",后半句我听到了,转头瞧。这俩哥们开始用汉语内部交流。

我被"你好"了好几次。一次是哪的提供拍照作背景的罗马士兵,活的,过来跟我
握握手,然后说"你好"。我还是没照相。另一次是我从一个迷宫里转出来,看几
个老外瞧我乐,我说"太容易了"。其中一个说,"你好"。我说"你发音不错啊",
他说,"谢谢"。哈。然后说,"我就会这两句啦。"

想起Anders教授,这位学者会用N多种语言说:啤酒。他会很多种语言,包括
Lisp。

爬一个绳梯,看一个日本孩子兴奋得不行在那爬,一抬头看见我,说"日本人?"
我能听懂"日本人"这个日本词,《鬼子来了》里有台词"日本人在什么地方关着"。
我摇摇头,也不会说"不是",想好心加油一下也不会说。想他年战场上相遇,竟
然也没啥可说的。

6. 带本书

马老师临出关前要买书,被我推荐买了《雪冷血热》,东北抗联史。是在欧洲的
主要读物。

每每读起抗联苦,就觉得吃得差的时候也不算什么;每每读起抗联,就想,还是
得好好锻炼身体,不定哪天又打起来了。

我跟Lars很久以前聊过一次,谈到:我们这样多交流挺好,不然可能就只能用战
争交流了。抗联内部各种矛盾不信任,甚至你死我活,很多由于交流不畅导致的。
如果多看看,多听听,少些既有假设,也许能好很多吧。