我眼中的计算机、计算机科学、计算机技术、计算机工程、计算机操作、计算机产业
很多人学了N年计算机,仍不知道这些都是哪些东西,社会上外行的看法更是五花八门,谈谈我的认识:
1、计算机:这个好理解,就是我们看得见摸得着的电脑。比如CPU、主板、内存、显示器。。。。。。等等,这都是它的硬件。比如windows、IE流览器。。。。。。等等,这些是软件。还有网络,比如我们上的宽带网,等等。绝大多数人都知道,不再多说。
2、计算机操作:把电脑买回家,我们按几下鼠标,按几下键盘,就可以上网,就可以打游戏,可以看电影。。。。。。这就是我们在操作计算机。
3、计算机工程:设想一下,我们使用的网络是从哪里来的?软件又是从哪里来的?它们都是人工构建出来的。这就是“计算机工程”。比如,windows是一群软件工程师开发出来的,比如宽带网是网络工程师建造出来的。
4、计算机技术:再深入地想一下,为什么计算机工程能成功的进行?就象飞船能上天靠的是宇航技术一样,计算机工程师们能开发出对我们来说很好用的软件,靠的是各种各样的计算机技术。比如数据库技术、多媒体技术、网络安全技术。。。。。。等等。这些技术的核心是构造性的算法,也就是由形式语言或自然语言书写出的解决问题的步骤。科研人员把计算机无所不在的应用域中的无数计算问题的数学性质做高度抽象和分类,对不同的问题类创造出新的更好的算法,为计算机程序解决问题提供方法和步骤。计算机工程师按照这种算法(方法和步骤)编写程序。计算机技术就是通过这种方式为计算机工程提供支持。新的计算机技术也就产生更优的工程效果,或提高工程效率。
5、计算机科学:探索一类现象,试图发现该类现象背后的规律,只不过,它既不是物理、化学、生物等自然现象,也不是经济、政治、文化等社会现象。实际上,计算机科学探索的是无所不在的计算现象,这种现象遍布自然、社会各领域,但和数学类似,计算机科学并不关心具体的应用域,而是对高度抽象出的计算现象进行研究,试图去发现关于计算的数学规律,并对“计算”这一现象的本质做数学层面的思考。
顾名思议,“计算”现象及其规律,这一领域本身就是数学的一个分支,只不过,计算机科学并不对计算的所有方面感兴趣,那是纯数学理论家关心的事,计算机科学家只关心“计算”的构造性现象及规律,也就是计算的过程(步骤和方法)及其理论。理解了计算的过程,才能对提出算法,进一步才能写出程序,从而在计算机上去实现“计算”,从而为计算机无处不在的应用提供数学上的保证。建立了计算的数学理论,才能知道什么问题是可计算的,什么是不可计算的,从而避免人类生产生活中每年巨额的工程项目经费投入到不可能完成的计算任务中。
这样,我们才会看到,计算机科学的数学基础(理论计算机科学)会包括:组合数学与组合算法、数理逻辑、可计算性理论、计算复杂性理论、形式语言与自动机理论、形式语义学、程序理论、形式化方法。。。。。。等等。
所以,计算机科学的核心是算法(计算的过程),算法的本质是构造性数学和离散数学。
6、计算机产业:很容易理解,把计算机工程这样的活动商业化,就形成了计算机产业。工程师们通过计算机工程生产出产品,企业组织工程项目并把产品卖给用户,用户操作计算机,在工程师的背后,有科学家提供支持工程项目的技术创新和计算科学探索。
有句话说的好,今天的计算机科学就是明天的计算机技术,就是后天的计算机工程,就是大后天公众桌子上的电脑产品。
可见,加强计算机科学基础研究的重要性。
举个例子,象微软这样的软件霸主企业,近几年就成立了多家计算机科学基础研究机构----分布在全球多个国家的微软研究院----它的研究方向不仅包括新一代多媒体技术这样的计算机技术层面的基础研究,也包括计算理论、人工智能理论、程序理论、形式化理论这样的计算机科学层面的基础研究。微软和IBM甚至在搞量子计算、人脑智能这样的基础研究,它的研究方向已经超越了计算机科学,涉及到理论物理和生命科学。我们已经看到,程序员的多少已经不是最重要的,一流的计算机科学家和一流的基础研究才是未来计算机产业不可缺少的,只有这样,才会有我们自己的计算机科学与核心技术的重大原创成果,我们才能在未来计算机产业中抢占科技制高点。
看到那篇别人的日志:什么叫我是搞计算机的?外行认识很混乱,现在我们很清楚:如果你是在操作计算机,那你只是公众一员,或者叫电脑用户;如果你在做计算机工程开发,那你可能是程序员;如果在搞计算机科学与技术的创新,那可能是计算机科研人员或计算机科学家;如果在发展理论计算机科学,那不仅是计算机科学家,还有可能是数学家;如果是在搞计算机产业,组织研发、生产、销售,开办企业,那就是企业家或管理人员。