2010年10月30日18:03  来源:译言
  Is Computer Science Dying? 计算机科学正在消亡吗?Now that Apple is making a profit, pundits need something else as the target of predictions of impending doom. Some seem to have fastened onto computer science, prompting David Chisnall to wonder if the subject really is dying.

  既然苹果正在盈利,专家们需要一个即将发生厄运的对象作为预测目标。有人似乎盯上了计算机科学,正是这激发David Chisnall怀疑这个学科是否真的正在走向消亡。

  In the late 1990s, during the first dotcom bubble, there was a perception that a computer science degree was a quick way of making money. The dotcom boom had venture capitalists throwing money at the craziest schemes, just because they happened to involve the Internet. While not entirely grounded in fact, this trend led to a perception that anyone walking out of a university with a computer science degree would immediately find his pockets full of venture capital funding.


  Then came the inevitable crash, and suddenly there were a lot more IT professionals than IT jobs. Many of these people were the ones that just got into the industry to make a quick buck, but quite a few were competent people now unemployed. This situation didn"t do much for the perception of computer science as an attractive degree scheme.


  Since the end of the first dotcom bubble, we"ve seen a gradual decline in the number of people applying to earn computer science degrees. In the UK, many departments were able to prop up the decline in local applicants by attracting more overseas students, particularly from Southeast Asia, by dint of being considerably cheaper than American universities for those students wishing to study abroad. This only slowed the drop, however, and some people are starting to ask whether computer science is dying.


  Computer Science and Telescopes


  Part of the problem is a lack of understanding of exactly what computer science is. Even undergraduates accepted into computer science courses generally have only the broadest idea of what the subject entails. It"s hardly surprising, then, that people would wonder if the discipline is dying.


  Even among those in computing-related fields, there"s a general feeling that computer science is basically a vocational course, teaching programming. In January 2007, the British Computer Society (BCS) published an article by Neil McBride of De Montfort University, entitled "The Death of Computing." Although the content was of a lower quality than the average Slashdot troll post (which at least tries to pretend that it"s raising a valid point) and convinced me that I didn"t want to be a member of the BCS, it was nevertheless circulated quite widely. This article contained choice lines such as the following: "What has changed is the need to know low-level programming or any programming at all. Who needs C when there"s Ruby on Rails?"

  甚至计算相关领域的人们普遍认为,计算机科学基本上就是讲授编程的职业课程。2007年1月,De Montfort大学Neil McBride在英国计算机社会上发表了一篇题为“计算的死亡”文章。尽管文章内容相当低质量,和使我确信我不愿成为英国计算机社会的一员,但是这篇文章仍然获得广泛传播。文章包含例如这样的选项:“改变了的是对于理解低级编程或是任何编程的需求。当Ruby语言在Rails上使用时,谁还会需要C语言呢?”

  Who needs C? Well, at least those people who want to understand something of what"s going on when the Ruby on Rails program runs. An assembly language or two would do equally well. The point of an academic degree, as opposed to a vocational qualification, is to teach understanding, rather than skills—a point sadly lost on Dr. McBride when he penned his article.


  In attempting to describe computer science, Edsger Dijkstra claimed, "Computer science is no more about computers than astronomy is about telescopes." I like this quote, but it"s often taken in the wrong way by people who haven"t met many astronomers. When I was younger, I was quite interested in astronomy, and spent a fair bit of time hanging around observatories and reading about the science (as well as looking through telescopes). During this period, I learned a lot more about optics than I ever did in physics courses at school. I never built my own telescope, but a lot of real astronomers did, and many of the earliest members of the profession made considerable contributions to our understanding of optics.

  在试图描述计算机科学时,Edsger Dijkstra认为,“计算机科学就是关于计算机,就像天文学就是关于望远镜一样。”我喜欢这样的引用,但是它常会被那些不是很了解天文学的人错误引用。在我小的时候,我对天文学相当感兴趣,并且花费了大量的时间徘徊于天文台和阅读关于这门科学(也通过望远镜观察)。在那期间,我学到了比在物理课上学到的更多的光学知识。尽管我从未造出一个我自己的望远镜,但是很多真正的天文学家却做到了,同时很多这个专业的成员为我们理解光学作出了重要的贡献。

  There"s a difference between a telescope builder and an astronomer, of course. A telescope builder is likely to know more about the construction of telescopes and less about the motion of stellar bodies. But both will have a solid understanding of what happens to light as it travels through the lenses and bounces off the mirrors. Without this understanding, astronomy is very difficult.


  The same principle holds true for computer science. A computer scientist may not fabricate her own ICs, and may not write her own compiler and operating system. In the modern age, these things are generally too complicated for a single person to do to a standard where the result can compete with off-the-shelf components. But the computer scientist definitely will understand what"s happening in the compiler, operating system, and CPU when a program is compiled and run.


  A telescope is an important tool to an astronomer, and a computer is an important tool for a computer scientist—but each is merely a tool, not the focus of study. For an astronomer, celestial bodies are studied using a telescope. For a computer scientist, algorithms are studied using a computer.


  Software and hardware are often regarded as being very separate concepts. This is a convenient distinction, but it"s not based on any form of reality. The first computers had no software per se, and needed to be rewired to run different programs. Modern hardware often ships with firmware—software that"s closely tied to the hardware to perform special-purpose functions on general-purpose silicon. Whether a task is handled in hardware or software is of little importance from a scientific perspective. (From an engineering perspective, there are tradeoffs among cost, maintenance, and speed.) Either way, the combination of hardware and software is a concrete instantiation of an algorithm, allowing it to be studied.


  As with other subjects, there are a lot of specializations within computer science. I tend to view the subject as the intersection between three fields:








  At the very mathematical end are computer scientists who study algorithms without the aid of a computer, purely in the abstract. Closer to engineering are those who build large hardware and software systems. In between are the people who use formal verification tools to construct these systems.


  A computer isn"t much use without a human instructing it, and this is where the psychology is important. Computers need to interact with humans a lot, and neither group is really suited to the task. The reason that computers have found such widespread use is that they perform well in areas where humans perform poorly (and vice versa). Trying to find a mechanism for describing something that is understandable by both humans and computers is the role of the "human/computer interaction" (HCI) subdiscipline within computer science. This is generally close to psychology.


  HCI isn"t the only part of computer science related to psychology. As far back as 1950, Alan Turing proposed the Turing Test as a method of determining whether an entity should be treated as intelligent.

  人机交互并不是计算机科学中唯一与心理学相关的领域。回到1950年,阿兰 图灵推荐将图灵测试作为一种判定实体是否是智能的实体的方法。

  It"s understandable that people who aren"t directly exposed to computer science would miss the breadth of the discipline, associating it with something more familiar. One solution proposed for this lack of vision is that of renaming the subject to "informatics." In principle, this is a good idea, but the drawback is that it"s very difficult to describe someone as an "informatician" with a straight face.


  Computer Scientists Can"t Program!


  Talking to people in the industry, I"m frequently told that computer scientists can"t program. Part of the problem is people hiring computer scientists and thinking that they"ve just done a three- or four-year programming course. (Another part is students applying to study computer science with the same idea.)


  Some computer scientists, and even professors, really can"t program. Professors have PhD students to handle programming for them, but recent graduates can"t make that claim. Programming falls close to the engineering part of computer science, and people who have been through a degree that focuses more on the mathematics or psychology aspects of the subject are likely to be fairly weak in engineering.


  A lot of dissatisfaction with computer science comes from the misplaced expectation that a computer science graduate will be a good programmer. Such a graduate should have been exposed to at least half a dozen languages, but won"t necessarily have done anything particularly complicated with those languages. She almost certainly won"t have any kind of deep understanding of the standard library available for a given platform. This kind of comprehension comes only with experience. She may have picked it up from other jobs or open source work, but not from her degree.


  Computer science and software engineering are very different disciplines, and a lot of people seem to confuse the two. Software engineering teaches the process of developing software, in terms of both tools and processes. A computer science course briefly touches on these topics, in the same way that a materials physicist may learn something of mechanical engineering. This doesn"t make a computer scientist a software engineer, any more than it makes a physicist the best candidate for building a bridge.


  What Is It Good For?


  If they can"t program, what"s the point of having computer scientists? For an academic subject to justify its existence, it must impart some useful understanding to its students. Computer science is first and foremost a branch of applied mathematics, so a computer scientist should be expected to understand the principles of mathematical reasoning. But there are two areas that separate computer science from much of mathematics:


  Focus on efficiency.At the theoretical end, this focus manifests itself in complexity theory, which groups algorithms according to their time and space requirements for execution. Closer to engineering, this becomes a focus on minimizing the number of instructions issued on a real architecture, or eliminating other bottlenecks. Most of computer science is somewhere in the middle, and involves finding an efficient (if not optimal) solution to a problem with real requirements. Much of this principle is equally applicable outside of computing; for example, in optimizing a business workflow.


  Focus on thinking simultaneously at different levels of abstraction.Closer to the applied end of computer science, algorithms are expected to run on real systems. The instructions that will be executed when the program runs, the high-level algorithms used to create these instructions, and the interface with which the program interacts with the user are all important, and a computer scientist learns to keep all of these issues in mind at once.


  Computers are part of everyday life for a lot of people. Even discounting desktop computers, most people interact with a large number of computing devices every day. This trend has lead to a more algorithmic view being taken of a lot of processes, and computer science is essential in building these devices.


  The decline in computer science applicants is likely to continue for a while. Computer science is no longer a buzzword-compliant "get rich quick" subject, and people (outside the BCS) are starting to realize that it"s not a vocational software development degree course. This realization is likely to be good for the subject in the long run, because it will remove many of the students who never should have chosen that field in the first place. Physics has also seen a decline in applicants in recent years, and no one is claiming that it"s dying and needs to cater more to teaching people to be second-rate engineers, rather than first-rate scientists.



  您好,欢迎您发表评论!  (言论仅代表会员个人观点,不代表和讯网观点)


相关新闻 相关新闻 查看关于 计算机科学 的微博

    订阅新闻  和讯微薄  添加到收藏夹  反馈意见


腾讯科技 | C114中国通信网 | 飞象网 | 中国家电网 | 挖贝网 | 手机中国 | 51nb专门网 | 科技讯 | 移动Labs | 通信世界网 | CTI论坛 | 赛迪网 | 新华网科技 | 中国软件网 | 中国质检网 | 通信产业网 | 比特网 | 支点网 | 上方网 | 小熊在线 | 速途网 | 易观网 | 慧聪家电网 | CNET科技资讯网 | 睿商在线 | 钛媒体 | 安卓网 | 光电新闻网 | 百道网 | 人民网IT | 安智网 | 手机之家 | 环球家电网 | 新网 | 网秦 | iPhone威锋网 | 亿邦动力网 | 光明网IT | 环球网科技 | 虎嗅网 | e800 | 科易网 | 中国软件资讯网 | pc6软件下载 | DOIT| 安防知识网 | 站长网 | 第一家电网 | 科技资讯网 | 驱动中国 | 华北新闻网 | 蝌蚪五线谱网 | 大公科技 | 机房360 | 畅享网 | UC浏览器 | 移联名商 | 华强北 | 中国电子银行网 | 一财科技 | XDA智能手机网 | ZDNet至顶网| 蜂鸟网| e-works |博瑞网 |央广网科技 |会计家园 |

环球企业家 | 东方企业家 | 创业邦 | 数字商业时代 | 中国经济和信息化 | 商业周刊中文版 | 光明日报 | 新京报 | 法制晚报 | 北京青年报 | 中国计算机报 | 电脑报 | 申请友链



E-mail: it@staff.hexun.com