Topic: 一个程序员对电脑的看法

  Print this page

1.一个程序员对电脑的看法 Copy to clipboard
Posted by: JiafanZhou
Posted on: 2004-04-30 22:17

一直以来看到大家被很多很多电脑问题困绕,都很想动起笔写这么一篇东西,来帮助大家看清楚问题的本质。也一直因为时间的问题没有达成这个愿望。不过今天还是抽了一天空,好好的定下心来,为大家写点东西。因为我是个搞程序的,所以以我的观点看问题也挺有意思的。这篇东西不是特别写给程序员看的,这只是我的一些随想而已,所以只要对电脑有一定了解的,读通这篇东西应该不是问题,当然了,对于学过程序的人来说,你可以更加顺利的理解一些问题,我也会注意对概念提出的顺序作一个适当的排列,不会让你有种云里来,雾里去的感觉。But may be some theories will pop out before I have a change to explain it,anyway let's talk things in general from scratch.(我觉得专业方面的书写的都不是很好,让人看了不知所云,原因就在于没有很好的安排概念的顺序,很多概念在你没有体会的时候就说出来了,学生当然不能理解,我尽量注意这个问题)。

1。电脑的发展
大凡对电脑有点认识的人都能体会到电脑的发展速度是非常的快的,短短的几十年,对人类的生活方式产生了本质的变化。可能笔者有点极端,我认为这是相对人类历史上来说的几次重要的革命来说最重要得一次。为什么?笔者下面会有说明。大家都知道,PC(Personal Computer)被分为硬件和软件,技术的爆炸导致了硬件的突飞猛进,这个也是不争的事实。想想现在CPU的发展速度是多么的快,各个国家机构投入对计算机硬件开发的资金比例都很高。首当其充,Microsoft,这个也是大家看中这次技术革命的证明。但是不知道大家有没有注意,硬件的发展只是个外部因素,是个外因----真正导致计算机发展速度快的内在因素(implicit factor)是软件业的爆炸式发展。
任何一样科学的发展都需要不屑的试验和努力,试想一下软件和传统科学的对比,为什么传统科学发展的如此缓慢,物理,化学,生物,地理,哲学(这个有点特殊,看下去读者就会明白),而软件科学的发展才短短20年就有了长远的发展,包括现在各项新星技术不断涌出来?本质原因在于软件业,或者说是软件开发是一项建立在没有1。空气(Air) 2.温度(Temperature) 3.重力(Gravity) 4.引力(Attraction) 5.阻力(Resistance)......这一切干扰因素上的科学,所以不断的尝试和创新不会受到任何外部因素的影响,所以大量的优秀的软件产品不断的被创造出来。当然软件始终是人的产物,而人是思想的产物,人的思想总会有不足,所以由人创造出来的软件总会有各种各样的错误(Bugs),所以说软件学是一们思想哲学的科学一点也没有错!阎博士在((JAVA与模式))用中国道家的思想来解释一些关系是再恰当不过了。有些人对这种观点十分惊讶,不解,甚至莫名其妙的抨击,都是没有学识的表现。
看看你现在生活的社会的周围,哪里没有计算机的影子,更加重要的是,几乎各行各业都用到计算机!!这也是我认为这是相对人类历史上来说的几次重要的革命来说最重要得一次的原因之一。既然计算机和软件的发展捆绑在一起,而显而意见,软件和开发软件的程序语言发展捆绑在一起,下一点,就来说说程序语言。

2。程序语言
这篇文章既然是针对普通读者的,所以我在这里也不说的很多了,但是一些基本概念还是会被提到。一般认为,由B语言产生了C语言,而由C产生了C++,大方向上由从面对过程的语言转变成面对对面的语言(Object Oriented Language).所以很多东西都在逐步完善中。很多程序员都说不管是那种语言,都有各自面向的领域。对,我承认这种话没错,但是作为一个首先学习oo语言的程序员,是否还要去学一套老式的语言,I doubt.((人月神话))的作者Frederick d Brock.在文中提及软件业近十年没有银弹的原因之一也是因为面对过程的不完善。
现在说点实际情况,我是到了大学之后才接触软件开发的,开始学习VB,JAVA,开始对一些具体问题加以分析,觉得学习一们语言无他,但是要一步一个脚印,踏踏实实的学习基本知识,这是一条毫无选择而且不容回避的路。我觉得很多人学习一们语言总会定着这们语言的光环,就象很多人都说自己会用C++,JAVA...可是问问他们JAVA有什么特点,他们就是说不上来。曾经有个人眉飞色舞的和我说JSP,Servlet的新功能,我一开始也以为这人特别牛,可是一坐下来编程,他连多态性的编码都不懂。
我认为程序学习的道路分为三个阶段,写出来给那些想学习程序的人参考。
PhaseA
对语法的学习和掌握
这部份各个语言大同小异。
PhaseB
对提供函数库的学习和掌握。
Java里是JDK的API框架
C++是MFC的宏伟框架
其实VCL在pascal里也很庞大
......
PhaseC
OO设计模式(Design Pattern)
这是最难掌握的了,当今世界归纳了23种模式。
这部份不是全文重点,所以就带过了。

3。OO的核心
面对对象的核心是什么?掌握这点对初级程序员是很重要的,00有三点核心。1.封装(Encapsulation) 2.继承(Inheritance) 3.多态(Polymorphism).我不会在这里解释他们的意思,我也不会作这种徒劳的尝试(因为这篇文章毕竟不是程序教程),这里只是给那些没有程序基础的读者一点概念。我想说的是这三点在现实生活中的延伸,其实他们很好理解。(我觉得大多专业书把很多简单的概念说的很复杂,好象是作者在自我炫耀一样,非要大家不能理解)

4。00核心的延伸
首先,把一些复杂的东西封起来,装在一个地方,只提供一些特别对外的接口(接口是个Scientific word,你也可以当作物件)来操控这个复杂的东西,这个就是封装。不要小看这句不起眼的话,如果没有封装,人类也就不可能进步到现在。封装这个过程是人类心智的体现。举个例子,你现在一定看着你的显示器,当然,你的显示器一定是在工作,内部的有机部件完美 的结合在一起工作。有些人比较穷,可能用的是15''普通爱国者牌Monitor,有些人可能用19''TFT,或许有些人比较富,用的是投影议看。不管什么都好,这就是一个封装的体现。显示器把内部封装起来,只提供对外的屏幕这一个接口(物件),当然肯定还有其他接口,比如调节明亮的按钮,这又是一个接口。而使用者完全不用注意内在的显示器是如何工作的。(当然也排除一些喜欢用风扇给显示器降温的发烧友)。
我大体浏览了一下本论坛的帖子,关于电脑硬件软件方面的问题巨多。明白了封装这个道理我们看看其他一些东西。
电脑是一个完完全全由各个不同的配件组装起来的机器。有些人说,不对,我买的是原装机,不是组装的。哈,那么就问问你买电脑的厂商,比如DELL,是不是所有的配件都是一体的。CPU,ROM,HardDrive,FloppyDrive,DVDDrive,MotherBoard.....etc这些所有所有的配件包括软件组合在一起(驱动是一些驱动硬件的程序罢了)。
通过封装这个概念,我们知道每个部件都被一般或者高度的封装起来了,只提供对外的接口。那硬件来说这里的接口可以是插槽。OKay,现在硬件厂商拿到了任务,看上去每个具体的封装都能被实现。但是!!!当这些产品耦合起来的时候,问题就来了(耦合是计算机术语,你可以当作聚集的意思),接连不断的系统冲突就是因为所有的配件耦合度不高。所以你会有这个那个硬件冲突。当然,随着科技的不断提高,这个耦合度会越来越高。你可能会问,那为什么还要封装呢?我们不能把计算机都在一起制造嘛?换一个更高的耦合?是,这个看上去是一个好注意,但是这个就好象是和你说,你在开车的时候需要控制汽车内部的马达的运作一样荒唐。
除去硬件和硬件的冲突,还有大量硬件和软件,软件和软件的冲突,这些都是系统冲突的子集。硬件和硬件的冲突看上去还是可以控制的,因为可以有制造商订个标准,加强耦合度,如果说这个还是良性的话,那么硬件和软件,软件和软件的冲突就是恶性,灾难性的,因为大量的软件是用户自己装上去的,也就是说装了越多的软件,你的系统的Bug可能越来越多。何如解决这个问题会在下一点提到。
现在说说继承,继承在显示生活中的影子也很多,比如你继承了你父母的遗产,当然前提是你双亲过去了。还有,某某某产品继承了前代产品的所有优点,并且还有其他一些激动人心的新的功能。这个在电脑中的体现可能是一个产品改良升级了,或者软件有了新的版本,当然如果那标准程序设计的角度看或许这个比喻有点不切实际。
多态则是可以表现为一个产品有不同的接口,可以用在不同的地方,软件则可以被用在不同的用途中,比如很多军用软件就可以民用。
既然面对对象语言是面对对象的,而世界上一切物质又都是对象,所以能有这些观点解释问题也不奇怪。

5。解决问题
这里要给出大家如何解决问题的建议了,先说说硬件的问题。
硬件与硬件的冲突我想大家会很少碰到,因为大家买电脑的时候都是千条万选的,实在 有个硬件冲突的,大家还可以去换,这里给出的建议是买点脑是一定要拿好发票。
我想大多数人碰到的问题会是硬件和软件或者软件与软件的问题。前者主要是驱动的问题,还有的是病毒啊。驱动问题还存在驱动与驱动的冲突(这个问题不被考虑)建议是尽量升级比较好的,新的版本,多上网看比较新的建议。很多人把特洛依木马和计算机蠕虫看作是计算机病毒是一种不十分正确的看法。虽然说三者从本体上说都是程序,但是特洛依木马是一种本身不会发作的程序,他只是被黑客移植入客户机里的为下次入侵作准备的后门罢了。可以这么说,特洛依木马是一种病毒的特例。而蠕虫则不同,蠕虫是一种介于病毒和木马之间的产物,他会自动根据计算机系统 漏洞传播,达到入侵执行的目的。能编出计算机蠕虫的可不是泛泛之辈,他们需要高超的网络系统知识。关于这点建议是不要得罪黑客,呵呵,或者自己变成黑客,我是黑客我怕谁?
但是上网插资料一定不要盲目相信,还有注意时间和版本,我发现很多次别人的建议都过时了,导致我走了很多很多弯路。比如当时我要装Linux redhat9.0,FX显卡系列和redhat冲突世人皆知,
可是我当是确实不知道,查了好多资料,其实都是过时了,浪费了好多时间,现在看看真的很傻,所以有时候不要怕,大胆的尝试是通向成功的唯一条件。
软件和软件的冲突那个就没底了,关键要看怎么分配编写这个软件的人了,对于思想这一点会在下面说明。

6。对思想的分析
既然软件是人思想的延续,那么对人的思想的讨论也是十分必要的。是不是软件工程大学要开设哲学这门课呢?如果有谁读过Tom Demarco的((最后期限))这本书的话,一定会对下面这句话影响十分深刻,(管理一套软件其实就是对人的管理),其实不管是读完((人月神话))还是((人件))还是((最后期限)),不难得出这个结论,人的心智总会有缺陷的,这会导致很多很多Bugs,但是如果有更多的人投入到开发项目的话,就会有更多Bugs,就是说人和月不是成正比的,当一项工程落后于进度的时候,在传统的科技项目中会投入更多的人力,但是在软件开发中,会带来灾难性的后果。为什么?Tom Demarco说:"当进度落后时,就是说月落后是,投入更多的人,就会象用汽油来灭火一样。"为什么会有这种后果,因为,思想毕竟是一个人的产物,假设一个项目分给许多许多人来开发,用于讨论耦合和交流的时间要远远大于一个人开发 的时间。这就是原因。没有人知道另外一个人想什么。用我上面的话来说,思想是一种高度封装的东西,只对本人提供了非常非常抽象的接口。

7。不断的学习
这条就当作本文的结束语吧,只有不断的学习技术才能跟上计算机发展的步伐,比如,这个论坛就是一个很好的学习交流的地方,从以上观点可以联想出,任何对象分为1。创造 2。实现 3。交流。 笔者在头脑里有了构思,这就是第一步,而我通过电脑把它写出来,就是第二布实现,读者你看了之后会有什么想法,甚至回贴,就是第三布交流了..

2.Re:一个程序员对电脑的看法 [Re: HenryShanley] Copy to clipboard
Posted by: JiafanZhou
Posted on: 2004-05-05 00:51

也没有人鼓励一下吗?哈哈

3.Re:一个程序员对电脑的看法 [Re: HenryShanley] Copy to clipboard
Posted by: harvshen
Posted on: 2004-05-06 12:03

如果是原创的,写得不错哦。

4.Re:一个程序员对电脑的看法1 [Re: HenryShanley] Copy to clipboard
Posted by: taogang
Posted on: 2004-05-06 12:47

太长, 适合放到水区 Big Smile

5.Re:一个程序员对电脑的看法 [Re: HenryShanley] Copy to clipboard
Posted by: kam
Posted on: 2004-05-07 08:45

fine la...not professional enough...@.@

6.Re:一个程序员对电脑的看法 [Re: HenryShanley] Copy to clipboard
Posted by: yiqianfeng
Posted on: 2004-05-09 15:22

ok

7.Re:一个程序员对电脑的看法 [Re: HenryShanley] Copy to clipboard
Posted by: legendsam
Posted on: 2004-05-09 22:37

bu cuo

8.Re:一个程序员对电脑的看法 [Re: HenryShanley] Copy to clipboard
Posted by: JiafanZhou
Posted on: 2004-05-18 00:57

thx

9.Re:一个程序员对电脑的看法 [Re: HenryShanley] Copy to clipboard
Posted by: emarket
Posted on: 2004-05-18 09:52

HenryShanley wrote:

我认为程序学习的道路分为三个阶段,写出来给那些想学习程序的人参考。
PhaseA
对语法的学习和掌握
这部份各个语言大同小异。
PhaseB
对提供函数库的学习和掌握。
Java里是JDK的API框架
C++是MFC的宏伟框架
其实VCL在pascal里也很庞大
......
PhaseC
OO设计模式(Design Pattern)
这是最难掌握的了,当今世界归纳了23种模式。
这部份不是全文重点,所以就带过了。


你的3个phase 好像是 copy 我的idea Smile http://www.cjsdn.com/post/view?bid=32&id=84959&tpg=1&ppg=1&sty=1&age=0#84959

10.Re:一个程序员对电脑的看法 [Re: HenryShanley] Copy to clipboard
Posted by: floater
Posted on: 2004-05-18 12:05

Above these, no pattern at all.

11.Re:一个程序员对电脑的看法 [Re: emarket] Copy to clipboard
Posted by: JiafanZhou
Posted on: 2004-05-19 20:58

emarket wrote:
你的3个phase 好像是 copy 我的idea Smile http://www.cjsdn.com/post/view?bid=32&id=84959&tpg=1&ppg=1&sty=1&age=0#84959

you are rite,thx your idea infers me that.


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923