别逗了!……什么?是真的?!
痛点
我在大学里开设一门《信息系统开发》课程,授课对象是信息管理专业高年级的本科生。
作为最后一门系统类课程,这门课需要大综合,就是把之前学到的知识都用上,做一个实际的系统出来。
系统开发需要进行多个步骤。规划、分析、设计、实施和测试维护。每当课程进展到了实施环节,就总会有学生来我这儿哭鼻子。
呜呜呜……
你怎么了?
我不会写代码!
怎么可能呢?C语言是必修课,许多学生还选修了Java和ASP.Net。如果你不会写代码,C语言课你怎么过的?
学生每到这个时候都很坦诚——背下来了,就考过了。
背下来了?!这是编程好不好?绝对的实践类课程,你背了管什么用?我的三观受到了强烈冲击,立即感到脑缺氧。
学生这时候往往还不忘给我伤口上撒一把盐——“比思修还难背,考完就忘光了”……
许多学生刚开始学编程还有些新鲜感。但是如果遭遇到挫折,会立即选择四散奔逃。问题在于,他们第一门接触到的编程课是C语言。
语言
计算机语言有高级语言和低级语言之分。如果你觉得高级语言好,低级语言不好,那就大错特错了。二者实际上是一个连续光谱上的两端而已。
最低级的语言只由0和1构成。计算机看得懂。人要想看懂……反正我是不去尝试的。
高级语言计算机看不懂的。开发者用着越舒服,这语言就越高级。如果电脑能听懂和执行人话,那它就在使用一种非常高级的语言。
天底下没有免费的午餐。语言的“高级”也是通过权衡换来的,牺牲的东西叫效率。
如果你要设计的东西效率优先(例如操作系统或者导弹防御系统),那么应该选择低级语言。否则还是选择高级语言吧,别折磨自己。
小测验:C语言是高级语言还是低级语言?
别背了。我知道那本非常流行的教科书说它是高级语言,但它其实是披着羊皮的狼而已。
C语言有指针。指针可以直接对内存操作,可控性高效率也就高。可是缺乏计算机体系结构知识的学生学起来却一头雾水。
C语言是计算机专业的必修课合情合理。因为这是计算机专业毕业生吃饭的家伙。如果你用的是iPhone,其中大部分的App都是用C语言的一个变种Objective C写的;如果你用的是Android,那么手机操作系统是C写出来的。
可是信管专业的学生编程应用是哪些?开发个网站系统,做数据分析和数据可视化。C语言真的用得上吗?就算用得上,非得统一设置为编程入门课吗?
有没有适合非计算机专业学习的编程入门语言呢?
借鉴
MIT之前数十年都采用Scheme(Lisp语言的一个方言)作为6.001计算机导论课程的入门语言,培养了许多计算机科学界的优秀人才。
选择这门语言就是因为语法极其简单,半个小时就能讲完语法,后面专注介绍编程的思想。
这语言看起来很奇怪,满屏幕都是括号。
可是一旦你真正掌握了Lisp语言,那就是科技竞争中的核武器啊。《黑客与画家》中,格雷厄姆提到了他们公司自己的案例,那简直就是在碾压和欺负用其他语言的人们。
后来,MIT教学团队采用新崛起的Python语言替代了Scheme (Lisp),给学生的编程学习提供了更加无障碍且充满乐趣的路径。
为什么MIT不用C语言作为学生的编程入门课?MIT计算机系的教授不懂C语言吗?还是MIT的学生天资不足,难以学会C语言?
自己琢磨吧。
现在的程序开发,大都采用“搭积木”的方式。开发者会大量采用其他人制作的模块或者函数库。一种编程语言,如果有很多人用,社区就会更健康和强大。你使用这种编程语言,手头儿就会有更多类型的积木,会比其他人更好更快地搭出一个符合需求的系统。
如果你来了兴趣,打算学Python。如何入手呢?
课程
Udacity平台上面有一门课很受学生喜爱,叫做”Intro to Computer Science”。主讲者是弗吉尼亚大学计算机科学教授Dave Evans,曾荣获弗吉尼亚州的大学教师最高奖。
2013年,我学了这门课。课程介绍很简洁——“七周时间,从小白到会写搜索引擎”(意译)。
搜索引擎?!
Google是个印钞机,它的成功让人们对于搜索引擎开发羡慕而又觉得遥不可及。这门课的最大贡献就是破除了迷信。如果一个毫无计算机常识的初学者可以通过七周的学习掌握构建搜索引擎的基本方法,那这种技术还有什么神秘可言?
虽然不是初学者,但是我之前并不掌握Python语言。
我反复听过Page Rank的概念,但是从来没有真正深入了解甚至实践过。
而且据说Udacity平台的证书可以帮助学生在硅谷找工作哦。
我开始了尝试。
该课程根据MOOC的理念从头设计。2-3分钟一个单元,随时都有可能蹦出来问题。大多数问题直接在视频停止的截图上给出选项或者文本框要求回答,把教学和实践的互促过程设计得非常紧密。
课程里面还穿插介绍了很多有趣且实用的科技史知识,开阔了学生的眼界。
七周的时间里,这门课不仅介绍了Python作为结构化语言部分的基础数据结构,还让学习者自己从头用Page Rank算法搞了个小型搜索引擎出来。
最为贴心的是,所有编程环境都在线上提供,学习者只要拥有一个浏览器就行了。
尽管学生做出来的这个搜索引擎实用性并不高(想跟Google竞争市场还差得很远),但是——太有成就感了!
2014年的1月,我拿到了课程的证书。至今我还记得那种喜悦,那是一种眼见得汗水化作了收获的奇妙感觉。