大学里做不出好软件

本文作者:加拿大新不伦瑞克大学副教授Daniel Lemire

本文作者:加拿大新不伦瑞克大学副教授Daniel Lemire

软件正在吞噬这个世界。尽管年景不好,Facebook还是创造了650亿美元的市值。这样一个仅仅2000名开发人员的小公司竟能抵得上一个汽车制造公司。

  • 大部分的教授很少编程。因为他们不编程,他们就不会特别强调像代码审查或单元测试这样的好的开发方法。不相信我说的吗?那去GitHub上找找你最喜欢的教授的作品吧。他能充满自豪的在上面展示他开发的代码吗?
  • 因为很少有教授编程,所以你也应该不会吃惊于学校里很少有软件发布途径来供那些想展示自己软件作品的人使用。于是,这也就意味着,即使你开发出高质量的软件,也难有同行来欣赏。
  • 大多数学院里的软件都是由学生写成,他们缺乏经验,缺乏写出好软件的动机。你也许会认为,在学校里花了4年时间,上了无数堂课,做了无数的编程作业后,大多数计算机科学/工程的学生都应该成为不错的程序员了。但这不是我看到的。部分的原因是学校教育是一个模仿老师的过程。我相信,如果大学四年你是跟着李纳斯·托沃兹(Linus Torvalds)上课,你一定会成为一个相当不错的操作系统内核编程高手。然而,Linus 不会、也不喜欢当一名大学教授。大学教授不花很多时间去编程,他的学生也会这样。

所以,学校里的软件很烂,是因为学校里的人不善于编程。但这其中还有一些其它因素:

  • 编程可以像煎鸡蛋或建一个鸟窝那么简单。你也知道,写一个PHP脚本把数据库的内容展示到浏览器里并不是那么的难。但要开发出一个不凡的软件则需要程序员表现的像一个创造者。然而,你们的编程课程也许会教如何去煎一个鸡蛋(比喻),但他们不会教你如何设计一个给四星级饭店用的菜肴。创造出新奇软件的门槛也许比你想象的要低。根据一个论文里的算法,我们可以有十几种实现方法,但大部分都是低效率的。即使是已经有原型伪代码提供了,你仍然需要大量的工作经验在身,才能给出正确的设计。判断如何能正确的实现一个算法也许比你们想象的要难的多。理论家很少有认可这点的,他们通常相信最困难的部分是用缜密的理论知识设计出算法。他们不知道在两个相同计算复杂度的算法会在软件实现上产生成几个数量级的速度差别。事实上,假设有人告诉你了作家Stephen King的下一部小说的大纲,你就能写出一部能和King写的一样好的小说吗?很值得怀疑。软件开发也类似。执行是一切。再好的策划也无效。
  • 大多数的学院里的研究者是为自己写软件。就像烹饪一样:“只给自己写软件的人不知道给别人写软件时有多少工作要做。”相比起在饭店里当一个厨师,给自己做饭要简单容易的多。这两者之间的难度差异如果说有两个数量级太大,那至少也不在一个数量级上。学术界里很少有人会认可这些。他们基本上写的都是写完即丢的代码:写好程序,使用它,然后忘了它。诸如维护和文档之类的问题,虽然在一些课堂上也讨论过,但在学院里,鲜有用于实践的。

那么,将来会如何?我对学校里的软件保持悲观态度。也许会有例外,但看总体情况,我不抱太大希望。因此,当我审查一个学生的研究报告或论文时,我会先假定实现这个理论的软件做的不怎么样。我希望招聘那些新程序员的人也要这样想。鉴于我这样的悲观论调,实际是有一些事情可以做的:如果你想在Facebook找到一份软件工程师的工作,你就应该多花一些时间在GitHub上,少花一些时间在课堂上。如果你幸运的话,你可以说服学校就你的开源作品给你一些学分。

[英文原文:On the quality of academic software ]
分享这篇文章:

7 Responses to 大学里做不出好软件

  1. garfileo says:

    大学里的教授们固然做不出好软件,但是软件公司的程序员也往往提不出好的理论并写出好的论文,甚至他们连代码都注释的不够好。还是各司其职吧。

    • Douglas says:

      软件公司的职员如果写不好注释,那表示他跟学校毕业时没什么长进。
      对于职业的程序员来说,写优秀注释的需求应该会比教授和学生高很多,因为教授不会长期维护复杂的代码,企业可不一样

  2. cyler123 says:

    我反对!
    我们实验室的老师从来不做实验,但学生们却整天做实验,所以可知,老师都是浮云,一切都要靠自己

    • jaxson says:

      赞成!
      在实验室里,老师就像班里的辅导员一样,顶多在立项、经费审批等方面起到作用,核心技术还是得学生自己去搜集,去学习,去研究的。

  3. joan.chen says:

    我上大学的第一天就听说,别想在老师身上学到什么,还是要靠自己的努力。

发表评论

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

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据