计算机软件编程学习

谈点经验----学编程还没把握方向的进来
一 谁不该读此文
————
我的文章一向极具针对性,从来不会为我所看不惯的东西而保守了笔墨的犀利。此文自然也不会例外。以下几类人忌读:凡是想要去考研究生的人别读,此文具备的思想意识是你们淤腐脑袋所不能理解,你们应该把这点时间花在死啃教科书上。喜欢在计算机领域玩弄图形设计,网页制作以及一切有志投身于计算机的软件应用领域的人别读,我会亵渎了你的理想的。平时喜欢把玩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,可千万不能以为自己已经掌握技术的精髓,在追求技术的无限里,没有最好,只有更好。我举一二例。VxD会吗?编写基于CPU的Ring0级的系统DLL,会吗?这些属于Windows 系统极其深刻的内容,不但没有出现在市面上可见的书籍上,就连文档资料都是MicroSoft公司发布的英文版。比如Windwos9x系列的DDK文档。杀毒软件的技术原理就在这个级别上,CIH病毒的原理也在这个级别。杀毒软件的“实时监控”原理就是基于文件系统的底层中断的提前截取和处理的技术。这时,对网络的理解也应该是去更上一层楼了。不要满足于简单地使用网络编程接口,应该试图去理解TCP/IP协议,去理解FTP,HTTP,POP3,SMTP等等遍布在Internet各处的协议,去编写自己的各类网络服务程序。OICQ的原理就在这个级别上。
——————————————————————————
六 再看看四周:实践!
————
“乱花渐欲迷人眼”是当前各种编程工具所构成的现状。VB,VC,VFP,C++Builder,Dehil,MS-C++,SQL等等,实在是太多了。其实,对一个程序员来说,能熟练掌握一门语言,是基本要求。能用多门语言,是社会上的流行大趋势。我个人的情况是:能基本掌握VC编辑环境下的各类编程方式,而VB,VFP,C++Builder等语言的代码我能阅读,关键时刻我也可以用它们来开发我的软件。用多种多语言共同开一个发软件,其实是社会流行的另一个趋势。一个合格的程序员,应该是对所开发的软件有一个统筹的规划和安排,这样的素质,只有是在学会多种语言的前提下才能实现的。上面的学习,归根到底也只是理论知识的学习,而只有在亲自地编写大量的程序后,知识才能真正的形成网状,才能达到融会和贯通。计算机的学习讲究的是理解,而只有这个层次上的理解,才是对计算机软件的真正理解。
——————————————————————————
七 再回首:看看教材
————
这个时候,再来看看教材,猛发现教材中原来还是有东西可学的。可是,这个认识,却只是建立在具备了一些教材外的知识后,才能可悲地发现到。世界本来就应该没有可以让人一次学到家的书本知识,教材当然也不例外!于是,我这才真正发现了教材中那可贵的东西,可算是“只是当时已惘然”吧。可,没有学习教材之外的知识,我能发现它吗?我自己认为不能。因为那样的话,就是“不识庐山真面目,只缘身在此山中”。不出教材的框架,不见教材的全貌!蓦然间,我发现了自己也庆幸着自己?

鱼台论坛http://bbs.370827.org/thread-5724-1-1.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值