关于computer science的思考

         我和很多人一样,是所谓computer science专业的在校大学生,几年来都日以继夜的钻研各类编程语言和算法。但是每当我在这个领域走得越深,回首再看computer science这个词的时候,我就越发不能理解这个词到底意味着什么。无独有偶的是,似乎不仅仅只有我这么觉得,即使是在平日里闲逛论坛时也常常能看见有人发出同样的感叹(当然,纯粹抱怨的就另当别论了)。或许这样说还不能让你意识到问题的严重性,那么不如换句话讲:computer science专业真的能培养出程序员吗?

 

不是science的computer science

          我们从computer science本身说起。不妨先耐着性子咬文嚼字一番,细数当代的各类科学:

         mathematics(数学),   physics(物理学),  chemistry(化学),  biology(生物学),  psychology(心理学),   medicine(医学), philosophy(哲学),   economics(经济学)…… 

         看上去似乎所有被普遍承认的科学都没有science后缀,甚至是literature(文学)和我们的近亲electronics(电子学)也同样如此。相形之下,computer science给人的感觉就像明明不是科学,硬要强调自己是一项科学一样显得站不住脚。更令人尴尬的是,纵览所有科学目录,似乎只有pseudoscience(伪科学)和我们是同类。我不禁对自己产生了怀疑:computer science真的是科学吗?

         下面先用我的亲身经历作一个例子。在今年春天的时候,我曾经听过一个关于机械手臂的讲座。演讲者首先介绍说机械手臂能够模拟人类的意识自动做出反应。因为演讲者本人主要研究神经学,所以整场的讲座都是关于怎样获取与分析神经信号以及机械手臂实现的功能。而怎样模拟机械手臂的动作则是蜻蜓点水般不作详细介绍。毫无疑问,对神经信号的模拟无异于模拟人类的意识一样具有难度。但是对于演讲者本人而言,他似乎认为假若能够分析出准确的神经信号,那么机械手臂也就接近完成了。而具体的实现者,程序员,则处于一个很低的地位,远远达不到核心地位。我不禁疑问,为什么机械手臂这么具有电子化的项目,作为领导者的是一位神经学学者,而非程序员呢?

         或许科学研究领域程序员的地位还不能说明问题。如果真的深究下去,我们会发现:与传统的科学相比,computer science并不是那么科学味十足。换句话说,有多人会认定这些以敲击键盘为生的程序员是科学家呢?如果学校培养出来的程序员并不算是科学家,那么computer science又怎么能算是科学呢?

 

computer science的现状

         因为历史原因和计算机程序无所不容的性质,computer science就像是大杂烩一般,既有程序员又有数学家,甚至还有少数的心理学家

        《黑客与画家》的作者Paul Graham在书中写道:


         也许有一天,“计算机科学”分裂成几个独立的部分。这可能是一件好事,如果我本人的领域——黑客——能够独立出来,那就更好了。

         把不同类型的工作捆绑在一起,可能是为了行政管理的方便,但是却容易引起混淆。这是我不喜欢“计算机科学”这个词的又一个原因。中间部分“计算机科学家”的工作,也许还可以被称为计算机的实验科学。但是,两端的数学家和黑客,并不是在做计算机的科学研究。

         数学家看来并不在乎自己搞的是计算机还是数学。他们很高兴来到这个新地方,然后就开始埋头证明新的定理,与数学系的数学家干的事情完全一样。不一会儿,他们可能就忘了办公楼外的牌子上写的是“计算机科学系“。但是对于黑客,“计算机科学”这个标签是一个麻烦。如果黑客的工作被称为科学,这会让他们感到自己应该做得像搞科学一样。所以,大学和实验室里的黑客,就不去做那些真正想做的事情(设计优美的软件),而是觉得自己应该写一些研究性的论文。

 

          我十分同意《黑客与画家》作者的观点,建议将computer science分家。如果你也曾经是这个专业的学生,难道没有发现过一个很荒谬的事实吗?同一个计算机系里面,既有埋头钻研算法至深夜,颇有拔剑四顾心茫然感觉的ACM竞赛者;也有深知系统底层,运筹帷幄准备着手开发应用程序的实践者。他们之间的交集的确是程序无疑,但是倘若交换他们手头上的工作,那么结果肯定是一团糟。他们无疑都是computer science专业优秀的学生,大牛也说不定,但为什么会显得如此不同呢?我觉得答案应该是“术业有专攻”。

         computer science所包含的内容实在不胜枚举。在某些问题上,你可以将问题抽象,建立模型,使结果看上去很像数学;在另一些问题上,你需要分析问题的层次,逐步解决,这样结果看上去就像一个工程项目。前者是理论,后者是实践。每一门科学都会有这些内容,但是结构庞大者如computer science则是无人能出其右。就拿人工智能的例子,这到底是程序员要解决的问题,还是心理学家?另一个例子则是,那些设计出高效算法的程序员,也算是数学家吗?

         也许我们应当适时的回避这些不太好回答的问题,着眼于当代的学校。computer science这个奇怪的专业汇聚了不同的学生来接受相同的教育,理应给予划分。我认为首先得给如今的数学系更改名字,以显示数学家和程序员的区别。Pure mathematics是一个不错的选择,另外也算是向数学家Hardy致敬。computer science应当一分为二,给那些讨厌计算机算法的程序员解脱。具体为applied mathematics and algorithms 和 software design 。前者似乎还未见踪影,不过后者的确在有些学校里给分出来了。当然我说的也只能过嘴瘾,比如说这些研究算法的程序员的未来如何,不会算法的软件开发者又该如何,我给不出答案。


解决之道

         毫无疑问的是,我们对如今的computer science专业并不满意。观点很直接:既然是一个专业就不应该培养出两个极端的学生。

        解决的方案很理想化,同时也意味着很难实施:对于软件开发和计算机算法,我们两者都要学。前者的范围很广,包括编程语言,操作系统,开发流程(设计模式)等等底层知识和实际开发的经验之谈。后者的幅度很深,简单而言就是各类应用数学以及衍生出来的算法。之所以难以实施是因为每一方面都需要充足的时间才能理解透彻,这对于大学生而言要求付出的实在太多。特别是仍然还有不少人在争执譬如应该选择学习C++还是Java,是否一定要先学C再学Java之类的问题时,所有的解决方案都成了无稽之谈。对于时间不是那么充裕的大学生而言,平日里两者都要适当接触,才能不失偏颇。至于那些未来的大牛们,我认为一个例子足以说明一切:Donald Knuth既撰写了TAOCP,也发明了TeXMETAFONT。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值