VC入门的一条路

来源:互联网 发布:淘宝旺铺智能版费用 编辑:程序博客网 时间:2024/05/16 12:24

这是我保存的一篇他人写的文章,想学VC/MFC的朋友一定不可错过^_^

 

首先声明,我可不是什么高手,也就是刚脱贫。因为运气很好,买到了几本好书,在学习过程中几乎没走什么弯路,没费什么劲就入门了,现在一般的小程序能搞定了。看到那些因为不知从何下手而苦苦挣扎的朋友,希望我的文章能给他们一些帮助。

学编程急不得,上来就学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++了.注意,是C++而不是VC,这两者根本不是一码事!别买VC入门,你肯定看不懂!C++是一门语言,而VC教程则是讲解如何使用MFC类库,学习VC应建立在充分了解C++的基础上。

我觉着比起许多花花绿绿的大全、宝典,不如买本大学的C++教程(注意:别买等级考试的教程,那是应试用的),那些教程大都经过反复锤炼,比较系统,很有含金量,有不会太贵。这里我暴力推荐由清华大学出版社出版的一本《C++程序设计教程》,封面是红色的,封底是黄色的,看起来很朴素,主编是钱能。这本书简直是好的没法说,还便宜(39.5元)。这本书不但告诉你语法,还告诉你为什么要这样规定语法,看完之后,你会觉着那许许多多的规定是理所当然的,根本不用费心记,不但不枯燥,反而会使有一种美感。书中还有许多实际编程时应注意的问题,很有价值。这本书还配有《实验指导》,和《习题集》,不过对于有一定编程经验的人应该是用处不大,所以我没买。除了这本书,我建议再买本关于传统C语言的书,要着重以下几个方面:编译预处理、typedef的使用,位运算,标准库函数的使用(最好有一个比较详细的列表,用的时候好查)。

C++的标准类模板是个不错的东东,不过对于学习MFC却没有帮助,原因是MFC太落后了(^_^),可以先放一放,要不要学等搞定MFC时再作决定。虽然我没怎么学过,不过觉着它挺不错,而且代表了一种发展方向。虽然学着费劲(那东西几乎没一点C++的样子,简直是在学新语言),但掌握它可使编程轻松不少。

学完了C++,该学VC了吧?别急,先找本 WIN32编程的书,这次没什么讲究,看着差不多的,便宜一些的就行了,如果有对于VC集成环境的介绍就最好了。WIN32编程是指用WINDOWS API编程,MFC是将众多的API函数进行了封装的类库,用起来方便了不少,但如果没有一些API编程基础,对相关概念不了解,学起MFC来可能会很费解。相信我,将来你不会觉着学API编程是浪费时间的。API函数有两千多,要都学会累死。其实你只要知道如何创建窗口、对话框、控件、消息循环,了解了句柄的含义就差不多了,最好再了解一点GDI编程。这个阶段的关键是要理解WIN32程序是如何运作的,把握各种窗口间的关系。因为你以后应该很少直接用 WIN32 SDK编写程序,所以关键是理解整体结构,记住几个函数并没有什么意义。函数用的时候可以现查。手头应有一份比较全面的资料。中文的API函数大全好像只有For VB的,不过看起来应该是没有任何障碍。英文的资料MSDN中就有,相当全面,也比中文的详细一些。我建议用中文资料快速查找,有问题再看英文。(我忘了我的html版中文API大全是从哪下载的了,不过书店有售,白皮的,很厚一本,很贵就是了。谁想要可以与我联系 [color=#2f5fa1]iamsor@sohu.com[/color])

对于想学游戏编程的朋友注意:从现在起,你不必去学什么MFC了,相信我,那东西除了让你头疼一点用处都没有。游戏都使用Win32 SDK编出来的。现在,你要学的是DirectX。我推荐老王翻译的DirectDraw文档([color=#2f5fa1]www.imagic3d.com[/color]),前面有一些老王自己写的基础知识,很适合入门, 在此特别感谢老王的辛勤劳动。我还买了一本《DirectX 7 速成教程》,机械工业出版社出版,封面封底都是红色。除了翻译惨了点还算不错,介绍的挺全面,还有一些游戏编程基础知识。如果你想图省事,可以考虑用云风编写的风魂游戏库,很方便的([color=#2f5fa1]www.codingnow.com[/color] 对云风的辛勤劳动表示感谢).不过我仍然建议至少了解一下DirectX.这里说一下,很多朋友抱怨找不到有关DirectX的书籍,我告诉你,别去编程书籍里找,去多媒体制作书籍那找,还要把眼睛瞪得大大的、圆圆的。Director.. Director.. DirectX!!!知道了吧,书店工作的人眼神都不大好,我也是有一天没事瞎转才发现的,吓了我一大跳。发现这个秘密后我发现其实有不少关于 DirectX的书,只是一般人找不到罢了。学会了DirectX,就可以开始奋斗了,剩下的问题就只有积累经验了。

对于志向是应用软件的朋友,打好了基础,现在进军VC的障碍都已扫清了。不过还是应做好充分的思想准备,事情不会那么顺利的。刚开始,你就要面对一个瓶颈,大量的紧密关联的知识,使你必须一下理解一个整体,而很难一点点来。可以说,学VC最难的就是刚开始。情况有些类似于你第一次创建窗口时面对的那长长的程序,只不过更糟糕就是了。很多人就是在此被一大团知识噎着,放弃了学习。事实上,这几乎是Windows编程的一大特点,在WIN32编程时你就应当有所体会,而 DirectX和COM都有类似问题。记住,一定要坚信:突破了这个瓶颈之后便是一片海阔天空,而有着扎实基础的你是一定能闯过去的。
我的建议是,不要等彻底弄明白一句才看下一句,而是知道好像怎么回事就向下看,实在看不懂也硬着头皮往下看,等能比猫画虎的作出个菜单、对话框时便回过头再看一遍,几遍之后应该就可以大概明白MFC程序的运作了。注意:这里有个关键,一定要用心体会面向对象编程的精神,努力将眼前的程序与你之前所学的知识联系起来。通过比较成员函数和对应的API函数间的区别,尝试去理解MFC是怎样封装相关的API的。例如,相当多的类将句柄封装了起来,在传递参数时加以省略,这就是一个很重要的特性。MFC中有许多的宏,看起来很奇怪,但你不必理会其实现方法,只要知道如何使用便可,这点也很重要。还有,千万不要过于依赖 ClassWizard,对于其生成的代码要自己进行分析,偷懒就不能真正理解MFC。

这里我介绍一种学法,不过学法这种东西因人而异,所以还要根据个人的情况决定。开始时,教程让怎么办就怎么办,比猫画虎的作出个菜单、对话框,然后试着添加控件。等能不看教程便做到这些时,开始逐字逐句的试着理解MFC程序的组织。若看不懂就跳过看下面的。就这样一遍一遍来。如果觉着头大就先歇上两天,等清醒了再接着来.最好在这期间多找些介绍 MFC框架的文章。注意:先不要碰有关文档/视结构的东西,否则你会更头大。然后便可试着写个定时器、名片夹之类的小东西,熟悉一下各种控件的使用。 突破了开始的瓶颈之后再学下去便会越学越容易,因为你可以一点一点的积累知识,而不用担心被噎着了。再过不久,你就不得不开始使用API函数完成一些功能,如在系统托盘加图标,自画列表框等。这时,你也会体会到学习WIN32编程的好处了,没学过的人很可能就此卡壳。

关于VC的教程遍地都是,但鱼龙混杂,市场乌烟瘴气,骗钱的书真不少。有些书很厚,内容当然也很全,对老鸟很不错,但对于初学者似乎有些浪费钱,因为里面绝大部分的东西 MSDN中都有,并且初学者用不着。老外写的书一般内容不错,但翻译水平是个问题。如果翻译糟糕可够你受的,加上价格不菲,我也不建议初学者买。还有些什么傻瓜书、图解之类,好像是面向初学者,时则为骗钱,你看完后除了那几个例子什么也不会作。如果你看到有一本书花了大量的篇幅图文并茂,生动形象的介绍如何画图,输出文字,别买!骗钱的!(:-[color=#2f5fa1]http://vcdynasty.yeah.net/[/color])下载本 MFC教程。虽说是网上教程,却当相当有水准。不但内容比较全面,还一句废话也没有(这里感谢作者的辛勤劳动)。只是可惜对GDI没有一点介绍,还须其他书籍作补充。等搞定这本教程时,应该就已经入了门,可以有针对性的选购书籍,不用担心上当受骗了。还有,VC知识库([color=#2f5fa1]www.vckbase.com[/color])的网上杂志也很不错,对刚入门的人很有帮助,建议下载。入了些门后,各个网站多转转,看见好文章就往下拉,对提高水平很有好处。 

一套MSDN光盘在这时是必不可少的,什么都找中文资料是不可能的,即使能找到也会很费时间和金钱,只能看硬着头皮英文。不过以我的经验看,只要有高中水平的英语,加上金山词霸一路滑过去,看那种专业文章还是很容易的。还有,初学者一上来可能根本不知道上哪找需要的东西,我在这里把常用的地方列一下:

WIN32 API: 平台SDK->Reference->Win32 Functions in Alpha Order
MFC类库资料: Visual C++ Documentation->Reference->Microsoft Fo...
C/C++语言及标准库资料: Visual C++ Documentation->Reference->C/C++...
标准控件: 标准控件都被MFC封装了,可以参考对应的类,如Edit控件对应CEdit类. www.tenaiweb.com
VC中带的ActiveX控件: Visual Basic文档->参考->控件参考(唯一的中文资料,却是最糟糕的。不但是For VB,与C++有很大区别,还翻译得乱七八糟,几乎没法用.如有高手知道哪有英文资料还请告知,不胜感激)

目前市面上的MSDN光盘已经有一段历史了,有些东西可能有些过时。要最新资料的话,可以到微软的网站(当然是全英文的)。不过对于初学者似乎没有必要。

搞定VC 后,要学什么都随你便了,再学C++Builder,VB,Dephi,java什么的都是一点难度都没有了,感觉就象是把关键字换了换。或者可以去啃啃 COM,据说那是块硬骨头(不过好像也只是入门难,因为有了之前的经验,虽然我没碰过,但花点时间应该是搞得定的。另外DirectX编程经验在此应该是有些帮助的)。

最后,我建议有时间的话多研究一下各种算法。数据结构是一定要看的。不一定要记住(话说回来,不经常用的话也记不住),但至少要知道有那么回事,万一碰到问题了要知道往那边靠。其实,常见的链表等结构以及排序等算法在C++标准类模板中已经实现了,不用你去费劲,但有些了解的总是有好处的。至于离散数学、线性代数什么的,对于复杂些的算法是必需的,其中离散数学是数据结构的基础。不过,我倒觉着只要不是太复杂的问题只用经验也能解决(就象奥赛书中那样,只是实现而没有证明),而且那些东西不用就会忘。万一碰见个难题解决不了,找个高手帮忙也不错,省时省力^_^。

下面是我想到的一些杂七杂八的问题,没什么条理,凑或看吧:

英语水平不用很高,但至少要有高中水准,否则有你受的。

看书一遍看不懂没关系,事实上,要一遍就能弄懂你就很有天分了。只要多看几遍,综合分析,应该是没有什么问题的。

现在的世道,不是书到用时方恨少,而是书到用时方能学。不要试图满把抓,而要用到什么学什么。这样,学的又快,记的又牢。

一个错误认识-学编程靠的是记忆:这是很要命的思想,会让你累死而无所得。事实上,你几乎不用特意记任何东西。对于各种函数、语句,只要知道有那么个东西,用的时候知道上哪找就行了,用多了自然就记住了。学编程关键在理解编程思想。

一个小技巧:活用编译器可以帮你很多忙。在VC中,当你输入成员符号.或->时,程序会自动列出此类的成员,你只要选一个就行了。这样便省了很多记忆负担。例如,你想获得一个CString类对象的长度,对应方法肯定是Get什么,但是 GetLetterNum还是GetStrLength却不知道,你可以输入xxx.Get,这样,你便可从列表中找到一个 GetTextLength(),不是这个还能是什么,单击它的话还可能出现说明。还可避免打错字。如果想调用本类的成员函数,就输入 this->,就可以查看成员列表了。对于全局函数,则是输入::即可。这样的话看起来还清楚。还有,如果没有出现那个列表,八成是你弄错了什么东西,例如变量没定义,或打错了字,但也可能是VC的BUG,很少就是了。对于初学者,这可是很好用的功能。

初学编程应遵循的一条原则:比猫画虎、不求甚解。关键在于很多东西你就甚解不了,例如MFC中稀奇古怪的宏。而且,甚解了也没太大的好处,暂时还是不要管它,会用就行了,什么时候有了闲工夫再来慢慢琢磨。多留心别人的程序是如何实现的,并照着去做。有时,一些小问题也体现着高深的思想。比如,一个变量要定义在什么地方,如何组织类的结构。如果不太明白,就先找着别人的样子去作,时间一长就会自然而然的明白,这就像下棋一样,老头怎么下,你也跟着怎么下,毕竟他出错的可能比你小。

还有,我觉着初学者不应把过多的精力放在象Cool的工具条,透明的、气泡状的窗口之类的工作上。再搞这些之前,你最好问问自己,自己的程序配得上这些漂亮的界面吗?尤其是,千万不要在刚开始动手时就先打扮界面,以免界面也弄好了,热情也没了。毕竟,看在眼里的成果给人的刺激比枯燥的算法强得多。如果你想搞的话,也要等程序主体定型后再搞。 初学时还应多留心关于程序结构组织的文章,这些东西是很重要的。要从一开始便养成良好的风格。否则有一天当你决定编一个大点的程序时,你就会发现干到一半就干不下去了。

编程不是技术活,而是体力活:学的时候满脑子全是技术,可用的时候就真成了体力活了。真正做起东西来,最重要的是要有毅力坚持到完。意志不坚强就难免半途而废。 关于初学者是该学VC还是该学VB的问题:我觉着,学VC会难一些没错,但掌握学习方法的话也没想象的那么难,而且学VC才能深刻领会面向对象编程的精髓。它使你的思想提升了一个高度,对以后的发展是大有好处的。再说,如果这点困难都克服不了,以后也很难有什么作为。所以,即使你打定主意用VB,也还是花些时间看看VC,至少知道它的大概结构。从长远看,这是很有好处的。

关于学C++ Builder还是Visual C++的问题:也许VC真的不太好,但总不会太糟。可关于VC的资料不知是关于C++ Builder的多少倍。尤其对于初学者,这时很要命的!何况两者相差其实并不太多,学会了一种,再学另一种也不会太费事。

呵,没想到说了这么多。我已经声明了,其实我也就是刚入门,以上一切都是我自己的感受,难免有错误,还请高手指正。另外,这是我第一次写文章,加上我语文很糟糕,其实就是想到哪写到哪,各位就凑或一下吧。
本帖最近评分记录:
财富:1 (by lanzhouyiye) | 理由: [color=red]谢谢你的建议:)[/color]
免费FTP服务器
鸡小姐抱怨说:人类太自私了.他们搞计划生育却让俺下这么多蛋……
    牛大姐说:mm.这算什么呀.这么多人吃牛奶.就没有人叫我一声妈妈……
Posted: 2005-06-06 11:39 | [color=#fa891b][楼 主][/color]
[b]yuanhaode[/b]
  

级别: [color=#555555]管理员[/color]
精华: [color=#0033ff][size=2]10[/size][/color]
发帖: [size=2][color=#008000]961
[/size][/color]威望: [size=2][color=#984b98]396 点
[/size][/color]狗币: [size=2][color=#fa891b]750 狗币
[/size][/color]贡献值: [size=2][color=#008000]2172 点
[/size][/color]好评度: [size=2][color=#984b98]108 点
[/size][/color]在线时间:1103(小时)
注册时间:2005-05-02
最后登录:2007-03-23
     
此人网名为xiaomazhw2001,现在,有篇文章写的不错,对学编程的人有一定的启发,向把
它转帖如下:


给大家学习C的一点建议! 
我始终认为,对一个初学者来说,IT界的技术风潮是不可以追赶的,而且也没有能力去追
赶。我时常看见自己的DDMM们把课本扔了,去卖些价格不菲的诸如C#, VB.Net 这样的大部
头,这让我感到非常痛心。而许多搞不清指针是咋回事的BBS站友眉飞色舞的讨论C#里面可
以不用指针等等则让我觉得好笑。C#就象当年的ASP一样,“忽如一夜春风来,千树万树梨
花开”,结果许多学校的信息学院成了“Web 学院”。96,97级的不少大学生都去做Web 了
。当然我没有任何歧视某一行业的意识。我只是觉得如果他们把追赶这些时髦技术的时间
多花一点在基础的课程上应该是可以走得更远的。 

几个误区 
  
初学者对C#风潮的追赶其实也只是学习过程中经常遇到的几个误区之一。我将用一些实际
的例子来说明这些现象,你可以按部就班的看看自己是不是属于其中的一种或者几种: 


认为计算机技术等于编程技术: 

有些人即使没有这个想法,在潜意识中也有这样的冲动。让我奇怪的是,许多信息学院的
学生也有这样的念头。认为计算机专业就是编程专业,与编程无关的,或者不太相关的课
程他统统都不管,极端的学生只要书上没带“编程”两个字他就不看。 

其实编程只是计算机技术应用过程中一种复杂性最低的劳动,这就是为什么IT业最底层的
人是程序员(CODER)。计算机技术包括了多媒体,计算机网络,人工智能,模式识别,管
理信息系统等等这些方面。编程工作只是在这些具体技术在理论研究或者工程实践的过程
中表达算法的过程。编程的人不一定对计算机技术的了解就一定很高。而一个有趣的现象
是,不少大师级的计算机技术研究者是不懂编程的。网上的炒作和现实中良好的工作待遇
把编程这种劳动神秘化了。其实每一个程序员心里都明白,自己这些东西,学的时候并不
比其它专业难,所以自然也不会高档到哪里去。 

咬文嚼字的孔已己作风: 

我见过一本女生的《计算机网络原理》教材,这个女生像小学生一样在书上划满了横杠杠
,笔记做得满满的,打印出来一定比教材还厚。我不明白的是,像计算机网络原理这样的
课程有必要做笔记?我们的应试教育的确害了不少学生,在上《原理》这一类课程的时候
许多学生像学《马列原理》一样逐字背诵记忆。这乃是我见过的最愚蠢的行为。所谓《原
理》,即是需要掌握它为什么这样做,学习why,而不是how(怎样做)。极端认真的学生
背下以太网的网线最大长度,数据帧的长度,每个字段的意义,IP报头的格式等等,但是
忘了路由的原则,忘了TCP/IP协议设计的宗旨。总之许多人花了大量的时间把书背得滚瓜
烂熟却等于什么也没学。 

在学习编程的时候这些学生也是这样,他们确切的记得C++语法的各个细节。看完了C++教
程后看《Thinking in C++》(确实是好书),《Inside C++》,《C++ reference》,th
is C++, that C++……,然后是网上各种各样的关于C++语法的奇闻逸事,然后发现自己又
忘了C++的一些语法,最后回头继续恶补…。有个师弟就跟我说:“C++ 太难了,学了这里
忘了那里,学了继承忘了模板。”我的回答道:“你不去学就容易了”。我并没有教坏他
,只是告诉他,死抠C++的语法就和孔已己炫耀茴香豆的茴字有几种写法一样毫无意义。你
根本不需要对的C++语法太关心,动手编程就是了,有不记得的地方一查 MSDN就立马搞定。
我有个结论就是,实际的开发过程中对程序语法的了解是最微不足道的知识。这是为什么
我在为同学用Basic(我以前从没有学过它)写一个小程序的时候,只花了半个小时看了看
语法,然后再用半个小时完成了程序,而一个小时后我又完全忘记了Basic 的所有关键字
。 

不顾基础,盲目追赶时髦技术: 

终于点到题目上来了。大多数的人都希望自己的东西能够马上跑起来,变成钱。这种想法
对一个已经进入职业领域的程序员或者项目经理来说是合理的,而且IT技术进步是如此的
快,不跟进就是失业。但是对于初学者来说(尤其是时间充裕的大中专在校生),这种想
法是另人费解的。一个并未进入到行业竞争中来的初学者最大的资本便是他有足够的时间
沉下心来学习基础性的东西,学习why 而不是how。时髦的技术往往容易掌握,而且越来越
容易掌握,这是商业利益的驱使,为了最大化的降低软件开发的成本。但在IT领域内的现
实就是这样,越容易掌握的东西,学习的人越多,而且淘汰得越快。每一次新的技术出来
,都有许多初学者跟进,这些初学者由于缺乏必要的基础而使得自己在跟进的过程中花费
大量的时间,而等他学会了,这种技术也快淘汰了。基础的课程,比方数据结构,操作系
统原理等等虽然不能让你立马就实现一个linux(这是许多人嘲笑理论课程无用的原因),
但它们能够显著的减少你在学习新技术时学习曲线的坡度。而且对于许多关键的技术(比
方Win32 SDK 程序的设计,DDK的编程)来说甚至是不可或缺的。 

一个活生生的例子是我和我的一个同学,在大一时我还找不到开机按纽,他已经会写些简
单的汇编程序了。我把大二的所有时间花在了汇编,计算机体系结构,数据结构,操作系
统原理等等这些课程的学习上,而他则开始学习HTML和VB,并追赶ASP的潮流。大三的时候
我开始学习 Windows 操作系统原理,学习SDK编程,时间是漫长的,这时我才能够用VC开发
出象模象样的应用程序。我曾一度因为同学的程序已经能够运行而自己还在学习如何创建
对话框而懊恼不已,但临到毕业才发现自己的选择是何等的正确。和我谈判的公司开出的
薪水是他的两倍还多。下面有一个不很恰当的比方:假设学习VB编程需要4个月,学习基础
课程和VC的程序设计需要1年。那么如果你先学VB,再来学习后者,时间不会减少,还是1
年,而反过来,如果先学习后者,再来学VB,也许你只需要1个星期就能学得非常熟练。 

几个重要的基础课程 
   
如果你是学生,或者如果你有充足的时间。我建议你仔细的掌握下面的知识。我的建议是
针对那些希望在IT技术上有所成就的初学者。同时我还列出了一些书目,这些书应该都还
可以在书店买到。说实在的,我在读其他人的文章时最大的心愿就是希望作者列出一个书
单。 

大学英语-不要觉得好笑。我极力推荐这门课程是因为没有专业文档的阅读能力是不可想
象的。中文的翻译往往在猴年马月才会出来,而现在的许多出版社干脆就直接把E文印刷上
去。学习的方法是强迫自己看原版的教材,开始会看不懂,用多了自然熟练。吃得苦下得
狠心绝对是任何行业都需要的品质。 

计算机体系结构和汇编语言-关于体系结构的书遍地都是,而且也大同小异,倒是汇编有
一本非常好的书《80x86汇编语言程序设计教程》(清华大学出版社,黑色封面,杨季文著
)。你需要着重学习386后保护模式的程序设计。否则你在学习现代操作系统底层的一些东
西的时候会觉得是在看天书。 

计算机操作系统原理-我们的开发总是在特定的操作系统上进行,如果不是,只有一种可
能:你在自己实现一个操作系统。无论如何,操作系统原理是必读的。这就象我们为一个
芯片制作外围设备时,芯片基本的工作时序是必需了解的。这一类书也很多,我没有发现
哪一本书非常出众。只是觉得在看完了这些书后如果有空就应该看看《Inside Windows 2
000》(微软出版社,我看的是E文版的,中文的书名想必是Windows 2000 技术内幕之类吧
)。关于学习它的必要性,ZDNET上的另一篇文章已经有过论述。 

数据结构和算法-这门课程能够决定一个人程序设计水平的高低,是一门核心课程。我首
选的是清华版的(朱战立,刘天时)。很多人喜欢买C++版的,但我觉得没有必要。C++的
语法让算法实现过程变得复杂多了,而且许多老师喜欢用模块这一东西让算法变得更复杂
。倒是在学完了C版的书以后再来浏览一下C++的版的书是最好的。 

软件工程-这门课程是越到后来就越发现它的重要,虽然刚开始看时就象看马哲一样不知
所云。我的建议是看《实用软件工程》(黄色,清华)。不要花太多的时间去记条条框框
,看不懂就跳过去。在每次自己完成了一个软件设计任务(不管是练习还是工作)以后再
来回顾回顾,每次都会有收获。 

Windows 程序设计-《北京大学出版社,Petzold著》我建议任何企图设计Windows 程序的
人在学习VC以前仔细的学完它。而且前面的那本《Inside Windows 2000》也最好放到这本
书的后面读。在这本书中,没有C++,没有GUI,没有控件。有的就是如何用原始的 C语言来
完成Windows 程序设计。在学完了它以后,你才会发现VC其实是很容易学的。千万不要在
没有看完这本书以前提前学习 VC,你最好碰都不要碰。我知道的许多名校甚至都已经用它
作为教材进行授课。可见其重要。 

上面的几门课程我认为是必学的重要课程(如果你想做Windows 程序员)。 

对于其它的课程有这样简单的选择方法:如果你是计算机系的,请学好你所有的专业基础
课。如果不是,请参照计算机系的课程表。如果你发现自己看一本书时无法看下去了,请
翻到书的最后,看看它的参考文献,找到它们并学习它们,再回头看这本书。如果一本书
的书名中带有“原理”两个字,你一定不要去记忆它其中的细节,你应该以一天至少50页
的速度掌握其要领。尽可能多的在计算机上实践一种理论或者算法。 

你还可以在CSDN上阅读到许多书评。这些书评能够帮助你决定读什么样的书。 

日三省乎己     
每天读的书太多,容易让人迷失方向。一定要在每天晚上想想自己学了些什么,还有些什
么相关的东西需要掌握,自己对什么最感兴趣,在一本书上花的时间太长还是不够等等。
同时也应该多想想未来最有可能出现的应用,这样能够让你不是追赶技术潮流而是引领技
术潮流。同时,努力使用现在已经掌握的技术和理论去制作具有一定新意的东西。坚持这
样做能够让你真正成为一个软件“研发者”而不仅仅是一个 CODER。 

把最多的时间花在学习上 
这是对初学者最后的忠告。把每个星期玩CS或者CS的时间压缩到最少,不玩它们是最好的
。同时,如果你的ASP技术已经能够来钱,甚至有公司请你兼职的话,这就证明你的天分能
够保证你在努力的学习之后取得更好的收益,你应该去做更复杂的东西。眼光放长远一些
,这无论是对谁都是适用的。 

相信你已经能够决定是否学习C#或者什么时候去学它了。

 


                            vc++参考书籍(学了前三本再学后两本)
1.《Windows程序设计》,Charles Petzold著,北京大学出版社。上 下两册。
主要讲述Windows SDK程序设计方法。涉及到Windows程序设计的大部分内容,但是对于
Windows内核涉及不多。多任务多线程 网络等内容略显单薄。适合中级Windows程序设计
者。
2.《Windows高级编程指南》,Jeffrey Richter著,清华大学出版社。
深入探讨Windows内核,是高级Windows程序员必备书。
3.《Microsoft? Win32TM 程序员参考大全》,Microsoft Corporation著,清华大学
出版社,共5册。
为Windows SDK程序设计的基本指导书,也是32位Windows API的基本手册。由于Wind
ows最初良好的规划,直到现在这套书依然具有相当的价值,尤其对于Windows程序设计的
基本知识的讲解对于初学者来说尤为关键。
4.《深入浅出MFC》第二版 华中理工大学出版 侯俊杰著
此书较难作者自己说他的书不是为初学者编的,这本书探讨了MFC的机制是本难得的好书!!!
5.《VC++6.0技术内幕》第四版 [美] David J.. Kruglinski 著,潘爱民,王国印译 清华大学出版社 (注意别买希望出版的翻译太差)
这本书的翻译者可能是个对VC内幕了解得较深入的人,相比较而言这本书比深入浅出MFC简单一点是国外的经典VC名著翻译得流畅推荐使用! 
6.多上机实践多看VC++工具MSDN(与VC++6.0配套的是2001年10月份以前的)

----摘自唯C世界、终极论坛

    
我的Visual C++入门之路——N次失败与1次成功 
作者:不祥 

--------------------------------------------------------------------------------

 “N次失败,1次成功,还学的不怎么样……你也太笨了吧!”如果您有这样的评价,那么祝贺您,您已经了解了我这人的99.9%。N这个数字具体是多少连我自己也记不清楚,保守地讲(N≥6==TRUE)这个表达式是能够成立的。回想我的Visual C++入门过程,一路过来,绝对不是像黄飞鸿的功夫那样潇洒精彩,而更像是一颗石头顺流而下,在河床底摸爬滚打、磕磕碰碰。今天是周末,我就把以前N次失败留给我的经验教训胡写上几笔,如果有朋友看到这篇拙文,又刚好打算尝试一下Visual C++,也就算是我给您留下的莽原一径吧。 

一.C++ 语言的基础
  说起入门慢,第一个原因莫过于语言基础了.高中时期学校组织的微机兴趣小组学习的是PASCAL语言(我也不知道为什么要讲这个语言,如果说是为了应付比赛,当时也有C语言组呀),所以在大学转向Windows编程的时候,我首先选择了Delphi.大三的时候学校要求考国家二级,二级没有Delphi,于是又转向了VB,原因是VB做起来与Delphi很像。后来发现VB的IDE做的比Delphi好用,而且BASIC语言写起来简单,于是便弃Delphi而去(明眼人恐怕又要骂我了,若不是太懒,怎么会喜欢VB的IDE呢?的确是这样,后文会提到,懒不仅仅是学习VC的大敌,而且懒人是什么都学不好的)。长年与VB打交道,让我对C/C++语言很不习惯——我不喜欢C++写一个句语要打一个分号,我不喜欢大小写字母要严格区分,我不喜欢比较的时候要写两个等号,我不喜欢……总之,对C++很没好感,没好感也就没兴趣学了(后面提到兴趣是相当重要的)。当然如果你现在再问我应该学习什么语言,我会毫不犹豫地向你推荐C++,因为就常用语言而言,C++语言中包含的知识是相当全面的——从面向过程,到基于对象/面向对象,再到模板和范型,可以说是应有尽有,不夸张地说,别的语言在某种程度上而言是C++语言的子集或者说是在模仿C++、向C++靠拢。
  在数次失败中,给我很明显的感觉就是,不学好C++语言就学习Visual C++纯粹是一种自虐。这次入门之前,我花了3个多月的时间系统地学习了C++语言,够意思吧。然后我信心实足地敲响Visual C++的家门,呵呵,这次她终于肯给面子了。举个例子吧,在看Dll的调用时,用到“函数指针”,顺理成章就看下去了,想一想如果没有C++语言的基础,基本是不可能的。所以说,没学会中文之前,别看《红楼梦》,那不是《看图识字》。奉劝想从VB转向VC学习的朋友,如果你指望能像学习VB一样边学习VC 边学习C++语言,那你可就错了:)
  顺便提醒C++语言入门的朋友一点,应该关注ANSI/ISO C++,也就是标准C++了,市面上C++的书良莠不齐,很多书是“旧书换新皮”,讲的仍然是非标准C++,一定要选好。计算机书很贵,大家不妨找电子版的来看,网上有很多,甚至《C++ Primer》或者《C++沉思录》这样的好书也有热心朋友放到了网上。不过,我最喜欢的是《C++编程金典》这本书,不愧是教育大师写的书,用来学习很合适。至于编译器的选择,如果条件允许就安装VS.NET2003吧,据说Visual C++7.1的编译器是目前对标准C++支持的最好的编译器了。

二.VC学习资料的选择
  VC入门难有很多原因,其中不容忽视的一个就是优秀的VC学习资相对较少。C++语言较深,Visual C++用起来复杂,再加上资料少——难上加难。资料少,并不意味着没有,怎样选择或者说挖掘就是关键。暂把资料分为光盘、书籍(包括电子书)和文档(包括网上的)三类。
  在选择资料方面,大家一定要摈弃中国人思想中的两大劣根性:不劳而获一夜暴富。
  “不劳而获”的思想会导致趋向于选择“讲课”类的资料,比如多媒体光盘。结果是光盘容量往往很少但又要求内容面面俱到(不然怎么卖出去呀),这就造成了知识的连贯性差而且讲的又飞快,任你一遍一遍地听,不见成效又打击信心,最后只能放弃。期待早日有内容丰富,讲解精彩的光盘面市。
  “一夜暴富”的思想会让你趋向于选择“速成”类教材。那样的教材大多是骗人的——能写个弹出窗口Hello一下World,这就能算是会Visual C++了?我们还是不要自欺欺人的好。至少也要能连数据库、能使用Socket吧……而这些知识怎么可能“速成”呢?
  我有很多Visual C++的学习资料,但没有一本我是抱着一啃到底的,因为没有哪本书十全十美,我是交替着使用些资料,这样做的好处在于:
知识的连贯性好,跳跃性小,进阶坡度较小,读起来舒服。都说Visual C++的学习坡度比较陡,那个陡坡是出现在由单纯的C++语言学习转向Windows编程的时候,C++语言本身的学习并没有那么困难。
有积累效应,这本书讲的不精不透,另一本书会帮你补上,这本书你没留心,下本书总该长个心眼吧。还有就是一些小例子程序,把MFC的类或者函数拆开来给你看,目的非常明确,效果也不错。每天学一点,不图快,图扎实。呵呵,跟VC搞“面向对象”,当然要一天一点恋爱了。
举一返三,动手实践。如果多本书中都把它列为重点,那就一定要熟记在心而且上机操作,书上的例子一定要分析透彻,不能有“差不多”的思想——差多少算多呢?程序这东东,错一个字母都不行呀。光看会了还差远着呢,自己要能写,而且能对例子进行扩展才行。
内容详实丰富,这一点上,首推MSDN啦,还有就是在网上能找到的微软出的 Visual C++的丛书,希望译的电子版,是wdl格式的。虽然MSDN是英文版,但其中的英文并不难——您尽可以相信我,因为在下的英文水平是奇烂无比的。 MSDN有两种用法,一种是当字典用,因为内容全;一种是当消遣,没事了看一个类,敲几行代码,看到那个MFC的继承图了吗,挺好玩儿的,感觉像逛街—— 而且东西不要钱,help yourself。
  互联网上的资源是非常非常丰富的,千万不要错过!好网站和下载站BB皆是。还有论坛、新闻组、在线QQ 群……你问我有哪些?呵呵,远在天边近在眼前呀:)

三.内因与外因:“三心二意”和“高手朋友”你有吗?
  啊哦,我不是在开玩笑。“三心”是指决心,信心和耐心。决心来源于动机,说来好笑,我最初动机很简单,大学时有个朋友,计算机系的,我总认为我比他聪明(我的天~~~~),他会VC我不会,我就想超过他,现在都毕业两年了,最初的动机早已经不在了,而学习却VC已经成了我的心愿——最关键的一点是我的愿望是写自己的输入法,而写输入法只能用Visual C++去实现,所以我会有决心学好Visual C++。至于信心,有两次失败完全是信心不足造成的,促成这次成功的信心说起来还挺传奇:我去北京玩儿,回家的火车上一姓赵位老师看见我别着一个MCP的领章就过来跟我聊天,得知他是一位有着十多年VC开发经验的程序员,敬意油然而生。聊天的过程中,赵老师给了我极大的鼓励和支持——我问他像我这种 Wood Head能不能在半年内入门VC,他告诉我,一定能,于是我就坚定了自己的信心,现在刚好是4个月,如果赵老师有机会看到这篇文章——我在这里谢谢您啦! (花絮:下车,两个小时后我与女友分手了,是被甩呀同志们!随后的一段日子里,一直与VC相伴……) 还要说说耐心:如果您已经看到这里了,说明您很有耐心(竟然能看到这里还没有拂袖而去),耐心与个人的风格有关,没耐心的人多半是懒人,懒人什么都做不成,学习VC就是不能懒,书懒得看,问题懒得问,英语懒得译……或者是有点挫折就放弃,学好VC是没指望了。我不知道别人怎样,反正我是没少受挫,其实有两次离入门就那么一点点了,我放弃了……学VC要越挫越勇,学VC要肯定执着,Gogogo!
  “二意”是指第一你要感觉学习VC有“意思”,二是你要感觉学习VC有“意义”。有意思,就是说你喜欢写程序,“三心”的源动力来源于你对程序设计的热爱,不喜欢编程的人可能能学好VB但绝学不好VC。有意义,就是说你要给自己一个理由:自己都不能给自己一个交待的事情是做不长久的。前面说过,我是为了写自己的输入法,解放中国人的双手,这个理由够纯洁够崇高,还有一个理由就是通过学习VC来砺练自己,成为一个真正的程序员。你可以有自己的理由,比如提高薪水或者取得认证云云,一定要有!这就像是给自己的“报酬”,没有报酬只凭激情做事是任何事都做不长久的。
  我小小的成功,有严重的原因是因为我有位“高手朋友”——杨W,他是个 VC高手,大家会好奇地问:他教你写什么呢?是MFC还是ATL或者是COM?呵呵,都不是,他从来没教我写过一行代码,但他对我的每一次帮助都弥足珍贵,当我不知道从哪里查找类库资源的时候,他告诉我:MSDN;当我不知道从哪里找到类的成员函数时,他告诉我:在页面的左下角有一个class member链接,当我问他能不能完成XXXX时,他说:别白费力气了……在他的帮助下,我少走了很多弯路,这也正是高手朋友的可贵之处。在此,我要衷心地说一声:谢谢!
  并不是每位学习VC的朋友都有我这么好的运气,如果你身边没有这样的朋友也不用着急吗,我这位好朋友可是经常出没于 CSDN的坛坛里,明白了?不过,提醒与我一样的初学者:一定要做一个会问问题的人哦!怎么做一个会问题的人呢?概括一下就是:目的明确,言简意赅,核心代码,客气谦虚。

四.VC入门随笔
  本人写东西向来思绪凌乱、颠三倒四。剩下好多东西不知道写到哪里,没办法了,只好叫 “随笔”咯。
  ……学习VC编程,首先要竖立一个“系统/全局观”。无论是VB、C#、Delphi,写程序的时候只需要考虑程序本身就行了,换句话说就是你不用考虑消息是如何映射和传递的。而VC写程序就要多多少少考虑到这些东西。打个比方:以前用VB写程序,就好像是在一座山上建一个亭子,山是山,亭子是亭子,我只管造亭子就是了;而用VC写程序,还是这个亭子,那么你应该意识到,亭子是山的亭子,是山的一部分而不是一个孤立的建筑。 “亭子”就是程序,“山”就是Windows系统,亭子的地基是山留给建筑的“接口”,也就是API了……
  ……VC相对VB入门难,一上来不是像VB那样给个窗体从头做起,而且AppWizard要分好几步,每一步里还有一大堆不知所云的选项,不等生成一个程序就已经晕头转向了。怎么办呢?一句话,从对话框程序入手,因为它最简单,生成的类最少,而且相对是与VB编程最“像”的。在对话框程序里,你可以充分练习添加类和成员变量或者成员函数。……不过我有一点始终搞不明白,由易到难是对话框程序、单文档程序、多文档程序,在AppWizard里微软为什么不按这个顺序排列,非要倒着来呢?成心跟我们这些初学的做对!(国骂省去)……
  ……又是没大写……又是少分号……又是少一个等号……提醒VB转过来的程序员,别总像我这么没记性哦!
  ……还是提醒那些学习了VB或者是VB.NET/C#的DDMM,MFC的类虽然是面向对象的,但它没有“属性”这个概念地!不要指望有Me.TextBox1.Text="Hello World!"这样的语法,C/C++是函数型的语言,类已经把“属性”封装成了成员变量,那些私有的成员变量你看不到,只能通过函数来更改—— this->myTextBox.SetWindowText("Hello World!");……
  ……晕,原来Win32程序和 MFC程序不是一回事呀(看看,这就是一本烂书带给我的,让我一直以为Win32程序就是MFC程序,直到拜读《深入浅出MFC》时才恍然大悟)……
  ……VC好还是VB好?(拜托,别再问这种无聊的问题了)……
  ……VC的确能做底层,但不是最底层;VC的确功能强大,但不是万能的—— 拿手术刀切西瓜或者用菜刀动手术都不对……
  ……VC高手都是用记事本写程序的:笑不笑由你……
  ……VC程序员比VB程序员强:呵呵,毛 主席说过,武器不是战争胜利的决定因素……
  ……在快速开发工具(RAD)中,控件与后台代码是捆绑在一起的,而MFC的“控件类”不一样,它的“资源”(或者说是皮)与“类”(或者说是瓤)是分开的,要通过ClassWizard把它们“粘”起来……
  ……如果说 C++是一种程序设计语言,那么Visual C++中的C++语言不如叫“Windows语言”更合适——Visual C++就是在编程Windows,用到的宏或者Windows数据类型和Windows结构数不胜数,做好心理准备哦!……
  ……我的天,那么长的函数或者结构都要一个字母一个字母写呀!呵呵,按一下Ctrl+J看看发生了什么?我就奇怪了,几乎没看到有书上提醒我们的初学者要这样去做。这可是着实吓跑了不少初学者呢!(至少我就被吓跑过)。器利工善,我们要把IDE用熟哦,微软送的好礼物可不能浪费……
  ……很多书在添加完对新话框类之后都写着要在主对话框类里手动添加对这个新类头文件的引用,何必呢?用添加成员变量的方法添加这个新对话框类的实例,头文件自动引用,一举两得。一句话:尽量多用Class Wizard,能不手写的地方就不手写……


五.virtual BOOL LongWayToGo(void)
{
    //头一次写文章,其中Bug肯定少不了,大家一起来DeBug。
  // 由于是入门级文章,如果有错误,很可能影响初学者学习,恐误人子弟,有错必纠!
  //希望大家多提宝贵意见,帮助我前进,谢谢先!
    //这是虚函数,留待有所得时续以后文。我还有很长的路……
    return TRUE;
}

原创粉丝点击