如何教孩子学习编程

作者:范德成

链接:https://www.zhihu.com/question/19705160/answer/164490969

我想过这个问题多年了。我家娃长大以后,我会这样教她:首先,计算机的本质是有限状态自动机。所以先教有限状态自动机。为了有趣,做一个C语言字面量字符串解析器,也就是能解析"Hello\tWorld\x21\x20What's\x0020up?\040\n"这样的一个状态机。然后,介绍冯·诺依曼计算模型。主要概念是分别存储程序和数据。程序不再只是放在ROM中的,而是可以加载进RAM里执行的。

再接下来学习BASICA/GWBASIC。看起来有点老古董,但实际上它们能做的事情也不少,比如用来做一个简单的财务处理程序,或者画一个饼图,做一个汉诺塔小游戏等等。内存只有64KB可用,还可以读写文件,可以让孩子学到内存和文件大小的概念。BASICA/GWBASIC学到了非结构化编程。

接下来学QBASIC,它带来了结构化编程的概念。包括函数调用。学函数调用时要教一下栈的概念。QBASIC教的时候还要着重学一下内存池。因为直到QBASIC为止还没有malloc的功能。要教一下用内存池怎样分配和释放对象。

QBASIC可以学到初二。然后教C语言初步,这个讲究程序效率和汇编对应性的中级语言。内存分配、未初始化内存、读写越界、野指针、内存泄漏、重复释放、general protection fault等等都要讲一下,并教一下怎样做错误处理。结构体的内存布局、对齐。汇编代码一览。然后用函数指针来实现一下接口和多态。

初三估计可以讲http://VB.NET和C#了。强类型、内存安全并带垃圾回收的编程语言的好处。泛型的优势。用http://VB.NET8.0以上,或者C# 2.0以上,可以用它们的state machine功能教一下协程coroutine的概念。同时以回顾历史的方式教一下Windows 3.x协作式多任务。用C#模拟一下Windows的消息循环。它们和Windows 95的抢占式多任务的不同。并且,如果在语言没有提供协程功能的情况,怎样手动展开栈来实现协程。

C#和http://VB.NET的面向对象编程必然是要教的。这是一个好时机。

然后教Python和JavaScript。这两门动态类型语言最好和TDD一起教。这是因为TDD可以避免动态语言运行时再确定类型而让人容易犯的类型错误。TDD中可以随时添加有关类型的断言,以避免类型错误。而且,动态语言本来就写起来比较简洁,加上TDD既保证了质量,又不会像静态类型语言那样繁琐。

Python和JavaScript的面向对象编程也必然是要教的。

接下来,估计是在高一吧。要深入C语言了,并结合操作系统和应用程序环境,用它来做几个生产用的程序。话说高中课业压力大,如果学不完,放到大学再学也是可以的。

然后学C++。学C语言的时候我觉得C89标准就行,但C++我觉得不必学太老的,因为在我看来,C++ 98本身就是一个不成熟的版本。应该学C++ 11/14等新标准。直接啃@vczh大侠审校的C++ Primer 5th Edition就行。

数据库学两个,Python/C#访问sqlite和C#访问SQL Server。

多线程编程。先教有锁数据结构。等到有锁数据结构学好了以后,再教互锁(interlocked)操作。完了以后再介绍一下无锁多线程编程,它的优势和劣势。

最后要讨论一下如何把多线程程序手动转换为协程以让它变得可以做单元测试。基本的数据结构和算法。其他主题,随需要而学,包括计算机体系结构、数据结构和算法、网络、操作系统、数据库、编译原理(包括垃圾收集)、图形学、图像处理、音频处理、函数式编程、机器学习等。

所有这些教学都以双语进行,特别是语言规范等都直接看英文原版。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容