(2020.05.29 更新:根据实际授课情况,更改了课程的内容简介。去掉了一些可有可无的内容,增加了解释器等关键的内容。)
(2020.04.28 更新:半个月过去了,却似乎过了一年。零基础的同学们得到了让我有点吃惊的进步,我为此感到欣慰。同学们也反应一周两节课已经忙不过来,因为我会给他们很多练习,引导他们进行独立思考。所以考虑之后,决定把课程的间隔改为一周一次,这样课后有充足的时间来练习,消化,吸收。)
(2020.04.16 更新:经过一段时间的准备,第一期的计算机科学基础课程已于 4 月 13 日星期一顺利启动。由于人数和时区限制,后来报名的同学会被安排到下一期参加。另外由于北美时区关系,可能会有一个专门的“北美班”,等待合适的时间启动。欢迎大家继续报名。描述请说明希望报名参加“第二期中国班”还是“第一期北美班”。)
我需要更多的“小白”来上我的入门课。自从上次准备开课一来,我这里有挺多申请者,但他们很多都已经有一些基础,有工作多年的工程师,团队带头人。不过我想先讲“零基础”课程,而让那些需要更进一步的人等一等。
有些人可能不大明白我为什么喜欢讲“零基础”课程。一方面,真正好的教育应该是能让完全无基础的人顺利掌握的。就像爱因斯坦说:“如果你不能给一个六岁小孩解释清楚,那你并不真的懂。” 所以“零基础”的学生能够检验我是否达到了这个“真懂”的目标。
实际上,我的很多深刻理解,都是通过反复琢磨非常基础的概念获得的,而不是通过很“高级”,很复杂的概念。我最常用的“心理模型”,其实跟初学者第一节课学的内容差不多。
在我心里并没有“初学者”和“资深者”的差别。我发现很多工作了几十年的工程师,很多连最基本的概念都是一知半解的,这也许就是为什么他们在工作中无法找准正确的方向,经常瞎撞。
经验告诉我,有一些基础,特别是从错误的地方学过一点东西的人,容易在教学中产生各种麻烦的心理。加上急功近利的目的,甚至会表现出“你讲的这些对我有什么用?”的态度。
我不希望跟这种人对话,反而觉得教完全不会的人更开心一些,我甚至愿意教小孩子。看着他们从一无所知,到逐渐领悟,甚至在某些方面超越资深工程师,这比起教其他人更有成就感。
从社会的角度,一无所知的人是最需要帮助的。因为他们的思想不受已有知识的牵绊,也是最容易吸收干净思想的人。改善他们的生活和思维能力,会让我觉得更有意义。
对 PL 表现出极大兴趣的人,我都会比较谨慎。因为我经常提到 PL,已经有太多功利人士,试图通过这个方向取得地位上的“优势”。有时在别人转发的知乎帖子看到有“PL 人”发一堆让人不明觉厉的术语,让我担心我的教学会助长这些人的气焰。
有人告诉我,都是因为我总是谈 PL,知乎上才有这么多人鹦鹉学舌,用一堆术语打压其他人。我之前毫不知情,但我觉得不能再不经意帮助他们了。有些人已经得到太多,却想进一步取得压制其他人的优势,我不喜欢这种贪婪的人。
我对 PL 和编译器人的一些看法,已经在之前一些博文里说得比较清楚了。我希望避免“培养”出太多这类人。从我这学到东西,到头来成为我和其他人的灾害。所以我教学初期肯定不教 PL 专业的内容。
这对于真心想了解 PL 的人来说可能是一种不幸,但也许有某种方式调和这种矛盾。总的说来,传授甚至指点关于 PL 的方向,我都会很谨慎,而且会很贵。
我最近的课程,恐怕要针对完全的小白。同时我会根据从中获得的教学经验写一本人人都能看懂的书,然后进行进一步的教学,写更深入一些的书,如此循环…… 最后我希望破解很多计算机的领域(比如操作系统,数据库,AI),把它们化繁为简。
由于目前小白数量太少,我欢迎不会编程,或者知道很少的人来报名。
课程计划涵盖计算机科学的主要思想。当然因为时间和学生实际的吸收速度,到时候可能会有调整。大概会包括以下内容:
如果从书籍的覆盖面来看,我试图包括以下书籍的精华内容:
因为是第一次授课,所以时间只是初步估计,到时候要以实际情况为准。
发送 email。标题:申请计算机科学基础课程。内容包括:
我打算在一两周之内安排面试申请者,准备一两次课的内容,然后开始教学。
经过一段时间的实验,我推出了新的一对一课程方式。如果考虑一对一的教学,你可以参考这篇文章。班级授课的模式仍然会继续进行,只是你可以有两种选择。