原文

计算机科学入门班报名

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

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

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

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

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

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

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

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

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

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

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

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

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

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

课程内容

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

  1. 基础语言构造和计算原理。包含最常用几种语言的主要特性。
  2. 递归思想。递归数据结构的处理。
  3. 函数式编程基本思想。
  4. 面向对象思想。抽象,模块的思维方式。
  5. 类型系统思想。涵盖所有编程语言的统一思维方式。
  6. 编程思想与硬件设计,操作系统之间的关系。
  7. 计算理论(lambda calculus,图灵机,停机问题等)。
  8. 如果时间允许,可选少许中级内容(逻辑式编程,初级定理证明等)。

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

  1. SICP,HtDP
  2. The Little Schemer
  3. A Little Java, A Few Patterns

会接触到的语言:

  1. Scheme
  2. JavaScript
  3. Java
  4. 可能有少许 Haskell,Typed Racket,Ceylon 的例子

不包含的内容:

  1. 课程重点在于应用层面的思维方式,不包括语言底层实现。
  2. 不包含解释器,编译器,PL 理论等内容。

授课方式和理念

  1. 采用网络授课方式,需要签署版权保密协议。
  2. 小班,人数不超过 12 人。
  3. 主要采用问答互动教学,大家讨论的方式。会有少量幻灯片和动画。
  4. 具有灵活性。根据实际教学情况,决定下一堂课的内容。
  5. 其余时间有专用聊天室讨论课程内容,有少量作业,思考题。
  6. 无教条主义,无死知识,无人不懂。

课时和收费

因为是第一次授课,所以时间只是初步估计,到时候要以实际情况为准。第一次授课有一定随机性,收费可能比稳定之后低一些。

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

人员要求

  1. 没有很多已有计算机知识。
  2. 心理健康。谦虚好学,能平等讨论。
  3. 不好为人师。我们这里没有老师和学生之分。

申请方式

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

  1. 简单自我介绍。教育经历,工作单位,工作内容,职级,上课的动机等。
  2. 你的时区。
  3. 附上简历。