重新学习计算机科学和程序设计

这学期学了什么

课程

这学期学校开了两门专业相关的课,一门是《计算机科学与工程导论》、一门是《C 语言程序设计》,然而只学它们会导致大脑被污染。学校学的东西落后无用(或者是晦涩难懂)=>自学已经是显而易见的规律。

《C 语言程序设计》似乎在之前的某篇文章里辣评了一下,这里不说了。但不得不承认的是,这门课发挥了它应有的价值:虽然学校自己的教授方法落后,作业考试大部分只是 intellectual masturbation,用的 IDE 是 Dev C++ 这种。为了让自己写得舒服点,我迫使自己掌握了 VS Code / VS + Git 的工作流,并且顺便熟悉了 Linux 操作系统等等。

所以,如果没有这么一套课程,我没有那么强烈的动力去做这些事情——这些事情其实就是 MIT 那套大名鼎鼎的 The Missing Semester of Your CS Education 课程会讲授的内容,但是我一直都没机会(或者说不敢/不想)上手做一遍。

《计算机科学与工程导论》这课上得也奇葩,老师就干讲 PPT,从数据结构讲到体系结构,整个学期就 2 次不痛不痒的作业。不过令人欣慰的是,有一次作业引导我们去思考递归算法和迭代算法对系统性能的影响,而不是完全聚焦于一些 intellectual masturbation 的功能实现,说明这门课其实并非一无是处。

LBD principle

Learn By Doing,这个谁都会讲,但是得自己做了才真的领略到。我不禁开始咒骂高中时期的自己,为什么那时就死活领会不到这个原则。不过也好,至少现在领会到了。

但是由于这个原则,我在相当长一段时间内又掉进了一个坑——就是看到什么都感觉想做一遍,并且经常 PUA 自己头脑里装的理论知识没有价值,觉得自己什么都不会做不如死了算了,搞得自己身心俱疲,并且学到的内容也很肤浅。知道自己想要什么再去做可能才是根本,我正尝试慢慢地接受这个事实。

重新学习

早在高中的时候就听说过 Lambda Calculus 的大名,但苦于认为自己没有一点系统的程序设计基础,于是对这些基础计算机科学敬而远之,后来才发现它们跟逻辑学、分析哲学其实是差不多的东西。

最近刷 QQ 空间看到有位朋友在一直推一些 Lambda 演算的科普视频,抱着好奇的心态点进去看,不到几分钟就立刻觉得自己以前学的完全不叫“计算机科学”(虽然这么说肯定是错的),于是想要好好了解一番这些东西。

所以自己又顺藤摸瓜找到了一些关于函数式编程的教程,不久前刚在 JavaScript 解释器上使用纯函数实现了单向链表的数据结构,第一次体验到以函数为 building block 的程序设计的灵韵——同时对计算的本质有了更加深入了理解;以及第一次知道程序还能这么学——就从单纯和解释器打交道开始,然后就直接是函数、抽象、递归······并且不受语言特性的打扰。最近书架上添置一本大名鼎鼎的程序设计教材,就是 SICP。希望以后能腾出足够的空闲时间好好领略。

不过这一定不是全部,好奇和求知的路没有尽头。