计算机科学入门班报名

(2020.05.29 更新:根据实际授课情况,更改了课程的内容简介。去掉了一些可有可无的内容,增加了解释器等关键的内容。)

(2020.04.28 更新:半个月过去了,却似乎过了一年。零基础的同学们得到了让我有点吃惊的进步,我为此感到欣慰。同学们也反应一周两节课已经忙不过来,因为我会给他们很多练习,引导他们进行独立思考。所以考虑之后,决定把课程的间隔改为一周一次,这样课后有充足的时间来练习,消化,吸收。)

(2020.04.16 更新:经过一段时间的准备,第一期的计算机科学基础课程已于 4 月 13 日星期一顺利启动。由于人数和时区限制,后来报名的同学会被安排到下一期参加。另外由于北美时区关系,可能会有一个专门的“北美班”,等待合适的时间启动。欢迎大家继续报名。描述请说明希望报名参加“第二期中国班”还是“第一期北美班”。)

我需要更多的“小白”来上我的入门课。自从上次准备开课一来,我这里有挺多申请者,但他们很多都已经有一些基础,有工作多年的工程师,团队带头人。不过我想先讲“零基础”课程,而让那些需要更进一步的人等一等。

为什么重视“零基础”教育

有些人可能不大明白我为什么喜欢讲“零基础”课程。一方面,真正好的教育应该是能让完全无基础的人顺利掌握的。就像爱因斯坦说:“如果你不能给一个六岁小孩解释清楚,那你并不真的懂。” 所以“零基础”的学生能够检验我是否达到了这个“真懂”的目标。

实际上,我的很多深刻理解,都是通过反复琢磨非常基础的概念获得的,而不是通过很“高级”,很复杂的概念。我最常用的“心理模型”,其实跟初学者第一节课学的内容差不多。

在我心里并没有“初学者”和“资深者”的差别。我发现很多工作了几十年的工程师,很多连最基本的概念都是一知半解的,这也许就是为什么他们在工作中无法找准正确的方向,经常瞎撞。

经验告诉我,有一些基础,特别是从错误的地方学过一点东西的人,容易在教学中产生各种麻烦的心理。加上急功近利的目的,甚至会表现出“你讲的这些对我有什么用?”的态度。

我不希望跟这种人对话,反而觉得教完全不会的人更开心一些,我甚至愿意教小孩子。看着他们从一无所知,到逐渐领悟,甚至在某些方面超越资深工程师,这比起教其他人更有成就感。

从社会的角度,一无所知的人是最需要帮助的。因为他们的思想不受已有知识的牵绊,也是最容易吸收干净思想的人。改善他们的生活和思维能力,会让我觉得更有意义。

对 PL 表现出极大兴趣的人,我都会比较谨慎。因为我经常提到 PL,已经有太多功利人士,试图通过这个方向取得地位上的“优势”。有时在别人转发的知乎帖子看到有“PL 人”发一堆让人不明觉厉的术语,让我担心我的教学会助长这些人的气焰。

有人告诉我,都是因为我总是谈 PL,知乎上才有这么多人鹦鹉学舌,用一堆术语打压其他人。我之前毫不知情,但我觉得不能再不经意帮助他们了。有些人已经得到太多,却想进一步取得压制其他人的优势,我不喜欢这种贪婪的人。

我对 PL 和编译器人的一些看法,已经在之前一些博文里说得比较清楚了。我希望避免“培养”出太多这类人。从我这学到东西,到头来成为我和其他人的灾害。所以我教学初期肯定不教 PL 专业的内容。

这对于真心想了解 PL 的人来说可能是一种不幸,但也许有某种方式调和这种矛盾。总的说来,传授甚至指点关于 PL 的方向,我都会很谨慎,而且会很贵。

我最近的课程,恐怕要针对完全的小白。同时我会根据从中获得的教学经验写一本人人都能看懂的书,然后进行进一步的教学,写更深入一些的书,如此循环…… 最后我希望破解很多计算机的领域(比如操作系统,数据库,AI),把它们化繁为简。

由于目前小白数量太少,我欢迎不会编程,或者知道很少的人来报名。

课程内容

课程计划涵盖计算机科学的主要思想。当然因为时间和学生实际的吸收速度,到时候可能会有调整。大概会包括以下内容:

  1. 基础语言构造,包含最常用几种语言的主要特性。
  2. 递归思想,递归数据结构的处理。
  3. 基本数据结构,少量基础算法。
  4. 函数式编程基本思想。
  5. 抽象的思维方式。
  6. 基础的解释器原理。

如果从书籍的覆盖面来看,我试图包括以下书籍的精华内容:

  1. SICP(前 4 章)
  2. The Little Schemer
  3. A Little Java, A Few Patterns

你将受到的训练

  1. 掌握系统化的思维方法,严密的推理技巧
  2. 写出简单,优雅,容易理解,可靠的代码
  3. 从无到有,不依赖于任何语言的特性,解决各种计算问题的思路

授课方式和理念

  1. 采用网络授课方式。
  2. 小班,人数不超过 12 人。
  3. 有聊天室讨论课程内容,有合适数量的作业和思考题。
  4. 无教条主义,无死知识。

课时和收费

因为是第一次授课,所以时间只是初步估计,到时候要以实际情况为准。

  1. 估计两个月完成课程。如果中途有事耽搁,或者感觉太紧凑无法消化,可能按需少许延长。
  2. 每周 1 次课,总共 8 次。
  3. 上课时间安排在国内时间下班后,晚上 8 点的样子。
  4. 为了讨论充分放松,每堂课 2 小时左右。
  5. 收费暂定每人 12000,可能根据实际人数调整。

人员要求

  1. 没有很多已有计算机知识。
  2. 心理健康。谦虚好学,能平等讨论。

申请方式

发送 email。标题:申请计算机科学基础课程。内容包括:

  1. 简单自我介绍。教育经历,工作单位,工作内容,上课的动机等。
  2. 你的时区,因为可能按时区分班。
  3. 附上简历。

开始时间

我打算在一两周之内安排面试申请者,准备一两次课的内容,然后开始教学。

一对一课程

经过一段时间的实验,我推出了新的一对一课程方式。如果考虑一对一的教学,你可以参考这篇文章。班级授课的模式仍然会继续进行,只是你可以有两种选择。