分享
 
 
 

No MFC (我) 的自白

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

请不要误会,我的名字不叫 "No MFC" 。

写这 "自白" 缘于昨日一网友 chinaeagle 问我,写 No MFC 系列的目的何在? 我竟一时间答不上来,我后来想了很多。

起初写作的时候,因为我所举的源程序在开头都会预先定义 #define WIN32_LEAN_AND_MEAN 。使不包含和 MFC 有关的预编译,所以取名 No MFC 编程系列 。 可是,我潜意识里并不光是为了这个简单的原因。

No MFC 的最大好处在于不封装! 我有足够理由相信这样有利于学习。 你可以完全了解你的程序运行的基本原理,这是你在学习 MFC 的过程中无法具备的。 ( 我不想只是 见猫画猫,想做创新需要建立在对 "客观世界" 有足够了解和认识的基础上的 )

起 No MFC 这个标题并不代表我对 MFC 有成见。事实上,我从来不反对使用高效率的开发工具。 记得我刚刚开始学习 Windows 编程的时候,手头上仅有的全部书都是关于 MFC 的,我就靠那些书籍来入门。结果呢? 我只能说完全不明其所而然,只懂得照抄一段又一段莫名其妙的代码,更别说编程序按照自己的意思表达出来了。 这样的状况一直没有好转,直到我知道世界上还有 SDK 编程,还有 API 可用,并且尝试了解 Windows 的运行机制为止。

值得幸运的是迷茫的过程只持续了不很长的一段时间!

在我的价值观中,何谓懂编程呢? 我认为现阶段的学习目的应该是 — Windows 运行基本原理。 是懂得 Why 而不仅仅是 How !

对我而言,学习一门语言,懂得语法,懂得方法 (继承,模板) 不是最终目的!

我应该掌握并运用所学的语言去描述计算机抽象的 "虚拟世界" 。那代表我要对该世界有足够的理解。

这里我要再提到抽象层面的概念。( 以下例子可能有些极端,但那不是讨论的重点 )

比方说一个绝对的底层方面的高手,他对保护方式的运行机制完全了解,知道如何初始化 LDT,GDT,任务门等等,直到如何访问它们,甚至可以编写从硬盘引导系统的程序。 但是,这样的高手到了 Windows 的虚拟世界,他就完全陌生了,因为他之前没有接触过 Windows ,在这方面,他就成为初入门的菜鸟了,他可能要花半年的时间去了解 Widows 运作方式,才可以应用到实际中去,最终又重新成为高手。

原因何在? (我不想讨论这个例子的可能性) 因为从操作系统的角度看,计算机已经被抽象,分离开来,成为独立的抽象层面 (另一个虚拟世界),虽然它看起来和先前的有很多类似的地方,但是,在它之上编写程序将是完全不同的,先前用汇编 (甚至机器码)来写程序,而现在就只剩下 API 可用了!

Java 其实是另一个虚拟世界,它有自己的虚拟机,实际上是另一个抽象层面。不然你说,有多少 API 被搬到 Java 里了?(应该是一个都没有吧?)

MFC 也是! 要是谁能看穿 继承、父类、对象背后真正在工作的 API 的工作原理,那么称呼他一声高手应该不冤枉了吧!( 侯俊杰就是这样的一个高手,他是我尊敬的前辈!)

(其实我的自白到这里本也差不多了,下面是补充内容)

一个不得不提的内容是关于优化的。

对规律了解的更多有助于你做好程序的代码优化。 (代码优化不同于算法优化,这里假定程序在算法上已经最优化。)

你听说过紧凑编码吗?(在中国,应该只有少数人会这样做) 一般情况下,像这样优化代码的编程方法不会用来开发大型程序,不过在大项目的关键部分开发中不可或缺,就连开发一个游戏,也会被频繁的使用 ...

任何事物都有 "好的" 和 "不好的" 一面,软件工程也不例外。 它是为了开发大型项目而产生的,实际证明了这套理论很有效! 而紧凑编码在某些方面上跟软件工程的思想是背道而驰的! 因为软件工程并不保证代码最优化!这不是它的目的。

对于紧凑编码,它使用全局变量来加快访问速度,软件工程不提倡,因为会增加耦合度; 它合并模块使代码更加紧凑,软件工程不支持,因为破坏了模块独立性; 它更多的使用 goto 来避免远转移,软件工程中不允许,因为这样会使得程序可读性变差!

( 它连模块都要合并,更不会扯上 类,继承和对象了,代替的只有数据结构,数组 ... 但有的时候, "简单的" 不等于 "不好的"。 )

的确,这样极端的开发方式很少用到,因为太累人! 开发成本极高 (开发人员的工资太高),调试成本和时间很长 ( 要求开发人员极其严谨,考虑问题非常的全面,这就是为何这类程序员更有价值的原因 ) 。

虽然很少用到,你会自己做做紧凑编码的练习吗?

紧凑编码能使代码最优化的道理其实很简单,相信学过汇编的人都知道。 执行跳转是分为 近转移 、远转移 和 call 方式的。这三种跳转方式的效率是不同的。 根据我老掉牙的 486 资料,分别对应上面的, 3个周期, 17个周期 和 35个周期 (最大去到 77 + 4X ,对应的是在不同特权间且有 X 个参数的情况)。 你要知道,模块间调用实际上是 call 方式转移啊, 紧凑编码好在哪里就不言而喻了。

最后指出,紧凑编码只是少部分人的努力方向! ( 此时我脑海中冒出了一句话 " Genius 往往是被世人称为 "傻瓜"的东西,爱恩斯坦就是例子!" 出处已忘记了。)

另一个不得不提的内容是关于软件工程应用的。

在计算机速度以几何级数发展的今天,软件工程的作用越来越重要。

记得曾看到类似的言论 " 印度的软件从整体效果上看是最棒的; 而印度人写的模块内码却是最烂的。"

其实这和印度人的思考方式有关,印度人编软件不会考虑用在最低配置上,他会认为买软件的人会用在最快的机器上。

微软巨人不也写出庞然大物了吗?

也许有人会问,计算机速度发展有慢下来的一天吗? ( 这恐怕不是我能回答的。 )

不管怎样,现时来说软件工程的应用,其地位是举足轻重的。学好用好这个法宝是决定成败的关键。

从另一个角度看,就算自己暂时没法写出更优秀的代码,起码要让自己的程序在整体效果上最好。要学习他人 (印度人) 成功的经验!

( 这就是我转贴 "远去的代码" 想要说明的 )

如果情况有变,记得告知我!

如果你对该 XX "自白" 有什么看法,也请告知我。

我只想做个普通的好程序员。 `海风 2002年10月18日 am 11:39

——————————————————————————

附 自我简介:

特 征:未到而立,刚到米七,语音略带磁性,性格开朗,有点小聪明,准完美主义者 …

最 大 嗜 好 : 玩电子游戏、 编程 和 运动

爱用的编译器: VC + DX_SDK + api ( 戏称VC++ )

目前在听的歌: 那英 - 梦醒了

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有