计算机科学入门班报名
我需要更多的“小白”来上我的入门课。自从上次准备开课一来,我这里有挺多申请者,但他们很多都已经有一些基础,有工作多年的高级工程师,团队带头人。不过我想先讲“零基础”课程,而让那些需要更进一步的人等一等。
为什么重视“零基础”教育
有些人可能不大明白我为什么这么喜欢讲“零基础”课程。一方面,真正好的教育应该是能让完全无基础的人顺利掌握的。就像爱因斯坦说:“如果你不能解释给一个六岁小孩,那你并不真的懂。” 所以“零基础”的学生能够检验我是否达到了这个“真懂”的目标。
实际上,我的很多深刻理解,都是通过反复琢磨非常基础的概念理解的,而不是想一些很“高级”的复杂概念。我最常用的“心理模型”,其实跟初学者第一节课学的内容差不多。
在我的心里从来就没有“初学者”和“资深者”的差别。我发现很多工作了几十年的工程师,很多连最基本的概念都是一知半解的,这也许就是为什么他们在工作中无法找准正确的方向,经常瞎撞。
经验告诉我,有一些基础,特别是从错误的地方学过一点东西的人,容易在教学中产生各种麻烦的心理。加上急功近利的目的,甚至会表现出“你讲的这些对我有什么用?”的口气。
我不希望跟这种人对话,反而觉得教完全不会的人更开心一些,我甚至愿意教小孩子。看着他们从一无所知,到逐渐领悟,甚至在某些方面超越很多资深工程师,这比起教其他人更有成就感。
从社会的角度,一无所知的人是最需要帮助的。因为他们的思想不受已有知识的牵绊,也是最容易吸收干净思想的人。改善他们的生活和思维能力,会让我觉得更有意义,让生活充满了阳光。
对于对 PL 表现出极大兴趣的人,我都会比较谨慎。因为我经常提到 PL,已经有太多功利人士,试图通过这个方向取得地位上的“优势”。有时在别人转发的知乎帖子看到有“PL 人”发一堆让人不明觉厉的术语,让我担心我的教学会助长这些人的气焰。
有人告诉我,都是因为我总是谈 PL,知乎上才有这么多人鹦鹉学舌,用一堆术语打压其他人。我之前毫不知情,但我觉得不能再不经意帮助他们了。有些人已经得到太多,却想进一步取得压制其他人的优势,我不喜欢这种贪婪的人。
我对 PL 和编译器人的一些看法,已经在之前一些博文里说得比较清楚了。我希望避免“培养”出太多这类人。从我这学到东西,到头来成为我和其他人的灾害。所以我教学初期肯定不教 PL 专业的内容。
这对于真心想了解 PL 的人来说可能是一种不幸,但也许有某种方式调和这种矛盾。总的说来,传授甚至指点关于 PL 的方向,我都会很谨慎,而且会很贵。
我最近的课程,恐怕要针对完全的小白。同时我会根据从中获得的教学经验写一本人人都能看懂的书,然后进行进一步的教学,写更深入一些的书,如此循环…… 最后我希望破解很多计算机的领域(比如操作系统,数据库,AI),把它们化繁为简。
由于目前小白数量太少,我欢迎不会编程,或者知道很少的人来报名。
课程内容
课程会涵盖计算机科学的主要思想。大概会包括以下内容(可能会按情况调整):
- 基础语言构造和计算原理。包含最常用几种语言的主要特性。
- 递归思想。递归数据结构的处理。
- 函数式编程基本思想。
- 面向对象思想。抽象,模块的思维方式。
- 类型系统思想。涵盖适用于所有编程语言类型系统的统一思维方式。
- 编程思想与硬件设计,操作系统之间的关系。
- 计算理论(lambda calculus,图灵机,停机问题等基础)。
- 如果时间允许,可选少许中级内容(逻辑式编程,初级定理证明等)。
如果从书籍的覆盖面来看,我试图包括以下基本书的精华内容,去其糟粕:
- SICP,HtDP
- The Little Schemer
- A Little Java, A Few Patterns
会接触到的语言:
- Scheme
- JavaScript
- Java
- 可能有少许 Haskell,Typed Racket,Ceylon 的例子
不包含的内容:
- 不包含解释器,编译器,PL 理论内容。
授课方式和理念
- 采用网络授课方式,需要签署版权保密协议。
- 小班,人数不超过 12 人。
- 主要采用问答互动教学,大家讨论的方式。会有少量幻灯片和动画。
- 具有灵活性。根据实际教学情况,决定下一堂课的内容。
- 其余时间有专用聊天室讨论课程内容,少量作业。
- 无教条主义,无死知识,无人不懂。
课时和收费
- 估计一个月完成课程。如果中途有事耽搁,可能按需少许延长。
- 每周 2 次课,总共 8 次。
- 为了讨论充分,每堂课 2 小时左右。
- 收费暂定每人 12000(可能根据人数调整)。
人员要求
- 没有很多已有计算机知识。
- 心理健康。谦虚好学,能平等讨论。
- 不好为人师。我们这里没有老师和学生之分。
申请方式
- 发送 email。
- 标题:申请计算机科学基础课程。
- 简单自我介绍。教育经历,工作单位,工作内容,职级等。
- 附上简历。