学校不教的计算机课

最近HN上有一篇讨论较火的文章Computer Science Courses that Don’t Exist, But Should,翻译了一下。注意,这篇文章首先发布在csdn,禁止任何形式的转载。

CSCI 2100:忘掉面向对象编程

思考如何创建、使用不属于任何对象的变量。学习“函数(functions)”,它跟方法(methods)很像但是更有用的多。前提是你已经学过一门使用了“抽象基类的课程”。

CSCI 3300:像经典软件学习

讨论并剖析具有划时代意义的软件产品,比如VisiCalc、AppleWorks、Robot Odyssey、Zork、和MacPaint等。学习的重点,在于用户界面,以及由硬件限制激发出的创造力。

CSCI 4020:用低效语言编写高效代码

对性能进行深度分析,用解释型的Python语言来写出能与传统的编译型C++匹敌的代码。而且代码还会更加健壮,写起来也很有意思。

CSCI 2170:用户体验之”命令行工具”

提高用户体验的原则也同样适用于命令行工具的设计,要专注于输出信息的相关性,可读性,最简化。UNIX的“ls”命令就是值得好好学习的一个例子。

PSYC 4410(心理学高年级课程):程序员内心强迫症

能辨别和理解那些无关紧要,但是程序员偏偏会去较真的事情:代码格式、如何分类、类型系统,非要将项目分解成很多个。还包括接触到不熟悉的系统时下意识的批评的细节。


HN精彩评论

  • 我能再加一个吗?“网络不像你想的那么简单:分布式系统生存指南”。作为一个在职业生涯中花了很多精力建设高性能网络,也和这个领域里地人公事了很长时间的一个程序员来说,我对现在从名校毕业的学生在这方面的知识之匮乏感到震惊。很多基本的东西,像是应用的无线传输,系统如何处理数据包,等待对应用的影响等等,对于一些程序员来说简直一窍不通。现在看来,网络连接的实质问题,确实被严重忽略了。
  • 程序员分为两种:一种被训练成能在熟悉的环境中称职地编码;另一种则像是《黑客帝国》中选择了红色药丸的人——他们知道事物的本质。
  • 再加一些:
    • 在白板上写翻转二叉树
    • 用COBOL实现Monads
    • 如何正确地纠正网络上的评论
    • 上一条中的槽点可能有哪些
    • 对Twitter的多项式机器人算法有多糟糕的介绍
    • 用Haskell学习函数式编程
    • 上一门课的实际用途
  • 亲爱的机算计学院:请不要再拿“算法导论”课来愚弄你们的学生了,这门课应该改为“组合算法导论”,因为这才是你们教的东西。你们完全忽视了“数字算法”,这是许多其他计算机学科分支的基础(计算机物理、计算机化学、计算机生物学等),同时这也是机器学习和数据科学毕业生薄弱之处。或者也可以保留“算法导论”的名字,但是教50%的算法和数据结构,50%的数字计算方法和科学计算。
  • “建立端对端软件解决方案”如何?让这门课贯穿所有软件开发流程(想法-设计-原型-公测-发布-迭代)。我最好的朋友马上毕业了,可他对软件开发一无所知,根本不了解现在的市场需求。
  • “Debug”:严肃地讲,这是门完整、系统的课程,而且越早开设越好。这是其他学科/工程不可缺少的技能。
  • 计算机科学和软件工程应该分成两门完全不同的学科。


Leave a comment

您的电子邮箱地址不会被公开。 必填项已用 * 标注