计算机科学基础班第 5 期成功结束

现在我可以宣布,计算机科学基础班(第5期)已经圆满结束。课程的效果大大超乎了我的预期。不但原有的内容得到了很大改进,而且新增加的命令式编程方法,Python,Java,Rust 语言,也恰好地实现了它们的作用。到最后还增加了一节特别的 Bonus 课:C++。

完成了全部课程的同学,不但学会了精髓的编程技巧,而且同时掌握了五种很不一样的编程语言。从函数式语言,面向对象语言,一直到最底层的需要自己管理内存的语言。

完成课程全部练习的同学,用这五种语言都写出了一个解释器,所以总共写了五个解释器。实现了闭包,递归等关键功能。这种教学方式,可以说对于有经验的高级程序员都是前所未有的,更何况班里有好几个零基础同学,居然也能跟上…… 其中大部分 😏

最初加入 Rust 语言的时候我还有点担心,Rust 的类型系统这么苛刻,门槛很高,我们能否用它写出解释器?答案是可以的。虽然用 Rust 写我们的解释器确实很头痛,但好些同学还是写出来了,并且从中理解了 Rust 的内存管理最核心的部分:ownership, lifetime, Rc, RefCell… 这不是肤浅的尝试,而是从根本上理解了它们是什么。

用 Rust 写解释器,对于我来说也是第一次尝试。过去的二十多年,我用其它语言写过数不清的各种各样的解释器,包括类型系统,编译器,混淆器在内。然而这次用 Rust 写基本的函数式语言解释器,居然给我造成了不小的麻烦。网络上找不到任何可以参考的代码,只有靠自己的探索和理解。最后我不但写出了解释器,而且利用这个思考的机会,彻底地理解了 Rust 的内存管理原理,并且发现它存在相当严重的问题。

课程最后阶段的时候,因为我的肩膀伤势加重,不能打字,暂停了三周之久。肩膀为什么伤势加重?其实不是因为用电脑,而是…… 其中的酸甜苦乐和启发,真是可以写成一本书,这里我就不说是怎么回事了。但最后,我很高兴地看到了课程的圆满结束。它不但教会了同学们精髓的思想,而且教会了我自己很多。

现在我的肩膀还没有康复,而且我的头脑需要休息。所以这条信息之后的很长时间,我可能也不会再更新。