博文
[转载]论程序设计方法(2005-06-22 14:22:00)
摘要:论程序设计方法作者:杨老师如果你是初学者----------------请不要阅读;但有志成为中高级程序员--------请务必阅读;如果你是中级程序员------------请务必阅读;如果你高级程序员--------------请批评指正。 本文是我在“软件工程师班”开学第一节课的讲义,和“计算机软件设计发展”讲座上的内容整理而成。写作本文的目的是引导学生从更高的层次来看待程序设计方法,为将来成为高级程序员而做好理论准备。一、计算机硬件环境对软件设计方法的限制 计算机的发明到现在已经60年了,计算机程序设计方法也伴随着计算机硬件技术的提高而不断发展。硬件环境对软件设计既有严重的制约作用,也有积极的推动作用。 在我的大学母校(此处删除6个字),数学系的一些老师,有幸成为了我国第一代的计算机DIY一族。呵呵,不要以为是组装PC机呦,他们组装的可是小型机。一人多高铁皮柜大小的主机,加上纸带机(后期改进为读卡机),组装好后,除了供学校自己的科研使用外,还在全国各地销售了十几台。当时(七十年代)一台的售价是10几万元人民币,如果换算到今天,相当于价值大约为100多万元,非常高档的小型计算机了。下面大家猜猜,这么高档的计算机,它的内存是多少那?(都把嘴闭好了,我要公布答案了)—— 4K。一块50公分见方的内存板,插入到主机箱中,好了------ 1K;再插一块内存板,好了------ 2K;再插一块内存板,好了------ 3K;再插一块内存板,好了------ 4K;再......不行了,插不起了,太贵了!这就是当时的环境。这样的环境下,用什么写程序那?当然只有机器码了。先用汇编写,然后翻阅手册手工改写为机器码,然后打卡或穿纸带,输入运行。可以想象,在当时的条件下,什么叫好的程序那?什么叫优秀的程序那?—— 技巧! 程序设计的最初始阶段,是讲究技巧的年代。如何能节省一个字节,如何能提高程序运行的效率,这些都是要严肃考虑的问题。而所谓的程序的易读性,程序的可维护性根本不在考虑范围之内。 今天,35岁以上的学习过计算机的朋友可能都使用过一种个人计算机——APPLE-II(中国也生产过这种计算机的类似产品“中华学习机”)。主频1M,内存48K(扩展后,最多可达到64K)。我就是使用这样的计算机长大的 :)。当年,类似的个人计算机产品,还有PC1500,Layser31......
Visual C++初学者入门的一条捷径(2005-06-19 20:34:00)
摘要:[文章信息] 作者: CQFZ 时间: 2005-02-14 出处: 博客 责任编辑: 方舟 [正文] 首先声明,我可不是什么高手,也就是刚脱贫。因为运气很好,买到了几本好书,在学习过程中几乎没走什么弯路,没费什么劲就入门了,现在一般的小程序能搞定了。看到那些因为不知从何下手而苦苦挣扎的朋友,希望我的文章能给他们一些帮助。 学编程急不得,上来就学VC肯定碰一头灰,说VC难就难在这点上了。如果硬上,意志坚强的话也许能挺过来,但也是会缺乏后劲,不得不回过头来补习基础知识。意志不坚强的话,很有可能就此放弃了,并留下一个VC难得不得了的印象。其实,只要踏踏实实一步一步来,VC也就是很简单点事。在这里我说一下,如果你还只是一个初中生,那么你就应当仔细考虑一下了。首先,限于你的知识和思维能力,学学C语言还应该没问题,但要学VC是要下相当大的功夫的。而且,你现在学到的东西将来一定会过时,所以不如把精力放在算法的研究上,毕竟这些东西永远都不会过时。 我觉着如果走对路子,入门VC,一个暑假应该够用了。 虽说学VC并不是传说的那么难,可不下些苦功夫是学不成的。在学VC前,你必须确定,你是因为热爱编程才学VC的,而不是出于炫耀或其他。否则,恐怕你坚持不到胜利的那一天。 对于首次接触编程的同学,我建议最好先学一下Quick BASIC(DOS里就有带,就是那个QBASIC.EXE),不用多学,知道什么是整型什么是浮点,以及DO...LOOP FOR...NEXT 等最基本的知识,能算个阶乘,求个积分就行了,关键要明白计算机是怎么执行命令的,对编程有个感性认识。如果你对自己有自信,也可以直接学C++,应该也不会多费太多事。不过我觉着因为有很多资料是FOR VB的,并且网页编程常用VB Script,以后你也很有可能要用到VB,所以了解一些BASIC对以后也是有帮助的。而且如果只是要算个小题用QB比VC、VB之类方便多了。(找个人教一两天应该就能搞定了吧) 之后我建议找本初高中信息学奥赛的书(有些奇怪吧)。这些书里讲解了基本的算法,写的却比较通俗,没什么高深的数学知识,容易理解。这些东西在数据结构课程中有系统严密的讲解,所以也可等以后再学。但我觉着现阶段写一些小程序,实现些常用算法对自己的思维是很好的锻炼,对以后的学习大有好处。我想,能......
写好C程序的10条秘籍(2005-06-19 20:32:00)
摘要:神乎其技,惟C程序,功到自成,十大建议! 1、汝应频繁催动lint工具,据其语法声明修习内力,此事皆因lint之思虑决断实远在君上。 2、不可依随NULL指针,如若不然,混沌痴颠必俟君于彼岸。 3、纵有天赋大智慧,知晓其事无碍,汝亦当尽数强制挪移函数参数为原型所期之数据类型,以免一时疏忽,致使数据类型向汝讨还血债。 4、若头文件未于函数原型之中声明返回值类型,汝当亲为此事,更须谨慎再三,以防不测降临汝身。 5、汝须亲核字符串、数组操作之越界与否。古之圣人有言: 尝祈门人对答“然也”,不意门人答曰“吾了然于胸无须多虑尽请宽心他日趋庭必当重谢”——所期者短,所获者长,此于数组,实最险要处也。 6、若函数声明内提及,于异常时将返回错误代码云云,汝当谨慎校核该返回值。或有校核语句使汝之代码增大数倍,令汝之手指因敲键而痛楚莫名之事,汝亦当如此。不然,汝固以为此异常之事难得一见,上苍亦必借此惩戒汝之傲慢。 7、汝应研习库函数,不当亲笔重写之。如是,汝之代码必短小易读,汝之心境必清爽恬淡。 8、纵汝不愿,汝亦应借括号、缩进之属,使汝之代码间架清晰,可为后者借鉴。汝之大智慧施于决疑解难则可,施于敷设谜团、淆乱文体则万万不可。 9、外部标识符之前六字符当与众不同。此律法看似粗陋,和者寥寥,然其效用自能延续永远。汝若不从此言,他日,汝欲连接程序于旧作之上时,必抓耳挠腮、蓬头垢面,狼狈之相尽现矣。 10、或有族类,大言炎炎,云“普天之下,莫非VAX”。于此等异端,汝当摒弃之、断绝之、远避之。更有异人,笃信魔道,以为纵汝所用电脑频繁换代,汝之程序亦能长久适用。汝亦不可与此类恶人来往,谨记谨记。 如何编写最烂的C 语言程序 1、重写标准库函数,把函数名改成你自己才懂得的晦涩的名字。 2、使用晦涩的,个性化的,无法移植的函数库,这样你就永远也不会离开你喜欢的平台了。 3、在所有函数调用前,使用最能精确描述函数功能的注释,比如printf("Hello world\n"); 4、记住:只有菜鸟才在代码中使用回车换行符; 只有菜鸟的徒弟才使用制表符; 高手会在代码中添加无数内嵌的汇编指令。 5、“用户界面”是给低能儿准备的,“用户”是决不会通过界面与你的程序打交道的。 6、如果你必须注释你的代码,那就从其他人的代码里随便抽几条注释,放到你的代码里吧。这是最快、最容......
C++未来断想(2005-06-19 20:24:00)
摘要:[文章信息] 作者: 曾毅 时间: 2004-08-05 出处: csdn 责任编辑: 方舟 [正文] 虽然C++从脱胎于C开始,一路艰难坎坷的走过来,但是无论如何C++已经取得了工业基础的地位。业界的大量用C++写成的产品代码以及大量的C++职业工程师则是最直接的证明。同时,我们可以看到各个高校的计算机专业都开设有C++这门课程,网络上对于C++的学习讨论也从来都没有停过。但是,在Java和.NET两大企业开发平台的围攻下,给人的感觉是C++越来越“不行”了。 C++在面向企业的软件开发中,在开发便捷性等方面的确要比Java和C#差很多,其中一个问题是C++语言本身比较复杂,学习曲线比较陡峭,另外一个问题是C++标准化的时间太长,丧失了很多的壮大机会,耗费了很多精力在厂商的之间的斗争上,而C++的标准库离一个完善的程序开发框架还缺少太多太多的内容,各个第三方的类库和框架又在一致性和完整性上没法和随平台提供的框架相提并论。难道C++真的要退出历史舞台了? 从C++目前的活跃程度,以及应用现状来说是完全能够肯定C++仍然是软件工业的基础,也不会退出历史舞台的。另外从Boost,Loki这些库中我们也能够看到C++的发展非常活跃,对于新技术新思维非常激进,C++仍然广泛受到关注。从ACE在高性能通信领域的应用,以及MTL这样的库在数值计算领域的出色表现,我们可以看到C++在高性能应用场合下的不可替代的作用,而嵌入式系统这样的内存受限开发平台,比如Symbian OS上,C++已经发挥着并且将发挥更大的作用。可以预见的是以后的软件无论上层的应用怎么变,它的底层核心都会是由C/C++这样的系统级软件编写的,比如Java虚拟机,.NET Framwork。因为只有这样的系统级软件才能完全彻底的发挥机器的功能。 需要看到的是两个趋势,一个趋势是C++变得更加复杂,更加学院派,通过模板等有潜力的语法因素构造越来越精巧的库成为了现代C++的热点,虽然在利用库实现新的编程范式,乃至设计模式等方面很有开创意义,也确实产生了一些能够便捷开发的工具,但是更多的是把C++变得更加强大,更加复杂,也更加难懂,似乎也更加学院派,不得不说它正在向边缘化道路发展。另一个趋势是C++在主流的企业应用开发中已经逐渐退出了,ERP这样的企业软件开发中基本上不会......
程序设计语言的进化(2005-06-19 20:22:00)
摘要:中国科学院软件研究所 宋靖宇----------------------------------------------------------------------1967年5月20日,在挪威奥斯陆郊外的小镇莉沙布举行的IFIP TC-2 工作会议上,挪威科学家Ole-Johan Dahl和Kristen Nygaard正式发布了Simula 67语言。Simula 67被认为是最早的面向对象程序设计语言,它引入了所有后来面向对象程序设计语言所遵循的基础概念:对象、类、继承。之后,在1968年2月形成了Simula 67的正式文本。 也是在1968年,荷兰教授E.W.Dijkstra提出了“GOTO语句是有害的”观点,指出程序的质量与程序中所包含的GOTO语句的数量成反比,认为应该在一切高级语言中取消GOTO语句。这一观点在计算机学术界激起了强烈的反响,引发了一场长达数年的广泛的论战,其直接结果是结构化程序设计方法的产生。 相信当时没有任何人预见到当年发生的这两件事对后来计算机技术,特别是软件技术所产生的深远影响。尽管这两种方法的思想差异巨大,但是多年以后,无论是Ole-Johan Dahl和Kristen Nygaard,还是E.W.Dijkstra,都因其在这一年所取得的成就,获得了计算机界的诺贝尔奖——图灵奖。 随着计算机技术的迅猛发展,硬件成本不断降低,而软件成本却不断增加,因此,如何缩短软件生产周期和提高维护效率,研制出高质量的软件产品成为一个重要课题。 程序设计思想的进步 在20世纪60年代,软件曾出现过严重危机,由软件错误而引起的信息丢失、系统报废事件屡有发生。为此,1968年,荷兰学者E.W.Dijkstra提出了程序设计中常用的GOTO语句的三大危害:破坏了程序的静动一致性;程序不易测试;限制了代码优化。此举引起了软件界长达数年的论战,并由此产生了结构化程序设计方法,同时诞生了基于这一设计方法的程序设计语言Pascal。 由瑞士计算机科学家Niklaus Wirth开发的Pascal,一经推出,它的简洁明了以及丰富的数据结构和控制结构,为程序员提供了极大的方便性与灵活性,同时它特别适合微计算机系统,因此大受欢迎。结构化程序设计思想采用了模块分解与功能抽象和自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分......
[转]百度硬盘搜索分析(2005-05-22 13:44:00)
摘要:FROM:http://www.wespoke.com百度硬盘搜索将于下周一推出颇受注目的[百度硬盘搜索],说瞩目,原因是在搜索引擎大比拼的时代,能否吸引用户,吸引了用户后能否守住用户,现在似乎大家的共识是在桌面上了。而这一款硬盘搜索也将逼迫同行业的中文搜索引擎们要考虑如何巩固市场的问题了。百度硬盘搜索下载 http://disk.baidu.com/在使用了几天的百度硬盘搜索引擎概括的看起来有如下的特征:1] Google Like就是从设计风格上和理念上都沿袭了google 的硬盘搜索产品,趋同设计或者copy strategy是现在一个减少开发成本减少创新成本的绝招,这点上百度做的非常到位。2] Baidu Style当然,是中文产品,就有中文产品的特征。突出的特征有两个:1.中文分词--这个简直是废话!不能分词不就是google 硬盘搜索了么?2.加密码功能。这个功能很体贴,因为加了密码就在一定程度上保护了个人隐私,对于中国现在还不能人手一台电脑的国情考虑的比较周到。3] Something whoops.1. 图片搜索没有能给出缩略图,这样的话这个功能显然就型同虚设了。而且最重要的是,因为图片搜索在网页上的算法跟本地的文件系统的算法的差异很大,因此这个功能应该说开发的不算好。2. 长结构的语句搜索,硬盘搜索的分词系统不如百度网站本身的好。这点上等下我有两张图可以做对比。我想百度的硬盘搜索并没有完全采用百度网页的分词算法,因此可以从长句子的查询中得到结果,本地的硬盘搜索是先对长语句进行分词后进行“and”的查询结构,查询后没有进行进一步的“=”的验证。4] Something cool.1.索引的快速。我0.8G的笔记本平时运行个PPT都只喘气,20分钟内百度硬盘搜索索引了6000多个文档。搜索起来也非常的快。2.能够方便的索引中文word/ppt/pdf/xml/..... 并能够清晰的区分的方式显示搜索结果和数目。百度硬盘搜索能够占领多大的市场?这点上我没有概念,在百度硬盘搜索之前,我曾经使用过几个硬盘搜索工具,中文的硬盘搜索例如 88data.com ,就做的相当不错。不过市场还没有做起来,因此88data到现在的搜索量看起来还是一个可怜的数字。百度的客户端一直做的不错,以前的百度下吧我曾经用来下过一阵子电影,不过后来没有了Windows Deskto......
[转]Google网页加速器的工作原理(2005-05-22 13:40:00)
摘要:FROM:http://www.wespoke.com最近一直忙着写论文,周末终于有空放松半天时间,到网络上看看,铺天盖地的关于google最新的消息,原来google又出了新玩艺,Google Web Accelerator。听说很神,特地找了一台Windows电脑准备一试。可是我去google网站下载时却发现google 说用户太多,不提供了。感谢Owen硬盘里还有保留,终于得到了珍贵的“绝版”Google网页加速器。我尝试访问了6个网站,并且分析了日志,基本上明确了Google网页加速器的工作原理,其实很简单:Proxy + 缓存。1. 本地化的Proxy + 缓存当运行了 google 的网页加速器,本机会启动一个httpd的服务,端口是9100 :http://127.0.0.1:9100这个服务实际上是一个本地化的Proxy+缓存,就是所有的 http 的请求都是通过这里走的。那么为什么能够加速呢?缓存。当你第一次访问一个网页的时候,相当多的图片,静态文字全部的存储下来,然后当你再次访问的时候,就直接从缓存里调出来,因此大大加快了访问速度。我这里做了一个有趣的试验:访问我自己的blog一个日志(http://blog.wespoke.com/archives/000907.html)的日志记录:adsl-69-154-77-102.dsl.rcsntx.swbell.net - - [09/May/2005:12:34:38+0800] "GET /archives/000907.html HTTP/1.1" 304 -刷新这个网页,Apache的记录仍然是 304。表明没有传输内容,紧紧验证了expired的信息。touch archives/000907.html (改变这个文档的时间标记)再次刷新,这次不一样了:adsl-69-154-77-102.dsl.rcsntx.swbell.net - - [09/May/2005:12:35:28+0800] "GET /archives/000907.html HTTP/1.1" 200 10319这次是返回了200,并传输了10319个字节。这个就是工作的原理,在第一种的情况下,节省了10319个字节的传输。当然,这也是所有的缓存proxy的设计原则。2. Google 的缓存+路由当我发现我访问的......
[转]中文blog现状之扫描与商业展望(2005-05-22 13:35:00)
摘要:《现代信息技术》杂志卢亮关键词:Blog 、blogger、User API、Mblog、Content Management 、e-learningBlog的概念在2002年进入中国以后,在短短的一年的时间里迅速增长。随着blog 托管网站的兴起,blog已经从单纯的抽象概念走向了一个被大众接受的一种媒体文化以及一种全新的网络文化及应用。现阶段中文blogger的数量保守估计应该在30万左右,而且以每天新增上千blogger的速度进入了高速增长期,可是数量不是质量,拥有30万中文blogger的中文blog市场,在商业方面仍然是非常初步的,如何在短期内从blog里面探索出一条商业道路来仍然是一个未知数。现状扫描中文blog从2003年末至现在,发展迅速,同时也随之而来出现了一些新情况,从现有的中文blog的现状来看,有如下的几个特点:• 托管服务风起云涌• Blog服务的鱼目混杂• 专业与无序并存• 一些有益的尝试托管服务风起云涌:在2003年年底,中文blog只有3家托管服务,这三家都有超过1年的历史,是中文blog兴起的先行者。虽然这三家blog托管继续领导中文blog市场,可是已经在短短的几个月内涌现了近10家的blog托管网站。这些网站规模有大有小,提供的服务有好有差,但是无论如何,可以看得出,已经有越来越多的人注意到中文blog的市场了,认为这个将是一个很好的尝试,尽管谈起商业模式,现阶段基本上尚没有一家blog托管网站实现了盈利和短期内可以看到有盈利的可能。Blog服务的鱼目混杂:Blog热导致了众多的门户网站纷纷建立了自己的blog服务,而这些服务,通常不过是一个发布系统再加上一个日历和一个能够供用户进行评论的留言功能。如果说这样的系统就是blog,显然有些强差人意了。这些门户网站依靠自己的用户资源,可以很轻松的将其所谓的“blog”的概念普及给他们的用户,可是blog内在的许多相关的概念例如Traceback,Rss,Creative Commons却都没有被采纳。可以预计,这样的一些系统,会为其用户带来一些负面的导向,因为我们已经听到了“blog不就是网络日记本么”这样的感慨。专业与无序并存:最初加入blog潮流的中文blog先行者,大都是一些媒体工作者,一些大学生以及一些IT从业人员。基本的blo......
[转帖]float谈(2005-01-20 17:52:00)
摘要:标题:浮点类型深谈1.编写本文目的浮点运算已属常用,但仍有深究必要,以消除其中可能的错误使用。2.预期读者3.编者语㈠ 在其他任何公共论坛上转载本文,请标明出处和作者,而无需授权和确认。4.正文㈠ float格式简谈Inter 80386/80387 及以上型号CPU有三种浮点类型,即短实数、长实数和80位临时实数,分别占用4字节、8字节和10字节,对应着C/C++中的float、double和long double[注1],我以 Real4、Real8和Real0表示之。每种浮点格式皆应符合IEEE标准,称为规格化数,不符合IEEE标准的浮点格式称为非格式化数(NAN),我以最简单的float格式举例。Float格式数据长32 bits,最高位为符号位:0为正,1为负;紧接着的8位为阶码:为了便于比较大小,其固定偏移7FH长,即0实际表示-7FH,7FH实际表示0,0FFH实际表示80H;余下的低23位为尾数(有效数字),为了使有效数字达到最大精度,这23个有效数字隐含着固定位1[注2],比如尾数10000000000000000000001其实就是1.10000000000000000000001,1被省略,而小数点固定在首位。根据以上规则可以知道float所能表示的绝对值大小范围是0 000,0000,0 000,0000,0000,0000,0000,0000 B 至 0 111,1111,1 111,1111,1111,1111,1111,1111 B即±1.00000000000000000000000B×2(0x00-0x7F) 到±1.11111111111111111111111B×2(0xFF-0x7F)然而事实上并不是这样,因为从这个范围可以看出它并不能表示0.0,而0.0为常用数字,所以特别规定±1.00000000000000000000000B×200为零,规定指数为0xFF的数字为非法数字,因此float实际的绝对值范围(除去0以外)是0 000,0000,0 000,0000,0000,0000,0000,0001 B 至 0 111,1111,0 111,1111,1111,1111,1111,1111 B即 0 并上 ±1.00000000000000000000001B×2(0x00-0x7F) 到±1.111111111111......
[转]如何在实模式下直接访问4GB内存(2005-01-09 13:06:00)
摘要:在DOS下编程因为实模式的限制,最大只能访问1M字节内存空间,就算加上打开A20线后可以访问的65520字节也只有区区1088K而已,而这么少的一点内存中还有大量区域被操作系统、BIOS和TSR等程序占用,真正能给程序员使用的空间少得可怜。好在计算机的发展给广大程序员提供了一些解决这个问题的办法。 最常见的方法有以下几种: 1. 精减程序的尺寸,同时尽量避免一次使用太多的内存 (有没有搞错?偶只是初学者,不是算法专家耶) 2. 使用文件覆盖技术,只在使用指定代码时才将其读入内存,执行后释放 (偶的程序怎么就这么慢呢?硬盘狂转中...) 3. 用标准的DOS扩展技术如EMS、XMS、DPMI (哇!功能好强,不过程序改起来好累啊) 4. 自己写保护模式平台 (谁要这么做了别忘了发一份源程序给我啊) 5. 转移到其他平台如Windows/UNIX/LINUX (拜托,我只想在DOS下运行啊) 程序压缩效果再好也是有限,总不能达到50%以上吧,程序要用2M乃至10M内存呢?文件覆盖需要自己编写调度模 块,而且因为频繁读写硬盘,将导致程序运行速度变得很低;EMS、XMS、DPMI功能强大,兼容性强,尤其是DPMI规范不 但支持大内存访问,而且还可以在保护模式下运行代码并能超越64KB的段地址限制,实在是写大型程序时的首选。但EMS 、XMS只能将扩展内存当作高速硬盘使用,所有的访问都只能通过一系列中断调用来完成,对于经常需要小尺寸大批量内 存访问的程序就不太适合,而且使用它们均受制于实模式的64KB段地址空间,对于大数据量访问也不太方便;用DPMI当 然就没有这些限制,但它需要将所有的程序按保护模式的结构改写,这也是一件麻烦的事。自己写保护模式平台(汗!... 这个我想没有几个人做得到吧,我就算做得到也不会做的)。至于转移到其他平台那就不用我说了。 看到这里,读者不禁会问:“那照这么说来没有一种方法是好的了?” 其实也不是这样,每种方法都有它的优点和缺点,要看你的需要来决定到底使用哪种方法。 好了,废话说了这么多,再不切入正题的话估计会有人向我扔鸡蛋了,下面就来告诉大家怎么做到在实模式下访问4GB内存。这种技术需要保护模式支持,所以只能在80386以上的CPU中运行。 学过一点保护模式的读者都知道,在保护模式下段地址寄存器中内容的不再......
