MFC学习之旅

学习C++也有些时间了,不过自己真正开始喜欢上MFC还是在大四上学期末。

当时上网找了一些书看着,对于MFC的DOC/VIEW的框架还不是很了解。

不过看到<<深入浅出MFC>>(侯捷著)这本书时,心里却是不由的一惊。

这不就是我找了这么久的书么.就是它了。 便把它打印了出来.(花了50多块钱呢,不过上网买的话要60块钱...).寒假里就开始一点点啃起来。这书实在是好,不过要时间去慢慢地理解的内容,各 部分之间的联系的。书里把MFC深藏起来的代码挖得非常深。而且笔墨也不错,全书文采飞扬。时而有点睛之笔,温心鼓励之词,每看到如此之时,会发出会心一 笑。

就这样寒假就一逝而过了。书也被我翻了两遍.。只是对其内容有了大致的了解.真正要学好MFC,是至少要看上三遍 的。决不为过!

网上有人评论说,侯俊杰老师(笔名侯捷)出的那些书,(翻译过也写过),真是为中国的新生代程序员们点起了星星之 火,铺开了一条明亮开阔之大道啊。

      下面几篇 文章 是我最近在网上看来的,加油罗!

      侯捷的个人网站,上面有许多资料下载:http://jjhou.csdn.net/。

      他在网站上的自介:

      先生不知何许人也。闲静少言。不慕荣利。好读书。求甚解。每有会意。击节高歌。欣然忘食。嗜咖啡。妻严不能常得。亲旧知其如此。或备而礼之。或置而招之。 造饮辄尽。期在必快。既快而退。曾不吝去留。善善恶恶。贤贤贱不肖。曲高和寡。直言罪人。晏如也。胸有点墨。心无城府。常着文章自娱。颇示己志。忘怀得 失。以此自终。


////////////////////////////////////////// ////////////////////////////////////////// ////////////////////////////////////////// //////////////////////////////////////////

////////////////////////////////////////// ////////////////////////////////////////// ////////////////////////////////////////// //////////////////////////////////////////


                                                      给编程入门者的建议                             --侯倢
  
勿在浮沙筑高楼:给编程入门者的建议
  
[正文]  
  前几天重读Eric S. Raymond的How to become a hacker,看到他推荐编程入门选用Python,突然觉得很压抑,有了些想法。我建议编程入门的人学C或者Pascal,如果更进一步的话可以用汇编 语言,因为这样能更清楚的了解底层。
  
  下面针对一些支持选用Java, Python, C++(指用了非C特性的C++)等高级的OO语言入门的人可能的原因作些说明。
  
  1. Pascal, C太老了,过时了,平时用得很少,现在流行Java等等。
  
  标准Pascal的确是比较老了,不过有Delphi后继呢,说C老恐怕就是无知了,C现在用得很广泛,似乎sourceforge.net上的项目 还是C的最多。推荐Pascal不是因为Delphi。选择Pascal, C是觉得两个现在很常见,语法很有代表性,简洁明了。
  
  不要动不动觉得什么东西过时了,COBOL还有OO版本面世,还有FORTRAN,LISP,好古老的语言吧,现在还用得很广呢。
  
  2.入门要从OO开始,培养用OO方式思考的习惯。
  
  首先要说明,OO是方法,不是语言,初学者一入门便摆弄Java, Python, Delphi等很容易形成误解,似乎OO=Java, Python, C++...
  
  其次,过程式语言(或者说结构化方法)的精髓不会消亡,OO里面也不可能摆脱掉一条条的语句、函数调用,结构化方法还是需要提倡的。OO方法不是那么 容易学会的(OO语言的语法弄得很熟练不代表你懂OO),而结构化那套方法,自个写个千把行的程序就很能体会了,我是说写个实用点的东西,比如试着自个实 现一些数据结构和算法,写几个小游戏等。写个一千行Hello world等于没写。
  
  我觉得方法是实践中体会出来的,不是看看书就能学会的,你看Design Patterns等把模式背的滚瓜烂熟很可能会陷入过度设计的泥潭,你写了几千行代码,然后再去读一读,改改调试调试,慢慢增加功能,你就会发现自己代码 写的有多么臭了,然后看看书听听别人意见你就知道什么叫Best practice了,最好的经验就是在焦头烂额之际得到的。
  
  过程式语言的代码一般比较简练,我们编程序最终的目的是要解决问题,是要计算,是要获取信息,不要被OO, pattern, EJB, Web Services等迷糊了(我不是反对这些技术).
  
  强烈建议各位多读代码,你去看看莱昂氏的那本UNIX v6源码分析,仔细看,慢慢看,你就能体会到什么叫精致的代码了,然后尝试按照那个风格写代码。
  
  3.过程式语言弄久了,很难转入OO的思维模式
  
  我以前也没有深想过这个理由,不过时间久了,发觉自己不过是把数据和方法集中在一起而已,看着方便,其实有很多不合理的东西,这里头就需要OO的理论 指导了,还是需要时间来体会。我相信有很多用OO语言的人也不过是在框架里头添添代码,调用来调用去而已,把人类当作数据和操作的打包器。
  
  个人觉得只有在用过程式方法做了十来年,编码上十万行后才有思维定势,难以习惯用OO的眼光看待系统,然而这个转变,我仍觉得比改变一个人的恶习容易 许多。OO方法不是学了个Java, Python, C++等就能掌握的,需要实践,需要时间。过程式语言也容易培养一个人严谨的做事态度,比如用Pascal, C等写代码,没有namespace,没有function overload, 没有reference(Pascal有,呵呵,我喜欢),没有template, 没有exception, 你要花很多心思处理一些细节,比如警惕数组索引越界,悬挂指针,野指针等等,请不要觉得麻烦,这个就是计算机啊,底层就是这样的啊。 4.别用C, Pascal了,看我用Java, Python, Delphi, VB, VC等轻轻松松就写了个PP的GUI,NB的分布式应用...
  
  这篇文章是给初学者看的,也可以给一些浮躁的人看看(我也反省,呵呵),初学编程的人精力应该放在数据结构、算法上面,尽量多看一些底层的东西,数字 逻辑,操作系统,编译原理,计算机组成、体系结构,计算机网络等等基础知识。编写GUI拖几个控件有什么好吹的,你懂界面设计的原则么,你知道窗口消息怎 么回事么,你编的界面是把易用放在第一位呢还是把漂亮放在第一位呢,你的GUI程序容易修改吗?比如我一会要加个button,一会去个listbox, 你会不会改的疯掉呢?你是不是在OnClick里头写了大段大段的代码,做类似“从edit1.text中去掉不是数字的字符,搜索xxx再转成16进 制,再复制到edit2.text”的事?
  
  嗯,你socket弄得熟练,recv来,send去,可是如果你不懂tcp/ip协议那就有点可笑了,除了用别人做好的函数库你还能搞出什么新花 样?弄分布式应用的知道“分布式”怎么回事吗,
  
  你是否只是在用API堆砌代码呢?倘若有一天这个函数库没人支持了,你是不是就傻眼了?
  
  比如编游戏,没看过3D图形学便搞DirectX,也是比较可笑的。
  
  我并不是说你编比较高层的东西就必须先得透彻了解底层怎么实现的,我只是建议你好歹把底层的东西混个脸熟,遇到问题时心里有个谱,查查资料,别动不动 扑某个论坛求救。以前在BBS上看到某人的话,说BBS不是学习的地方,是开拓眼界的地方。深以为然。
  
  学习还是找纸版的书老实的看比较好,想想你积攒了多少电子书而又看了多少。
  
  底层不了解,仅多也就飘在别人上头,别人一闪身,你就得摔下来。
  
  初学编程的人一来就IDE, GUI, Network啥的猛搞,能不浮躁么?还是沉下心来研究一下基础知识吧,我以脑袋担保你有生之年会觉得他们有用的(呵呵,你转行我就没辙了),别看着别人 弄JFC, Socket了你还在头大这个quick sort怎么就不对呢就心里惶惶的,你要知道在一批API不被支持后不少人心里空空的没个着落:天啊,我除了那个就啥都不会了,郁闷啊,花了我那么久时间 钻研那套API,呜呜。。。。
  
  5. C好难啊,我入门还是从Java,Python开始吧
  
  首先,是自个要做程序员的吗?是想编程还是想赚钱啊?
  
  其次,我们来比较一下难易:
  
  C: k&r那本书真的不算厚,经典的C的书很少,说C难,大概是传说中C的指针很难吧,C的语法很简明的,就是指针,只要你认真看看书,写 几个程序试一试,那几个指针的用法不难掌握,另外大家千万不要去死钻*++ ++*之类的语法,关于这点在《开发高手》最后一期上裘宗燕老师有一篇精彩的文章。大家记住写代码是要维护的,别耍弄语法技巧给自己或后人制造麻烦,你想 想自己看别人写的天书代码是赞叹还是咒骂?
  
  Java: 书太多了啊,就说Gosling(没拼错吧)那本,相当厚,学Java的人一开始都被classpath和package的问题烦过吧,还有Java的关 键字,语法,Sun鼓捣出来的一堆堆Java技术名词,是不是有点晕了?
  
  C++的确有难度,你可以看看C++语言的设计和演化,就可以知道C++怎么这个德行了,呵呵。有意思的是Java现在加入模版,而且因为伪模版的实 现被人诟病,还有那个EJB的转变,有意思,大家可以思考一下“复杂”、“实用”这些词。
  
  Python的确比较清爽,不过深入一点后其内部对象模型也不简单,想想操作一个列表有多少方法,各种功能强大的操作符,而且现在的OO语言逼着你 OO, 结果往往是语法OO而已,没多大新意,我还是欣赏Perl, C++这类语言,你想怎么就怎么,重要的是要用合适方法,趁手工具,最少的时间做有价值的东西,把你钻研语言的语法的时间拿来锻炼一下身体,泡杯茶看看小 说我觉得更好一些。
  
  语言只是表达思想的工具,不要只局限于一种语言,不要狂热于某一门语言。
  
  学编程时选书最好先看一看书中的代码,是取自实际应用中的吗?写的漂亮吗?(指代码自身的精致,以及排版是否工整)代码中有语法错误吗?(鄙视某些没 编译试试就把代码copy到书里的作者)
  
  有本Essential C#,取的是.Net类库的代码,很棒,讲delegate(希望没拼错,好久没弄这个了)时举的例子很清楚地让人看到这个东西该怎么用。
  
  另外推荐Learning Perl,我个人觉得是我看过的最好的关于编程的书,该讲么,不该讲什么,按什么顺序讲,很好,也许是Perl的精神的感染吧,当初看这本书很有震惊的感 觉,原来程序设计语言还可以这么使!爽!
  
  断断续续写了这么长,xxx的xx布,又x又长,呵呵,希望大家踏实一些,不要浮躁。
  

多媒体和网络时代中,C++,Delphi,Java,还是C#?

在应用领 域,C/C++不算高级语言,对硬件和系统程序员才算。虽然C++首脑任务坚称C++的地位不会有太大变化,但.NET和 Java的对抗很可能最终将其踢出主赛局。

在多媒体、游戏等领域,据gamedev.net的资料,此领域以C++为主流。 PS2,XBox等纯游戏机上只有C/C++可用,几乎所有的大游戏公司用C++,但近两年有一些采用其他语言的尝试。总的来说,大部分是C++,有一些 是用的Delphi,一小部分是VB,很少的 Java。从很久之前起,个人和小团体开发用VB的就较多,基本上都是不喜欢C/C++的人,现在因为考虑移植能力而转向Delphi和Java,当然也 有转用C++的。最近由于新技术出现较多,基于C++的支持库变得更为复杂,于是出现很多对于Java替代C++的可行性的讨论,有比较可靠的说法是在较 好的优化下配合最新的JIT,可以达到同等C++程序速度的1/4,图形密集程序在使用OpenGL生接口时与同等C++程序速度差不多,但Java3D 接口很慢。现在有微软在力推.NET平台,C++在此没有什么优势,可能对今后的局势有较大的影响。

Pascal前途难料,苹果出了基 于FreeBSD核心的MacOS X,这回是彻底的C/C++系统了,CodeWarrior放弃了Pascal编译器的开发,主推C++、Objective-C、Java,只剩下 Pascal社区和民间的编译器在撑腰呐喊。Borland的OP倒是火得很,可惜Pascal没有严格标准,没有其他编译器能很好的兼容Borland 的OP。

网络,当前商家的淘金之地,继浏览器之争之后,微软又被Sun的Java抢了先,不得不和与他一样的behemoth抢夺地 盘。 C++默默地筑造着网络的基础。

C++:在传统领域,如算法研究、数据计算、各种底层系统,几乎就是C/C++ 的天下,尤其在Unix类机器上。由于编程资源非常集中,以致很难不选择C++。C++有统一的标准,各种硬件平台都有它的编译器。有几年历史的大公司的 软件也大多是基于C++的,大量的编程库资源也是基于C/C++的。理论上,C++能做任何事情。C++有强大的类型定义能力,如无所不包的对象模型、算 符重载、模版、宏,可以对自己做扩充和定义;另一方面,也导致C++异常复杂、难维护,且编译速度很慢。因此也有很多人把C++当成更好的C用,不用 C++中的复杂功能,这在游戏编程中很常见,因为他们更愿意把大部分精力放在实现感兴趣的功能而不是代码上。而兴趣在程式上的人则偏爱竭尽语言的能力,写 出各种高明的代码,很可能是非常难懂的代码,但非常高效好用,例如C++标准模版库。在新兴领域,C++的处境就比较艰难,没有统一的高层工具库,而且工 作量很大,而且是不必要又不得不的大。而且C++背后的权威人物Bjarne Stroustrup(就是在C++中加入dynamic_case“这种丑陋语法”的人,用他自己的话说:P)拒绝改进C++ 语言,只推动改进C++库。所以C++的地位基本稳定的固定,既不会消亡,也不会扩大。其他评价:黑客级人物必用,不适合入门教学用途。

Delphi: 确切的说是Object Pascal。简单直观而又强大是最直接的理由。不需要去花多少心思考虑语言实现,想什么写什么,而又不失C++的高效,甚至某些部分执行速度快过 C++,如部分字符串操作和文件读写缓冲等,编译速度狂快(由语言特性决定)。包含大量好的新语言特性,拥有既简洁又强大的运行库和对象库,直接集成 COM、Corba、网络组件、数据库,支持Windows、Linux,并即将支持.NET平台。在Delphi社区,对Delphi的支持是近乎狂热 的,成员们拿出自己最得意的源代码来共享,如果你是新手,又想快速成为高手,Delphi是最佳选择。但你来自C++背景,你会对begin..end、 不能随处声明变量、没有++运算符等感到反感;如果你喜欢复杂的代码且很熟悉STL并大量使用,你会因Delphi没有模版而失望。Delphi提供了大 部分的系统API接口,但也有很多欠缺,Delphi社区提供了大量的API接口或封装,如DirectX(Delphi不需要导入库和静态库,百兆的 C/C++SDK的Delphi版只有几兆:P)、OpenGL1.2的接口和封装,但一般会有几种不同的版本,质量好坏不一,当然也未必比 Borland提供的差,事实上Borland也用社区提供的源代码。只有Borland一家做OP的编译器,没有业内标准,没有其他选择,虽有可部分兼 容OP的FreePascal,可没有了Delphi的库的编译器的吸引力就少了大半。由于Delphi刚兴起没几年,使用它的公司还不多,组织倒有不 少。如果你将找工作,一定弄清你要工作的领域是否多用Delphi,如数据库领域就是。其他评价:节省你一大笔时间,可以给你充分的机会改进你的程序或出 去玩;)。

Java:由C++简化而来。Sun对Java语言的设计上的确有很大创新,当年博得一致的喝采。语言并不必须复杂才能强大, 就像在微软还是英雄的年代Bill Gates说他能用Basic做到C能做到的任何事情。Java也正是如此。由虚拟机执行Java程序,不依赖于平台,这是给程序员的一大福音。尤其对于 互联网,Java是具有天生的资质。但由于Sun的一些失误,也使Java有了些不好的名声和导致Java没有达到预期的前景。一是Sun的虚拟机速度太 慢且不好的垃圾收集算法导致宝贵的内存资源极度浪费,除非空闲物理内存大于程序所需全部内存,否则系统就会严重受垃圾收集的影响,这个弊病遭到强烈的抨 击。现在的虚拟机技术要比以前强了不少,我个人觉得其他厂商提供的Java虚拟机都比Sun的好。二是糟糕的类库。Sun对PC的了解远不如对他们的高端 服务器和工作站,设计的类库也是浓烈的Sun的味道,而且各部分风格不一,似乎是很多缺少交流的人写出的。熟悉PC编程的人会觉得极为罗索冗长且怪异低 效,以致出现很多其他替代类库(微软就做了两套)。这个问题到1.2版出台时才有些改善。三是Sun拒将Java交给标准局,做虚拟机需Sun授权。因 此,Java现在集中在电子商务领域,由于其跨平台能力,其地位基本上是不可替代的。其他评价:网络应用必学。

C#:新品种的C++,被 称作C++--。可以说迎合了大部分C++程序员的愿望,即保持C++的强大又做了适度的简化,同时加入了时髦的语言特性,基于.NET平台,简单的说, 太棒了。但是等等,C#并不完美,如果你是C++程序员,你未必完全喜欢它。而且由于C#是新东西,还没有多少资源可用。总之,这里还是未开垦的土地,虽 然很有吸引力,但你必须对是否踏进这片土地非常谨慎。如果你是决心跟着微软走的,而且已有编程经验,那么可以放心地拿起C#。其他评价:将来很可能是 Java的劲敌,微软的主要开发工具。

******************************************** *******************************************************************


******************************************** *******************************************************************
C++的沉迷与爱恋


作者:侯捷

1998.09.28 发表

每年的 09/28 於我都是一个特殊的日子 -- 不只是因为教师节。今年很特殊地没有普天同庆,那麽我就写篇文章自己庆祝一下好了。

我於今年 七月发表了一本着作 <多型与虚拟> 和一本译作 <深度探索 C++ 物件模型> ,获得很大的回响。这些作品都不是针对 C++ 的完全初学者所写,但从初阶到高阶为数众多的 C++ guy,热情地表达了他们对这些主题的喜悦。

在许多来信中,我看到一些有 趣的现象,也感受到一些值得整理下来的想法。所以,根据我个人的学习过往、我的教学经验、以及周遭朋友的心得交流,写下这篇文章,或可为後学者戒。

●< 多型与虚拟> 序言节录

首先让我节录 <多型与虚拟> 一书序言:

<多型与虚拟> 序 节录(侯俊杰/松岗/1998/07)

一般而言,C++ 是一个难学易用的语言。

C++ 的难学,初始在於其重重的布幕,布幕之中编译器对我们的程式码做了太多的手脚,使我们惯於循序思考的工程脑袋一无所措。及长,又面临新的思维模式,使我们 必须扭转惯常的思考习惯。

C++ 的易用则在於其巨大的弹性,能够以多型(polymorphism)、虚拟(virtual)、模板(template)、泛型 (generalization)等种种型式,让既有的码去处理未知的、未来的资料型态。

当然,易用必须先能用。用不好或不能用的话, 「写 C++ 程式」最後就成了只是「使用 C++ 编译器」,这是大家常拿来彼此调侃的笑话。

在「难学」的背景下,「易用」是使我们依 然前仆後继的动力。愈来愈多的大学资讯科系把 C++ 开在大一课程,这虽然说明 C++ 是多麽地重要,可也苦了资讯新兵们。

其实「难 学」的最大症结在於,很难得有一本书,能够一针见血地指出多型与虚拟的重要性;在我们粗具语法基础之後,直接把我们导引到最核心最重要的思想,并且在建立 这个思想的过程中,提供足够的必要基础。


●困难度之一

「C++ 是个难学易用的语言」,这句话相信很多人心有戚戚。C++ 的学习难度,一在於语言本身太多的「幕」,一在於 "paradigm shift" (思考模式的移转)。

传统循序语言如 C, Pascal, Basic, Fortran...,除了模样看起来稍有不同,基本上都是函式 call 来 call 去,大同小异,很容易掌握。你想做的动作,在 code 中都看得一清二楚。你所看不到的,荦荦大者也不过就是编译器为你的函式加上用以处理堆叠的一小段码(prologue 和 epilogue),这一小段码基本上做的是 housekeeping 工作,你没看到也没有关系(更好),并不影响你对程式逻辑的思考。

C++ 不一样,C++ 有太多和程式逻辑息息相关的动作是编译器为我们加上去的。换句话说 C++ 编译器为我们「加码」。如果不识清这一节,学习C++ 有如雾里看花,雾非雾,花非花。

编译器为我们的 C++ 程式加了什麽码呢?很多!物件诞生时 ctor 会被唤起,物件死亡时 dtor 会被唤起,这都是加码的结果。ctor 中设定vtpr 和 vtbl,这也是加码的结果。new 单一物件时会产生 memory block cookie,new 物件阵列时会产生一个内部结构记录着 object size 和 class ctor...,这也都是布幕後的工作。可以说,程式码中看不到而却必须完成的所有与程式逻辑有关的动作,统统都是 C++ 编译器加码後的结果。

当 「继承」发生,整个情况变得稍微复杂起来。「多重继承」又更复杂一些,「虚拟继承」再更复杂一些。

这些布幕後的主题,统可归类为所谓的 C++ object model(物件模型)。如果不知道这些底层机制,你就只能够把 "make destructors virtual in base classes"(, item14)或 "never treat arrays polymorphically" (, item 3)这类规则硬背下来,却不明白它的道理。
用 一样东西,却不明白它的道理,林语堂如是说:『不高明』。只知道 how,不知道 why,侯捷如是说:『不高明』。

●困难度之二

C++ 的第二个学习难度在於 "paradigm shift"(思考模式的移转)。别说自己设计 classes 了,光使用别人的 classes,就都是一种思考模式和行为模式的移转。MFC(或 OWL 或 VCL)programmer 必然甚能够领略并体会我的意思。

使 用所谓的 application framework(一种大型的、凝聚性强的、有着物件导向公共基础建设的 class library),你的码和 framework 之间究竟是怎样的关系呢?framework 提供的一大堆可改写的虚拟函式的意义与价值究竟在哪里呢?为什麽 framework 所设计的种种美好性质以及各式各样的演算法竟然可以施行於我们自己设计的 class types 身上呢?framework 被设计时,并不知道我们的存在呀!

这正是物件导向中的多型(polymorphism)的威力。

稍早所说的 C++ 物件模型,偏属程式设计的低层面;这里所说的思考模式移转,则是程式设计的高层面。能够把新思维模式的威力发挥得最淋漓尽致的,当推物件导向的 polymorphism(多型)和 generalization(泛型)。如果你没有使用这两项特性,等於入 C++ 宝山而空手返。

● 反覆 炼,循环震荡

想像 C++ 是一把用来解决程式问题的刀,要它坚轫,要它锋利,就必须经过多次的回火,在高热和骤冷之间 炼。

初 学 C++ 语法(syntax)之後,你应该尽快尝试体验 polymorphism (大致而言也就是虚拟函式的运用)。等到对 OOP 的精神有了大局掌控的能力,但对 C++ 的许多小细节不甚清楚,就是回到C++ 物件模型 炼的时机。

成长,是在高阶 (polymorphism)和低阶(object model)之间反覆震荡,才能够震荡到更高的位阶,而不是平平庸庸於中阶(C++ syntax)的一滩死水。

●不要沉沦於 C++ syntax

100 个人跟我说他懂 C++/OOP,只有 10% 不到可以让我认为他没有胡吹大气。太多的人,上嘛上不到 polymorphism,下嘛又下不到object model。就这样不上不下地卡在 C++ 语法层面。大一学了C++,到大四快毕业了,连 virtual functions 是怎麽回事都期期艾艾支支吾吾说不出个道理。

有 时候我觉得,太苛责同学也於心不忍,因为同学们事实上处於一种无知的状态,既不知道 C++/OOP 该怎麽学,也不知道哪些书可以教他们那麽学。所以,苛责同学,不如责怪老师。

众所周知,大学教授泰半是动口不动手,普遍的心态是「论文第 一,升等为要;程式语言?哎,末流!」。「末流」课程通常由教授们轮流教,谁倒楣谁来教;於是就常常有「下学期要教 C++ 语言了,这学期寒(暑)假赶快去要本书来恶补」的情况发生。偏偏程式语言这东西,只动口不管用,一定要动手,而且要常动手。老师自己没有摸到 C++/OOP 的精神,学生又能学到什麽?

有些学校资讯系并不教特定的程式语言,老师们的态度是「语言是一种自己学就好了的东西嘛,拿 到大学殿堂来,哎,不入流」!於是应该好好为学生打下实际基础的课程,却天马行空地腾云驾雾起来,大谈抽象意念。饱读经书的老师们可能忽略了,一个完全没 有技术基础的学子,要的不是形而上的道,而是形而下的器。

我们是先能够欣赏具象画,还是先能够欣赏抽象画?我们不都是先对毕卡索的画大骂 「这是什麽东西」,直到自己的艺术涵养够丰富了、人生阅练更饱满了、能够举一隅以三隅反了、能够接触类旁通左右逢源了,才转而能够欣赏甚至进入毕卡索的抽 象意境吗?

老师们各有专长,要老师们来教非彼专长的大班课、基础课,我又觉得似乎也太为难老师了。那麽,苛责老师,不如责怪学校当局。如 果学校当局能够聘请经验老道又有教学热诚的工程师来教这类实务学科,不是三方皆大欢喜吗?不要说什麽制度僵化啦,难以突破啦,大学是高度自治区,礼聘几位 兼任老师,不全都是系上的权责范围内吗?

当学子们在课程上学不到他要的东西,就只好闭门自修。但是,循序性(sequential)语言 尚有自修学会的可能,物件导向语言嘛,以大学生的程度来讲,我认为自修实在困难,只会修出个四不像、半瓶水。

管不到学校!管不到教授!自 求多福的情况下,希望看到这篇文章的你,知道 C++/OOP 该怎麽学。

●不要沉迷於 C++ semantics 和 C++ object model

对於底层知识有浓厚兴趣的朋友,下探到 object model 领域,一定会非常开心地在 object size、object layout、vptr/vtbl、以及许多布幕後的技术之间玩将起来。了解这些东西,当然是好的,但是由於一探究竟得其奥秘的快感与成就感,使得一些朋 友们在这个层面里「玩」起来了,小地方玩得很精,玩得不亦乐乎,玩得忽略了 C++/OOP 的最终目标。

最终目标是 polymorphism!

我要说,在 C++ syntax 以及相对低阶的 C++ semantics 里,不要玩得太过火。过犹不及,会伤身的。C++ 经典名书内附的一些习题,在我看来颇有点玩得过火的味道。至於什麽百题精选、题库大成,除了修练基本功之外,都满无趣的东西。

Programming 应该是一种天马行空的想像力与创意的组合;如果你能够自己想题目,譬如说实作一个天体运行的 class 体系、或是实作一个生物分类(界门纲目科属种)体系,不是很有趣吗?准备资料的过程中,查查百科全书,你也因此查到了太阳系九大行星的几何资料,哈雷慧星 的轨道周期,或是黑面琵鹭的「界门纲目科属种」英文名称,这难道不比钻研於 ++++i 或 ----i 或 *&*&p 之类的头脑体操题目有趣吗?(看过不少这类好笑题目,没一个记下
******************************************** *******************************************************************

******************************************** *******************************************************************
对于初步编程者的一点儿建议
转贴自 候杰网站
            选义按部 考辞就班
人的理解力可以无 穷,但人的记忆力有限。

当本身实力发展到某个层次,
实力不是靠「警敏强记」来判别或完成,
而是要知道哪里可以找出正确而 适用的资料。


●理解无穷,记忆有限

一位老读者写 mail 给我,信上说:『我发现一件事,自从在台大资讯周遇到您,直到 1997 Run!PC 5月号,您一直在安抚新鲜人。在发现自我方向之前,那些人(包括我)都曾相当迷惘。您的文字和温和的态度让这些人可以安心前进。感谢您!!』

写 作六年,最初接触的年轻读者,有一些已经从高中进入了大学,甚至研究所。原本我的写作层面从未考虑学生,我是为工程人员写的。却没有想到慢慢地在学子之间 有了一些影响。有一次元智开学,一位研究生来找我,告诉我因为我的鼓励,他发奋考上了研究所,并拿出当年我写给他的信。前述那位老读者也是,一年半载未联 络,他已经从大同工学院考上清大资讯所。

看到这些朋友的精进,我真是高兴莫名。我自己当然也要更精进,不然拿什麽以对读者?现在学生们, 厉害的,真的很厉害。这学期 Windows 作业系统课程,我给的期末作业是让同学们分组将 Matt Pietrek 的「Windows 95 系统程式设计大奥秘」各章程式仔细 trace,向大家做报告。有一组同学的表现就令我刮目相看,不仅自行研究书上未提到的 Callgate 技术和 Universal Thunk 技术,还找出原作者未交待清楚的一些细节。

人的理解力可以无穷,但人的记忆力有限。当本身实力发展到某 个层次,实力不是靠「警敏强记」来判别或完成,而是要知道哪里可以找出正确而适用的资料。我对那一组同学最感兴趣的就是,他们叁考了哪些书籍、哪些资料、 以及他们是在什麽时候开始接触那些相关资讯的。

我还在业界任职的时候,就已经观察到,比较有发展潜力的同事,都很会整理资料。资料的整理 方法言人人殊,但都有条不紊。要整理资料,先要有资料,所以这些同事也都是收集资料的高手,不论书籍、杂志、期刊、报纸、光碟、磁片、规格书,不论纸面的 或电子的,收罗万象,检索迅速。要达到这种境界,你要有方法,有毅力。或许还要一点点财力。不过,除了书籍比较贵之外,其他资料都还算便宜,甚至从 Internet 上免费可得。



●为汝安心

能够在资讯世界里悠然自得,真令人羡慕(虽然那些人,包括 我,其实也都是鸭子划水,水底下忙碌得很)。悠然自得的境界需要按部就班地训练才能到达。好多读者写给我的信中,问到 C 语言的学习方式、Assembly 语言的学习方式、MFC 的学习方式、Windows programming 的学习方式。一一回答而未能给大局观,犹如管中窥豹,未能得其全貌。我决定以一次较大的篇幅,为汝安心。我决定从一个语言初学者的立场出 发,Windows programming 则是我设定的终极目标。我走的路线是 C/C++ 路线。这样的假设有几个考量因素:

1. Windows 是当今 PC 上最普及的作业系统,也是你就业时最可能面临的平台。
2. C/C++ 是计算机科学的主流语言,学术界与工业界通用。
3. 我的专长是这些,所以我能说的也只是这些。

我将在每一个阶段提出我的看法, 并举出一些好书给你叁考。我举出的书绝大部份是原文书,这并不代表国内没有相关好书(但它的反面也不一定就成立),而是因为我自己接触了许多原文书,资讯 也多由彼而来。这些原文书大多有中译本,好坏就请自行评断了。

以下出现的出版社简名,其全名是:

A.W.:Addison Wesley
M.P.:Microsoft Press
IDG :IDG Books
M&T :M&T Books
R&D :R&D Publications



●先器後道:从 C/C++ 语言出发

程 式语言没有练好,什麽都是空谈。现在的 C/C++ 编译器忒也庞然大物一个,初学者如果未经指点,常会以为买了一套 C++Builder 或 Visual C++ 或 Symantec C++ 或 Optima++...,就是要直接开始在整合环境底下写 Windows 程式。我当然不认为是他们野心过大,妄想一步登天;他们是因为不知道有简化的环境和简化的 Windows 程式。

在这个阶段,语言的练 习应该独立於任何作业系统之外。也就是,你学习的应该是 ANSI(美国国家标准)C/C++,你写的程式拿到任何作业平台上应该皆能原始码相容。我建议,在 Win32 环境下,你要以 command line 方式编译联结程式,并使用 console mode。

所谓 command line 方式,就是在 Windows 环境下开一个 DOS 视窗,将工具环境以 PATH 和其他环境变数(如 LIB 和 INCLUDE) 设定好,然後在 DOS 提示号下直接编译联结你的程式;完全不使用开发工具提供的整合环境。以 Visual C++ 为例,假设你把它安装在 E:MSDEV,於是你可以设计一个批次档(.bat)如下:

@echo off
set TOOLROOTDIR=E:MSDEV
rem
set PATH=E:MSDEVBIN;D:WIN95;D:WIN95COMMAND
set INCLUDE=E:MSDEVINCLUDE;E:MSDEVMFCINCLUDE
set LIB=E:MSDEVLIB;E:MSDEVMFCLIB
set INIT=E:MSDEV

每当想要使用 command line 编译联结程式,就先在 DOS 视窗中执行上述批次档,将工具环境设定好。

然後,你可以开始练习写程式。使用任何文字编辑器输 入你的原始码,存档,然後在 DOS 视窗中编译联结。以 Visual C++ 为例,你可以这麽做:

cl test.c



cl test.cpp

CL.EXE 是 Visual C++ 的编译器名称。它会在编译完成後自动呼叫联结器 LINK.EXE,将你的程式所需要的函式库(C runtime library)自动联结进来。

你所写的这些 C/C++ 程式,虽然是 ANSI 标准,但因为是在 Windows 环境下以 Windows 开发工具建造而成,所以它们的执行档是属於 PE 档案格式,也就是 Win32 可执行档格式,只不过它们没有用到任何 GUI(图形使用者介面)而已。这种 Win32 程式又称为 Win32 console 程式,也是一般所谓的 DOS-like 程式。

常 常接到读者的 mail,希望我推荐 C/C++ 方面的好书。由於 C/C++ 的学习对我已经是遥远的回忆,当初自学以及朋友间互相讨论的成份比较多,阅读的经验比较少,而晚近的许多相关书籍我又没有完整看完过,所以没有办法给你推 荐名单。有一些经典名着,出自大师之手,例如 K&R 的 "The C Programming Language"(有译本),Bjarne Stroustrup 的 "The C++ Programming Language"(A.W.,有译本),对初学者不见得是最佳选择。初学者需要详尽、亲切、范例多的导入书,大师的书却往往学术味重,言简意赅。当然, 等你到达一定程度,还是应该把大师的书看一看。言简意赅之中,可能有许多微言大义。



●可直接学习 C++ 吗?

回 答这个问题前,需要先做点厘清。C++ 其实是 C 语言的超集(super set),所有 C 语言的关键字、指令、修饰词、特性、标准的 runtime 函式库,都应该相容到 C++ 之中。所以,基本上没有所谓「避开 C 语言,直接学习 C++」的可能。你看,很多时候 C/C++ 是写在一起的,形影不离。
倒是,你可以不学 C++,纯以 C 闯天下。在 Windows 程式设计领域中就是以所谓的 SDK 来撰写程式。也就是以纯粹的 raw Windows API 来写程式。不过,物件导向的观念与技术,历经数十年的验证,已经证明其价值,并且已被大家接受,蔚为主流,你若放弃 C++,会折损自己不少实力与工作机会。

To be or not to be,that is the question!(语出 莎士比亚/哈姆雷特)呵呵,To C or not to C,that is the question too!



●OOA/OOD

C/C++ 语言的基础功夫完成之後,你面临第一个分岔点。是要继续在物件导向(OO)领域中精进,进入物件导向分析(OOA)和物件导向设计(OOD)领域?还是要 开始选择一个特定的作业平台,学习其上的程式技术?这两者不是平行线,它们最终是要相互为用的。对 OOA/OOD 有愈多的了解,使用起 Windows 开发工具中的C++ 类别库(MFC 或 OWL 或 Open Class 或 VCL)自然愈能胸有成竹,而不是随波摆荡。但是,当然,你也可以先进入 Windows 程式设计领域,慢慢再回头接触 OOA/OOD。

我 与同夥的几位老朋友曾经十分瞧不起 OOA/OOD,每次去听些课程,回来就彼此嘲讽:又浪费了一整天。一个原因是:台上的老师自己连 OOP(Programming)都不够实力,谈什麽 OOA/OOD?没有据以实现观念的载具,一切将只是魏晋玄谈。另一个原因是:台下的我们自己的 OO 基础也不够好,对於听来的观念,无法产生有效的具体意识。

我们瞧不起 OOA/OOD,是因为我们自己粗鄙,是因为我们自己的程度不到。如果自己程式写多了,也用心揣摩过 classes 该怎麽设计怎麽分类,自己有过一些想法,再来看 OOA/OOD 的书,收获就会大得多。

OOA/OOD 的流派不少,Booch 是相当有名的一个流派,他着有 "OO Analysis and Design with Application"(无译本),相当出名。



●SDK Programming

如果你不喜欢一下子进入太多的理论世界,你希望早点写出漂漂亮亮的 Windows 程式,激励自己一下,那麽在学会 C 语言之後,可以选择 SDK programming 做为下一步。

SDK 是个通称,任何环境都可以提供自己的 Software Development Kit(SDK)供程式员在其环境上开发应用程式。然而因为 Windows SDK 太有名了,一直被延用其名,竟成了一个专用术语。"SDK programming" 其实就是以未加包装的 Windows API 撰写 Windows 程式的意思。如果你在这个层面上写程式,可以在任何一套 Windows 开发工具中畅行。

这个领域我推 荐两本好书:

1. Charles Petzold/M.P.:"Programming Windows 95"(有译本)
2. Jeffrey Richter & Jonathan Locke/M&T:"Windows 95 : A Developer's Guide"(有译本)。

前者几乎是这个领域的圣经,有非常广泛的取材和很棒的内容。後者的技术层次定位更高, 特别选择了 hooking、subclas
******************************************** *******************************************************************

******************************************** *******************************************************************
我写给侯捷老师的信及老师的回信
收到並很開心地看完了。
我的書對你帶來幫助,我很高興。
 
用《STL源碼剖析》來複習 Data Structure,並不搞笑
這本書可以讓讀者看到各種 Data Structure 的實作,以及最優秀的源碼(GNU)
 
加油。祝學習順利、愉快。
 
-- jjhou
 
----- Original Message -----
From: XXX
To: jjhou@jjhou.com
Sent: Saturday, December 25, 2004 6:48 AM
Subject: 师者,传道授业解惑也!
  
  
姓名:XXX
性别:男
职业:学生
在读学校:中国矿业大学(徐州)
专业:计算机科学与技术(computer science  and technology)
年龄:22
省份:江苏徐州
建议:侯老师,为什么没有《多型与虚拟》的简体版呢?
 
一些不得不说的话:
尊敬的侯老师:
    近好!
    读老师的书多日,看老师的网站也很久了,到目前为止,我觉得老师您教给我最多的是信心和学习的方法。
    我是一个资质很平庸的人,虽然从小学到高中,我一直是班上最优秀的同学之一,但我只是比别人学习认真一点而已。“优秀是一种习惯”,但升入大学后,我把这 个习惯弄丢了!
    我花在电脑游戏(PC Game)上的时间太多了,尤其是网络游戏(Internet Games),我挂了(也就是当了)好几门课,可能都拿不到学位证了。我现在大四了,好几个同学已经签约找到了工作,可我看着我的可怜的成绩,实在是没有 信心。
     郁闷中,我又看老师您的网站上的文章,里面许多的话于我心有戚戚焉。老师的经历也让我有了信心和勇气,坚定了我的一些信念还有世界观。所以我非常感谢老师 把自己的一些感想与读者分享,我觉得老师就是我以后做人做事的楷模!含蓄,幽默,睿智,立场坚定,众多的美德!(这些都是我有感而发,发自心底的!)
    想当初,我接触电脑游戏,也是为了了解其原理,梦想有一天自己实做一个,但把太多的时间花在了体验上面了。唉!首先是我自身的原因,自控能力差能怪谁呢? (升入大学前学习认真是因为没有什么吸引我注意力的东西(我是农村长大的孩子)并且有清晰的目标;但升入大学后,周围有了太多的诱惑,尤其是网吧,那些电 脑游戏实在太吸引我了)其次,没有一个好好指引我的人也是原因之一,班主任老师也曾找我谈过话,但却没有给我一个导引;我看不到未来,没有清楚的目标,更 缺乏实现的步骤。
    我曾多次尝试与电脑游戏断绝关系,可每次都以失败告终,这让我很是痛苦。之后我痛定思痛,想“为什么我不能把自己的兴趣与研究方向结合起来呢?”于是我寻 求一些指导,大二的时候,我发电子邮件给金山公司(您去讲过课的),一位大哥叫赵青的(看名字我还以为是女的,后来我在网上查到他是《剑侠情缘2》的项目 总监,不做完项目不剪头,呵呵)很详细的给我回了信,告诉我要学好Data Structure等课程,并给我推荐了几本书和几个游戏制作方面的网站,可这几本书都是基本的编程书籍,跟游戏没有直接的联系,那个时候的我实在看不下 去,推荐的网站也是英文的,看起来实在费劲。
    直到有一天,我在书店里看到了一本如何用Visual C++制作游戏的书(《Visual C++ 游戏设计》,是讲游戏程式的),这本书让我真正的知道了一个游戏是怎样实际运作的,看书的过程中遇到了一些困难,主要是因为C++,Visual C++只学了一点皮毛,OO思想只知道几个概念性的东西,Windows programming 简直一窍不通。
    于是我买了Petzold的《programming windows》, 看了前面的一部分后,我觉得我头上的雾水少了许多,像是HRESULT等windows 里面定义的 data type还有winmain(),winproc()等函数有了初步的了解;
    《Visual C++ 游戏设计〉这本书里很大一部分都是介绍DirectX的东西,我很详细的看了这部分,并自己打印了《Advanced 3D Programming with DirectX 9.0》,看了其中的一部分(英文的,看起来很吃力,很多术语要一一与中文的建立起映射),可我还是觉得糊里糊涂的。我认为原因如下:
(1)对于图形学的一些基本的东西不清楚,头脑里没概念,没有感性认识,这一部分我决定通过学习3D Max ,来了解一些基本概念,从感性上理解material,texture,light,camera等
(2)再就是 DirectX是基于COM的,我现在刚刚对C++的多态(polymorphism)等advanced topics of c++有了初步的认识(感谢张耀仁教授的《C++程序设计与应用》),c++ object model 只是略窥门径,component object model 的了解仅限于老师您网站上的介绍。我这样的知识基础,来看directX,不糊涂才怪呢?老师您说是吧?所以我决定先好好的学习一下c++,把多态和 C++ object model 搞清楚,然后研究COM,这条路怎么走?看老师的《多型与虚拟》(好像没有简体版啊),《深度探索C++对象模型》,然后看《com本质论》(可惜这本书 没有老师翻译的简体版,只有潘老师的)。
 
    我现在正在看老师翻译的《C++标准程序库》,因为我在读OGRE(open graphics rendering engine,一个开源的图形渲染引擎)源码的时候,看到了很多STL代码,所以我想通过这本书来学习STL;另一个原因是我想读老师的著作《STL源码 剖析》,为什么想看这本源码剖析?原因有二:
(1)我 data structure的课程当了,我要通过container,iterator等的内部结构实现来学习并复习data structure的内容。有点搞笑是吧?可我是认真的。
(2)通过看老师剖析STL,学会剖析framework 的方法(看过老师的一篇《上穷碧落下黄泉--源码追踪经验谈》产生的想法);MFC也是framework,为什么我不选择它,看老师的《深入浅出 MFC》,是因为我认为MFC在游戏制作中用处不大(除了游戏的地图编辑器等),而STL是肯定要用到的。学会剖析方法的目的是剖析OGRE的源码,对 game engine的设计有一个比较清楚地认识,进而实现一个小型的game engine,就像是老师实现MFCLite
    唉!慢慢长路,但我目标明确,步骤清晰,在加上有侯捷老师您的指导,我信心十足!
    这是我写过的最长的Email!不知道侯老师有没有时间看完,呵呵!
最后祝老师的全家人身体健康,合家欢乐!老师每天笑口大开!哈哈哈!
*************************************** *************************************** **********************************
  
*************************************** *************************************** **********************************
关于侯捷的一个观点的一点个人意见
上个月的时候,花了六十大元买了这 本在网上很有名气的名著——《深入浅出MFC》,刚买回来就好象是得到了珍宝一样的高兴,当天就翻了一百来页,啊,看起真是爽啊,爽,一些我以前没有得到 解答的疑惑顿时都得到了准确的回答。觉得这完全是一本答疑的书。

接着我就接着向下看,唉,惨不忍睹,痛苦,面对接下来的整整半个月的时 间,留给我的只是翻书声,我一页一页地往下翻,不是因为我都看懂了,而是因为我都看不懂,然后我又一页一页地往前翻,是因为这本书的前后关联太大了,前面 没有懂后面就根本是在看天书,现在回想起那一段时光,每天都是二三点钟,在寝室里面一个人坐在那里看书,脑袋里面都是麻的,唉,痛苦。

不 过,终于在经过一个半月的时间看完了这本名家名作,这本书不仅深入细致,而且文笔也不错,如果决定在MFC方面有所精进的话,这是一本必备的书,而且绝对 值得深入地去研究,但是,我同时也明白了一点。(看下面吧)

当时,之所以选择这本书作为我对MFC的入门之书,完全是因为看了侯捷的一篇 散文,上面介绍了MFC学习的一些教材的先后顺序,原文是这样的:

………………………………………………………………………………………………………

至 於 MFC,我推荐四本书:

 

1. 侯俊杰/松岗:"深入浅出 MFC"(第2版)

2. David Kruglinski/M.P:"Inside Visual C++ 4th edition"(前一版有译本,新版未知)

3. Jeff Prosise/M.P.:"Programming Windows 95 with MFC"(有译本)

4. George Shepherd & Scot Wingo/A.W.:"MFC Internals"(无译本)

 

第 一本书用来建立对 MFC 架构的通盘了解,涵盖上述我提到的所有重要主题。内容虽然很深,但因为循序渐进,示意图也多,并不难看。第二本书提供许多范例,并以 Visual C++ 工具大量辅助 MFC 程式设计。第三本书也提供许多范例,MFC 架构方面的解释比第二本多,但比第一本书少得多。它完全不使用 Visual C++ 工具。第四本以挖掘 MFC 原始码的方式来介绍 MFC 架构,层面比第一本深且广,但比较难看。

哈,就是这样,我选择了这 本书,因为我相信侯捷,因为它是大师,但是,原来大师也会骗人啊!(起码对我来说,是如此)
******************************************** *******************************************************************

******************************************** *******************************************************************
优秀it书籍100本
1.vc++技术内幕第四版 (潘爱民)
ftp://210.32.157.56/课 件/c++primer/vc++技术内幕IV(潘爱民).rar
2.C++经典对话系列
中 文:http://www.jka77.com/book/cvst_cn.chm
3.MFC Windows 程序设计(第二版)
英文 版:http://www.jka77.com/book/progmfc2.chm
中文版:暂无,制作中...
4.Effective C++中文版:
http://dlb.pchome.net/development/reference/effectiveCplus.zip
5.More Effective C++中文版-zhc译
http://cable.pchome.net/development/reference/MEC0410.zip
6.More Effective C++中文版-候捷译
http://www.nethovel.com/resources/MoreEffectiveC++(WQ).zip
7.Essential C++中文版(全)-候捷译
http://www.nethovel.com/resources/Essential%20C++ 中文版(全).rar
8.深入浅出MFC 2/e
http://218.30.21.125:8084/ebook/programme/mfc2e.zip
9. 代码大全中文版
http://www.delphidevelopers.com/docs/tecsubject/cc/CodeComplet110.zip
11.C++ 经典对话系列
中文:http://www.jka77.com/book/cvst_cn.chm
12.MFC Windows 程序设计(第二版)
英文版:http://www.jka77.com/book/progmfc2.chm
中文版:暂无,制作中...
13. 数据结构 C++ 语言描述(中文版)
http://www.code-labs.com/manual/c_c015.zip
14.Java 编程思想中文版
ftp://202.118.72.12/pub/doc-book/Java/Java编程思想.zip
15.C++ 标准库英文版
ftp://166.111.64.4/incoming/新文件夹/f /The%20C++%20Standard%20Library(with%2
0TOC).pdf
16.Windows核心编程
英 文:http://www.fmdstudio.net/book/prgapps4.zip
17.TCP- IP详解卷1:协议
ftp://202.204.4.161 /学习资料 /TCPIP/TCP-IP详解卷1:协议.pdf
18.TCP-IP详解卷2:实现
ftp://202.204.4.161 /学习资料/TCPIP/TCP-IP详解卷 3:TCP事务协议,HTTP,NNTP.pd
f
19.TCP-IP详解卷3:TCP事务 协议
ftp://202.204.4.161/学习资料/TCPIP/TCP-IP详解卷 2:实现.pdf
20.实用算法的分析与程序 设计
ftp://202.204.8.10/[4]%20编程资源/[%20书籍资料%20]/[算法与数据结构]/实用算法
的分析与程 序设计.rar
21.vc++技术内幕第四版 (潘爱民)
ftp://210.32.157.56/课件/c++primer/vc++ 技术内幕IV(潘爱民).rar
22.C++ Primer英文版:
http://computerstep.w18.net/C/C++%20Primer.zip
23.Effective C++中文版:
http://dlb.pchome.net/development/reference/effectiveCplus.zip
24.More Effective C++中文版-zhc译
http://cable.pchome.net/development/reference/MEC0410.zip
25.More Effective C++中文版-候捷译
http://www.nethovel.com/resources/MoreEffectiveC++(WQ).zip
26.Essential C++中文版(全)-候捷译
http://www.nethovel.com/resources/Essential%20C++ 中文版(全).rar
27.Programming Windows程式开发设计指南-Petzoldi著 余孟学 译
中文 版:http://www.nethovel.com/resources/ProgrammingWindows_tw.chm
英文 版:http://www.nethovel.com/resources/Petzoldi.chm
28.WinAsm32 汇编教程- Iczelion
http://www.nethovel.com/resources/winasm.chm
29.Windows 95 程序设计指南-候捷译
http://www.nethovel.com/resources/win95adg.zip
30.Thinking in C++ 2nd Edition(C++编程思想)
英文版:http://www.nethovel.com/resources /ThinkinginC++.zip
中文版:http://www.dingbing.com/book/thinkc.zip
31. 人月神话-中文版
http://www.goodassister.com/book/rysh.pdf
32.The C++ Programming Language英文
http://computerstep.w18.net/C/The%20C++%20Programming%20Language.rar
33.VC 技术内幕第五版 http://www.helpwork.com/downdata/book/programming/vc/boo
k/vc++2/invcpp5.chm
34.com 技术内幕
http://www.helpwork.com/book/html/user/download.asp?id=1123
35.com+ 技术内幕
http://www.helpwork.com/book/html/user/download.asp?id=952
36. 新编 Windows API参考大全
http://www.4046.com/nnsrc/down/WindowsAPIdq.rar
37.The C programming Language // By Brian W. Kernighan and Dennis M. Ritchie

下 载地址:http://www.jka77.com/book/The_C_programmin.chm
38.C 语言编程手册
下载地 址:http://www.jka77.com/book/CL.chm
39.Delphi 7高效数据库程序设计
By 李维
下 载地址:http://www.codestudy.net/book /download.asp?id=1163&sort=5
40.Windows 网络编程(第2版)
By Anthony Jones,Jim Ohlund 清华大学出版社
下载地址:英文 版:http://www.guxiang.com/epubcn /readings/diannaotushu/500/dow
nload/1107/network_prog_for_win_2nd.zip
41.Windows2000 编程技术内幕
By Mickey Williams 机械工业出版社
下载地址:ftp://ftp.frontfree.net /Pub/Books/C&C++/VC/Windows2000编程技术内幕
.rar
42.数据仓库
By W.H.Inmon 清华大学出版社
下载地址1:http://tips.9hao.com/vvbksd/20011120/数据仓库.zip
下 载地址2: ftp://ftp.math.nankai.edu.cn/Ebook/China-pub/chinapub_computersci
ence_multimedia/ComputerScience/%CA%FD%BE%DD%B2%D6%BF%E2/
43. 编码的奥秘
By Charles Petzold 机械工业出版社
下载地 址:ftp://ftp.math.nankai.edu.cn/Ebook/China-pub/chinapub_computerscie
nce_multimedia/ComputerScience/%B1%E0%C2%EB%B5%C4%B0%C2%C3%D8/
44. 编译原理及实践
By Louden, K.C 机械工业出版社
下载地址:ftp://ftp.math.nankai.edu.cn /Ebook/China-pub/chinapub_computerscie
nce_multimedia/ComputerScience/%B1%E0%D2%EB%D4%AD%C0%ED%BC%B0%CA%B5%BC%F9/
45.Inside C++ Object Model(深度探索C++对象模型)
By Lippman 候捷译
下载地 址:http://www.jka77.com/book/inside-the-cpp-object-model.pdf
46.C++ 标准程序库
By Josuttis
下载地址1:http://www.codestudy.net/book /download.asp?id=1205&sort=5
下载地址2: ftp://ftp.math.nankai.edu.cn/Ebook/C_C++/The Cpp Standard
******************************************** *******************************************************************

******************************************** *******************************************************************
                                          台湾游戏界有问题系列之【老板有问题】
这个游戏界里面,有一群人日以继夜的燃烧著自己的生命,为了制作出好游戏而抛家弃子,十过家门而不入,这一群人我们称他为“制作人员”,或可转译名称叫做 “呆瓜”。而在这群呆瓜之外有一群人,他们的数量很少,通常一家公司只有一两个人,但是所有的呆瓜都绕著他跑,这种人我们称他为“企业主”,俗称叫做“老 板”。
当然每个公司都有老板,他也是风险承受最大的人,如果赚钱的话,他也是直接受益者。平常这些呆瓜的日常生活都由老板挡琅,而呆瓜所要负责的,就是把老板的 计划付诸现实,做成游戏拿出去卖。
老实说做游戏是一个回本很慢的行业,他既不像色情光碟和大补帖可以无本生意,也不像晶圆厂来的投资多赚的多。做游戏不但投资巨大,而且起码得等上一两年才 会有进帐,要达到损益平衡,只怕得等上好些年了。
也许你会问,企业主本身难道不会想想吗?这种赔本生意谁要做啊?可是在四五年前的台湾,的确像雨后春笋般,大量的游戏工作室倏然出现!当然这些工作室的下 场有许多都不了了之,但是他们的出现也确实为台湾的游戏市场写下了一段百家争鸣的沧桑史。所以我在这一段中,就要列举企业主的种类,并且将其大体肢解,找 出他们为什么愿意冒风险投资做游戏的理由。
  
第一类大脑不清楚型老板
这种老板其实不算是个人,而是一整团人的集合。这种团体多半由一群脑袋不大清楚的年轻人组成,名为“XX工作室” 或者“什么什么工作坊”等等。一位名不见经传的大学生当起了程式设计师,纠合两个热血的高职美工科毕业生,再加上程式设计师的白痴朋友当企划,编一些无脑 的烂剧情,抄一抄罗德斯岛的画册当作角色设定,随便找一个冬冷夏热的废墟就开始干起来了!
这些人最大的问题就是没有打好算盘,以为做游戏是件好赚的事。当然三四年前或许如此,一款游戏卖500元上下,最少都能卖个三千片,那就是150万元的进 帐!扣掉店家抽成制造成本等费用,还能剩下八九十万元!用这八九十万来分赃,程式30万,美术两个各十五万,企划十五万元,还剩下十几万可做公司基金,将 来工作室成立公司,大家过瘾! 当然在游戏制作期间的花费由大家自理,因为大家都年轻,认为苦一点不要紧。
哪知道过了一年之后产业的风向球变了,游戏套数根本只能卖以前的一半!然后又被经销商狠敲了一笔,最后拿到手上的钱,只有几万元 去便利商店打工一年也能赚上20万元吧?笔者真不知道该说什么好,只是像这样的工作室后来在游戏产业大萧条的时侯(1996~1998)几乎都倒光了,里 面的热血青年也都变成了老谋深算的游戏界前辈级人物,有的现在在公司里面荼毒著刚入行的新人,也有一些现在正坐在电脑前,写一些大骂别人大脑不清楚的文 章…
  
上次笔者已经揭发了第一型--大脑不清楚型的老板,但是在这游戏界的暗流里面,还有一种更加恐怖的浑蛋老板存在,笔者在这里要继续无止境的揭发下去。一方 面,对于有心进入游戏界的小男孩小女孩有教育作用,当你发现你的老板有我所说的这些情况的时候,别怀疑了,赶快闪人!另一方面,这也是对于笔者亲身的经历 作一种阐述,将我所经历过的混帐鸟事作一个曝光。我再陈述一次,我所作所为,不是在攻击游戏界,而是想要将游戏界导入正途,我这个专栏的目的,就是要将所 有奇怪的白烂现象都做一个举发,将之曝于昭昭之世,希望在日后的未来,这些事情是不复见的,而游戏界的未来也将蒸蒸日上,凌驾韩国而超日本,击败美国而进 军世界!这是本人深刻的期许,也希望阅文诸君可与鼓励一番,下面就是本文。
  
第二类杀鸡取卵走火入魔型
这一型就是真正恐怖的一型。游戏界最大的资产就是年轻人、年轻的心、年轻的活力。但是这种企业主就像滥抽地下水的可恶渔农,不停的将这些年轻人的热情热血 狂抽猛取,直到其完全乾涸,黯然神伤的离开游戏界。
这些年轻人的未来会如何我们实在不知道,因为在这样的企业主手下呆过的人,多半都对游戏界失去信心,最后自己连游戏玩都不玩了。呜呼!哀,莫大于心死; 痛,莫大于不玩游戏!至于这种企业主是如何荼毒迫害年轻人呢?且听我慢慢道来。
他们最常做的事就是“以利诱之,以名拐之”。在我们刚出社会的时候,多半都想自己闯出一片天空,于是这种企业主就以名利为饵食,钓上一支一支甘于接受眼前 低薪的蠢鱼。这些人甘愿接受眼前每个月数千元的超低薪水,然后在极度不良的工作环境下一群人住在一起,每天除了睡觉之外就是工作,工作时间竟然长达16个 小时以上!星期假日也是偶尔才有,算起来就是每天16小时乘以一个月25天等于四百小时,每个月这些年轻人却只能 到五千块薪水!这样一算的话每个小时只 有12.5元薪水,真是超低低低价劳工!
可是你也许要问这些人为什么这么蠢要去做呢?就是因为企业主许他们一个诺言“片子卖了大家分红!杂志社也会来采访你!到时候你就坐拥金山,名海,女人 乡!”于是这些蠢蛋在1996-98年之间大量的加增,一直到游戏界的泡沫美梦终于幻灭,他们才从时间之流中苏醒,发现自己的不智! 而这种企业主有好下场吗?没有!你想你出了多少资本?少的可怜!当然你得到的成果会有多少?少的可怜!这种组合做出来的游戏多半都胎死腹中,要不然就是虎 头蛇尾,草草收场。
但是在笔者亲眼所见的事实中,竟然有人将未完成作品先行上广告,说是要“刺激效率”!以为这样大家就能共体时艰拼命做事吗?大家早就皮了,根本不想再继续 做下去,最后弹尽援绝的时候,你就可以看见这名自称老板的人去借贷买一台二手宾士。做什么?去拐更有钱的凯子来投资!就这样挖东墙补西墙,作品就这样日日 月月的延宕下去,年轻人来了又去去了又来,投资者一个倒掉换过一个,最后才惊然发现,原来这整件事都是因著那一位自称为老板的家伙想要不劳而获,想要一本 万利所造成之结果!所有年轻人的梦想与热情,都在他这种超量抽取下成为甘涸的荒漠,成为对生命与游戏不再感兴趣的冷漠者!真如我题目所说,这些人真是杀鸡 取卵,走火入魔的变态者!他们的结局我已经可以想见,不是在台湾的某角落躲避仇家的追杀,就是静静的躺卧于蔚蓝的太平洋底!呜呼哀哉,家属答礼,尚飨

****************************************************************************************************************

你可能感兴趣的:(MFC学习之旅)