惊人观点:无视计算机科学专业的10个理由

本文并不是否定计算机科学这个学位以及CS毕业生,而是指出了企业软件关心的方向性问题,更应该关注解决实际工程问题的能力,原文大意:

许多公司企业正在考虑无视CS学位来雇用能够提供真正成绩结果的程序员。这里解释一下为什么他们可能是对的。

想想这两个词语:计算机和科学。前者给世界的礼物是巨大的,从无所不在的拯救生命的电子医疗记录,到在一天中任何时候都有机会在Twitter上打嘴架。第二个词'科学'所代表的是一场智力运动,它带来了巨大的进步,比如小儿麻痹症疫苗,几次登月之旅,还有要列的太多其他事情。那么为什么可以如此快速地把这两个词组合成计算机科学,特别是当我们正在寻找我们编程团队的工作人员的时候?

因为这里有一份精美文档,里面充满了各种精彩的想法,比如新的编程语言、聪明的搜索算法、机器视觉算法以及处于中间的无数个概念,其中很多确实很棒。

问题是,我们中很少有人真正需要其中任何一个,一位朋友承认,他亲眼地看着一个开发团队的蓬勃发展,他之前把计算机专业的毕业生们都介绍过去了,他们却只雇佣了物理学家、会计师或其他精通数学的人。这些新员工更务实,专注于让机器交付,这几乎是所有企业都想做的事情。

这并不是因为CS学位不好,而是因为他们不会关心我们大多数人需要解决的问题。因此,这里列出一个相当不完整的清单,阐述为什么我们最好无视CS。

1.理论使人分心和困惑
许多计算机科学家在本质上都是数学家,对定理着迷的思维方式渗透到了这门学科中。一位理论家告诉我,所有的数学证明都只是程序,反之亦然,至少在他的脑子里是这样。他对交付的代码并不感兴趣,因为它不能证明自己的代码是有多正确。

如果没有在NP完全性和图灵机获得一定成绩,是很难从CS专业毕业的。NP完全性和图灵机是两个美丽的理论领域,如果他们没有一些糟糕事情,那将是令人愉快的。一位生物学家要求我解决DNA序列匹配方面的问题,我回答他这是NP完全性,这类问题需要很长时间才能解决。他不在乎,他无论如何都得解决这个问题。事实证明,大多数NP完全性问题在大多数情况下都是很容易解决的,只有几个病理性的例子破坏了我们的算法,尽管在日常生活中很少被观察到,但理论家们仍痴迷于把简单算法搞复杂了。

图灵机也会出现同样的问题,忠实的CS学生学习莱斯定理这样的虚无主义理论的结果是,我们就根本无法分析计算机算法,但是,虽然图灵机器对于我们的日常机器的运行方式来说是一个非常糟糕的模型,我们日常仍可很容易地创建可以进行智能操作的软件,任何一位CS专业的学生如果教条地来接受这些理论结果,就会在即将达到一个完全可用的解答之前一点点的时候放弃了。

2.学术语言很少有用
我们不应该感到惊讶的是,学院培养了势利感和对神秘解决方案的热爱。在每一个领域都是如此。当我问一位麻省理工学院毕业生他最喜欢的语言时,他自豪地告诉我,而且他确信我不知道它这是什么,他告诉我这是CLU语言,嗯,他赢了。

那些痴迷于语言的人有很多伟大的想法,但有时这些想法最终会造成混淆和混乱,如果一个团队成员喜欢一些奇怪的特性,并开始将其包含在代码库中,那么其他人都必须学习它,如果每个人都这样做,那么提高效率的挑战将是残酷的。

这就是为什么谷歌在建造Go时选择了低端路线的原因,Go发明者坚持认为,语言应该有很少的结构,并且能在尽可能短的时间内简单地学习,这种简单性对每个人都有帮助,因为每个人都非常了解这个核心。

3.许多cs教授都是数学家,而不是程序员。
大多数计算机科学系的一个肮脏秘密是,大多数教授不会指导计算机编程,他们真正的工作就是讲课和争论助学金,他们理解电子表格和提案,而不是真正做研究,这就是为什么上帝会给他们研究生,他们中的许多人上一次真正编程是在他们自己读研究生的时候。从那时起,腐烂伴随蜘蛛网开始了,他们机器上的编译器可能从来没有启动过。

4.许多必修课却很少有用
数据结构通常是计算机科学重要课程主题。遗憾的是,我们中很少有人会有再使用许多数据结构的机会了。我们要么把东西放到对象哈希表中,要么把它们推入一个为我们思考的数据库中。对于每个人来说,考虑算法的复杂性仍然是非常有用的,但是很少有人需要担心B树甚至链接列表。不仅如此,我们中的许多人已经意识到,我们最好相信一个标准库,而不是自己摆弄数据结构,因为犯错误太容易了。许多公司已经明确禁止提交你自己的数据结构,这是有理由的。

在经典课程中有很多其他的例子不再那么重要了。编译器是复杂和必要的,但唯一的人写他们的是哪个学生在某个学期的课程里被迫搞一个玩具版本应付或自娱自乐,甚至苹果在为SWIFT创建编译器时也使用了现有的开源工具。

5.数学模型让我们走错了路
任何学过数据库理论的人都会发现Boyce-codd范式,我们将复杂的数据结构分解为小表的方式,这一切都非常优雅和高效,直到你永远在那里等待SQL查询的响应,因为该查询中充满了联接命令。

大多数开发团队很快就学会了对数据库进行“非规范化”以提高性能,换句话说,他们去掉了所有的聪明,把数据放在一个巨大表里,这是丑陋和浪费的,但往往却是惊人的快。至于浮肿冗余问题,其实磁盘空间很便宜。

如果CS毕业生执着于自己的聪明,并将他们受过BS教育洗脑的知识付诸于实践时,许多开发人员需要花上几年的时间忘记从CS课程中学到的所有的计算聪明(banq注:算计)。

6. 体制滋生傲慢
我们都认为自己是对的,但取得学位目的本是为了让毕业生有能力与权威争辩自己的优势。有时这可能是真的,但即使在最好的日子里,也很难知道什么才是真正正确的,特别是在快速发展的领域。

一个和我一起工作的人喜欢他给部门带来的“编码标准”,并且喜欢在代码评审期间每一个机会引用这些标准。这些标准内容类似对在哪里放置空白对会提出挑剔意见,一旦他开始以学术上的精确性谈论它们时,他就开始在代码评审中像挥舞棍棒一样任意使用它们,他会用不同的空格编写代码,并宣称某块代码不符合标准,所以我们都被困在需要准确计数空间里,所以一切都必须符合某种学术标准。

7.许多现代技能被忽视了
许多现代技能没有涵盖在计算机教育领域,如果你想了解Node.js,React,游戏设计或云计算,你很难在一般课程中发现它们。这个普通学校课程清单专注于基础教育-也就是说,在Node.js或Reaction这样的单词被遗忘后,诸如竞赛条件之类的深层次概念将成为计算的一部分,竞争得奖确实是一个崇高的目标,但这样做使得大多数程序员与当前流行技术脱节。

对于计算机科学部门来说,培养深刻的思考者是很常见的,他们能理解一些基本的挑战,而对日常员工的日常生活中的细节却知之甚少,这就是为什么公司发现雇佣一个物理实验室的人也同样值得,他只是用Python来实现仪器上的一些数据流,他们可以像CS天才一样容易地了解所谓浅薄的细节。

8.学术前沿即将到来
机器学习和人工智能都很流行,许多人都在争先恐后地尝试,但是这些课题其实已经在CS部门研究了几十年了,调查过今天学校提出的所有想法有意义吗?还是耐心地等待它们最终被普遍使用?

9.天才会滋生自满情绪
天才背后有许多奇妙的股市,大多数享有终身教职保护的教授,在很久以前就应该享受到他们的贡献所带来的所有好处,问题是,在快速发展的领域,今天的学生几乎不需要10年前的知识了。但是如果这些教授有伟大的战略知识突破时,确实会让这些教授的影响持续几十年。

10.知性主义很少产生结果
当我告诉一位终身教职员工,我的一个学生得到了一份工作,这要归功于一些关于Angular和React的讲座,他笑着说:“我最不想做的事就是把它变成一所职业学校。”

说得很好,但没有那么多人能花近几十万美元思考证明"P=NP?",虽然确实我们需要研究一些深刻的、永恒的真理,但是,当你的公司下个星期必须在截止日期前发货的时候,没有人会有时间对永恒的真理进行研究并深信不疑了。

10 reasons to ignore computer science degrees | CI
[该贴被banq于2018-08-02 18:54修改过]

算法其实就是一种通用完美的解决方案,而工程领域是没有银弹,没有一条裤子适合所有的人,没有通用完美方案,只有适合上下文的合适方案,边界概念在工程师思维中很重要,而算法除了前提条件外,边界概念不强,几乎是通用的。