Programming 版 (精华区)

发信人: zhangyan (生命中不能承受之弱), 信区: Programming
标  题: 个人论:编写程序方法论
发信站: 哈工大紫丁香 (2001年07月07日18:13:39 星期六), 站内信件

主  题:个人论:编写程序方法论(原作者,huangbeyond)
作  者:totodo
所属论坛:C/C++
问题点数:0
回复次数:9
发表时间:2001-7-6 21:49:27
 
  
  --本文只针对我自己的计算机系软件专业学习而论

                  一  谁不该读此文

  我的文章一向极具针对性,从来不会为我所看不惯的东西而保守了笔墨的犀利。

此文自然也不会例外。以下几类人忌读:凡是想要去考研究生的人别读,此文具备

思想意识是你们淤腐脑袋所不能理解,你们应该把这点时间花在死啃教科书上。喜

在计算机领域玩弄图形设计,网页制作以及一切有志投身于计算机的软件应用领域

人别读,我会亵渎了你的理想的。平时喜欢把玩CPU和内存条于股掌之上,浑天把

频如何如何挂在嘴上的骨灰级电脑硬件DIYer们,也别读此文章,这倒不是你们不
适合
读,而是我根本就认为你们读我这篇文章是对我莫大的侮辱! 
  开篇结束,理性开始

                  二 从什么开始?

  很多的朋友曾问过我:我应该从什么东西开始学起?我都无一例外地回答说:汇

编!可这样的回答,不能使每一个人都明白的。他们说:我也跟着教材跟着老师学

了汇编语言呀。好,我就从对汇编教材的分析,来阐明我对汇编学习的理解。大家

细看看我们的汇编教材,它开宗明义的是IBM-8086宏汇编语言,而教材最致命最能

害学生对汇编的认识之处就在于此!相信每一位学习了汇编的同学,都明白一点,

是在编写汇编程序时,最常用最依赖的是INT21H。而这INT21H,根本就不是8086的

断服务例程,它是系统提供的,是DOS这个操作系统提供的!谁的汇编程序,能离
得开
INT21H?离开了它,不仅失去了系统那庞大的服务例程,基本丧失了实际意义,而

能否在DOS平台上正确运行,正确实现功能,还不能肯定。(高高手除外!)(在这里
,我
引入我自己的一个名词来表述--“系统相关性”。)所以,教材在宣言自己是与系
统无
关的IBM-8086汇编的同时,让学生去学的却是具有“系统相关性”的DOS汇编,这
一重
大的失误,使绝大多数的同学在学习汇编的时候,注意的是对汇编语言本身语法的
理解,
而忽略了与之相关而绝不可少的DOS系统原理,从而在将来运用自己所学到的知识
进行
编写程序时,倍感系统相关的知识的缺乏,感觉除了教材上的例子以外,自己无从
下笔。
各位读者,请认真回答我的提问,有过这种感受吗?而这绝对不能怪学生,只能怪
教材
自己的缺陷和片面。对此,我开出的药方是,仔细阅读和学习我们的DOS书的后半
部分
(那本四川联合大学出的《DOS实用技术大全》),你们在认真学习它之后,一定会
有豁
然开朗的感觉,不会再对DOS系统的底层迷惘了,不会感觉无从下手,这对自己以
后的
编程工作起的是基本性作用的。
  读到这里,你们一定问我了,难道学习编写程序就一定要学习DOS系统原理吗?

说,是的,虽然现在流行的WINDOWS里,表面已经看不见DOS的痕迹了,可是,对
WINDOWS
系统有大致了解的同学却应该知道,WINDOWS9X使用的是DOS内核。而没有DOS系统
知识,
是很难去了解WINDOWS9X原理的。而且,外面也没有深剖WINDOWS9X原理的书籍买,

有对它的介绍,都是立足于DOS的。比如,树型文件管理系统的FAT和FDT,图形显
示接
口的操作,都清晰可见DOS的影子。没有DOS的系统知识,的确是难于理解这几个
WINDOWS
的较核心内容,甚至根本就是无从理解起。在学习了DOS的系统知识后,再谈对
WINDWOS
系统的理解和学习,就是事半功倍了。我自己从高一开始用DOS,大一认真学习了
DOS的
系统原理,所以我今天才能较快地进入WINDWOS世界的,而DOS在其中起的作用,我
简直
是无法用言语来形容。 

          二  明天是哪方

  在DOS系统原理被学习完后,的确应该考虑下一步该如何了。因为没有人天生是
喜欢
用又臭又长的汇编语言来写有实际意义的程序的,包括我。我的建议是C。第一步
是TurboC2.0。
原因有二:其一,深刻理解C的概念,对以后的学习绝对是有前导作用的。其二,
TC提供
了对汇编的编程接口,这为大家去实际使用所学的“系统相关”的汇编知识,提供
了极其
广阔而方便的舞台。究竟学到哪个程度呢?有一本书,叫《C语言高级编程技巧》
,只要
能理解它里面80%以上的内容,你的TC就过关了。
  这时候,完全可以开始WINDOWS的程序编写了。
  而一旦进入了Windows那五彩缤纷的编程世界,多半会有一种眼花缭乱的感觉的
。我
当时就是如此。所以,Windows编程的第一门语言尤其重要。我的建议是VB。虽然
VB有这
样那样的不足和缺陷,(比如运行缓慢,属于解释性语言,内部完全封闭等等)可
VB作为
Windows编程的入门级语言,它的启蒙作用不可小看。它能勉强让你理解Windows系
统独特的消息驱动模式,理解窗口的基本概念,理解可视化编程的初步,可知这些
概念的感性理
解,对后面的学习不无有利。这个阶段应该不能太长,2--3周就可以了,此时,不
要满足
于自己基本能做出些漂亮的Windows程序,更不要拼命在VB上下功夫,因为最美丽
最有诱
惑力的在下面!

          三  一头拜倒在VC脚下

  对一个真正的程序员来说,VC是将你同一般编程爱好者划分开来的标志!
  而VC的世界里,却存在着MFC和Win32 API那有争议的较量,虽然他们根生同处。
我个
人的建议是:Win32 API是绝对的选择!在Win32 API的知识领域里,全面解释了
Windwos
系统里一个程序的一切。对于这个级别上的程序,只有你暂时不能理解的,没有它
不能解
释的。从前台桌面到后台进程,从图形处理到文件打印,从句柄,内核对象到互斥
量,临
界区,从网络通信到设备驱动设计,Windows系统的里里外外基本都在这里留下编
程接口,
你在日常使用Windows时留下的疑问,你在使用VB时不能实现的技巧和功能,此时
都可以明
白和实现了。不过,你应该有充分的信心和毅力去坚持学习,Win32 API编程号称
Windows
系统下的汇编,所以,对它的广阔和精深,应该有准备。学习的时间不短,1年算
快了。
我当初接触它时,就不信它要如此多的时间和精力,可最后我却学了一年半。
  学成它的标志是:从此你在打大部分游戏时,你会发觉你已经不自觉地去考虑别
人的
游戏是如何编写的。因为你的眼里没有游戏,只有程序!而在使用一些别人写的不
是很优
秀的程序时,你会有底气说:“有时间,我也重写一个!”此时,你会发觉自己经
常性地
在心里揣摩别人的程序,比如网络蚂蚁,比如Foxmail3.0,比如Winamp等等。
  在这里,我着重讨论一下MFC和Win32 API的优劣区别,这一点,相信很多的同学
是模
糊的。如果用VC编辑器写一个Windows程序,使用MFC的话,MFC的编程向导能提供
一些框架
服务,使得在程序建立的初期,感觉很是方便。而当程序的代码增长后,MFC在初
期提供的
方便,便没有痕迹了。相反,MFC的一大缺陷就会在此时出现了。我概括如下:“
MFC所支
持的功能,使用是方便的,而没有提供的功能,自己通过兼容API函数的模式去实
现,比一
开始就使用Win32 API还要麻烦。”使用过MFC的同学,可以去考虑如何实现比如,
自定义
消息的处理,多线程的实现,托盘区的使用,右键弹出式菜单,物主绘图窗口和菜
单,子
窗口的子类和超类处理,是不是极其麻烦?这样的问题我还可以提出很多,而在
Win32 API
的编程思维和实现里,这些却都是很顺理成章的了。
  再一个,从编译的角度来看MFC和Win32 API的区别。MFC中封装的各个类的绝大
部分的
成员函数,其实都是API函数的二次使用。是MFC的LIB库将其打包成了可供调用的
类代码,
否则,为何在生成Release版时,都要将其设置为静态的链接库呢?说透去,MFC的
类库只是
API的一个真子集,对MFC学得再好,理解得再深刻,也只是间接地在理解API,所
以一开始
就应该学习和使用API。
  我再用一个比喻来结束我对MFC和API的评论。“MFC为编程人员提供的自生成代
码,是
一个分数的分子,而程序代码的长度是分母。而这个分数的值就是MFC所提供的方
便值。在
程序代码不长的情况下,MFC提供的方便之处就很明显;而随着代码的增长,方便
值的实际
意义就立刻减小而副作用增加了。”
  我自己在进行了一年半的Win32 API编程学习后,深感通过它,自己对Windows系
统原理
和Windwos的编程机理比从前有了质的提高,从前不了解和模糊的编程想法和实施
细节,都
得到了很好的满足,自己可以明显感觉编写程序的水平上了一个台阶。

          四    广阔地运用已学知识

  到这个层次,应该能编写些程序了。比如写局域网上的类似ICQ的聊天程序,写
自己的
FTP上传下载的网络程序,写自己的屏幕保护程序,写......太多了!
  我提醒大家,到时候不要怀疑自己的水平,不要迷信课本的片面,认真地去写,
充满信
心和激情地去写,你会发现,自己原来也是可以做出如此好的程序,从前许多自己
想都不敢
想的东西,如今也通过自己的努力而实现了。有时也不要吝于怀疑,可知我们青年
人的有些
想法,有时不知要比教材和权威们高明多少倍啊!

          五    一山更有一山高

  学了Win32 API,可千万不能以为自己已经掌握技术的精髓,在追求技术的无限
里,没
有最好,只有更好。 
 

--
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.170.172]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.735毫秒