龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > asp.net编程 >

学习.NET架构设计系列:Hello world的时代(5)

时间:2009-12-21 11:47来源:未知 作者:admin 点击:
分享到:
稍后一点的计算机采用卡片穿孔的方式作为控制方式。程序员把需要运行的运算用二进制的方式记录在卡片上,穿孔的地方代表1,不穿孔的地方代表0。把

稍后一点的计算机采用卡片穿孔的方式作为控制方式。程序员把需要运行的运算用二进制的方式记录在卡片上,穿孔的地方代表1,不穿孔的地方代表0。把卡片塞进计算机的输入设备,计算机就按预定的方式运行,这就是最早的机器语言。随着计算机的运算速度越来越快,人们发现很多时候都是计算机在等待着输入设备,很多时间被浪费掉了。于是人们设计出了一次可以处理多个卡片的计算机。多张卡片可以同时放入计算机,计算机按照一定的规则进行调度,按照某种优先顺序执行他们,这就是中断和任务的调度的概念,最早的操作系统就这样出现了。银行、会计事务所这样的公司每星期把写好的卡片放到计算机中运行,很快就可以完成大量数据的处理工作。这时的计算机仍然是一种非常复杂的设备,维护、使用都十分困难,当时的计算机生产公司必须提供全套的安装、维护、运行解决方案。

此时的计算机编程就是在卡片上穿孔,所使用的语言完全是机器代码。机器代码难以记忆,不容易理解。于是人们发明了汇编语言,汇编语言实际上是机器语言的助记符号,可以用编译器翻译成机器代码卡片。从词法和语法上说,他更接近与自然语言,但是从流程上说,仍然是机器语言的那一套。

这个时候,计算机软件已经成为了一种耗资巨大的工程。当时的计算机硬件是一种十分高档的昂贵设备,以至于一些大公司都没有勇气独立购买,而是采取租用的方式,租借机器的投资可以达到上百万。而软件开发所花的钱比起租机器的钱是只多不少。最为典型的工程是IBM360的操作系统。当时IBM公司研发新的电脑――IBM360,他们的计划是为这种机器单独开发一个操作系统。软件开发耗资巨大,工期一再拖延,直到整机上市一年以后,操作系统才得以发布。后来一位参与操作系统开发的工程师写了一本书,描述了他在项目中得到的一个重要经验:向一个进度缓慢的软件项目中盲目的追加人力,只能让进度更加缓慢。软件开发需要很大的人际交流成本,这使得项目的规模不能简单的用人月数来衡量。

汇编语言这解决了机器代码难写难记的问题,但是不同公司生产的机器、不同型号的机器汇编指令集是不同的,在一种机器上写出来的程序无法移植到另一种机器上执行。于是有人希望解决这个问题,他设计了一种新的程序语言――FORTRAN。FORTRAN的语法更加接近自然语言,并且他设计了适用于多种机型的编译器,可以把FORTRAN的源码编译成可以在多种机器上执行的机器代码。计算机的创始人之一,冯诺伊曼当时认为搞这种高级语言没有多大的意义,计算机发展的重点不应该在这个地方。冯诺伊曼肯定是一个汇编高手,写起机器代码来也是相当的娴熟,自然认为搞什么高级语言没有多大的必要,汇编挺好的嘛。这种感觉就应该类似于当今的一些C语言高手面对JAVA和C#时的感想。

FORTRAN的意义在于,他使计算机不再是计算机专业人员才能操纵的工具。数学家、工程师、会计师、学生都有机会亲自使用计算机来解决自己的工作中遇到的问题。高级语言的诞生使得软件业得到突飞猛进的发展。当时的FORTRAN仍然不是一种结构化的编程语言,FORTRAN中的变量都是全局变量,他使用与汇编相似的方式进行流程控制。

随后的几年中,LISP、ALGOL、COBOL等一批高级语言陆续不断的涌现出来。这些语言都有一个共同点:他们都出现了局部变量的概念,都是结构化的编程语言。局部变量有着更加清晰的作用域和生命周期,程序划分为若干个子过程,某个子过程中定义的变量在其他子过程中是不能访问的。有了这样的机制,程序员不用再担心自己定义的变量被意外的修改,这样就有利于更多的程序员合作编写大规模的程序。

接下来的几年出现了越来越多的高级语言,在文字处理、科学计算、数据制表等各种领域发挥着重要的作用。BASIC语言也就是在这一时期出现(BASIC语言并不是结构化语言),他的全称是:初学者通用符号指令代码。BASIC语法简单,易学易用,普通人稍加训练就可以用BASIC进行编程了。

从这一段历史看出,计算机软件技术不断发展,他的目的是使人们使用计算机解决问题的过程越来越简单。人们需要用计算机来解决越来越复杂的需求,从最初的科学计算,逐渐发展到表格处理,会计计算,管理一个大型企业的商业活动,这就迫使软件开发技术和思想不断进步。要创建新的技术平台,让设计人员在这个平台上不用考虑过多的基本技术问题;要创建新的分析方法,让设计人员可以忽略细节上的复杂度,更容易从整体上把握软件的构架。

现在的软件技术发展仍然是在延续这样的方向。软件的构架越来越庞大,从单层的、简单的面向过程的代码,发展到多层的、面向对象的代码,表面上看是变得复杂了,实际上是使得软件的逻辑结构更加清晰,从而不断的满足日益复杂的业务需求。程序员可以从技术细节中腾出力量,去解决更加复杂的业务问题。

学习和运用各种先进的技术也应该注意这一点:技术的发展是为了更容易的解决业务问题,降低开发成本――这也是我们运用他们的目的。本文在后面的章节介绍一些编程的思想和技术,也会遵循着这样一种思路,要看看这些东西是如何使程序员更加迅速准确的解决业务需求。为了能够说明这些思想和技术是如何使得问题的解决逐渐变得简单,本文在举例说明的时候,会尽量的使用接近于实际情况的例子。简单的玩具形式的例子,比如用Cat、Dog和Animal来说明多态的规则,看上去很形象,也是很有趣味,但是事情本身过于简单。使用这样的方式很容易把技术的原理说清楚,但是却让人不易明白他们的使用场景,甚至误以为他们把原本简单的事情搞得复杂了。本文中的事例有的牵涉到一些特定业务领域的知识,看起来难免晦涩枯燥,希望大家能够容忍一下。


精彩图集

赞助商链接