学习vc的经验之谈

vc c++ 学习之路 专栏收录该内容
9 篇文章 0 订阅
    
  我开始学vc时就是自己一个人在啃,也没什么人指导,当时没有条件上网,资料特别少,在书店里随便买本书就学了,在学vc的过程中走了许多弯路,现在回想起来觉得做了很多无用功。看见大家在这里畅所欲言,有高手也有新入门的ddmm,我也来谈谈学vc的一点“捷径”吧,这条“捷径”纯粹走的是c/c++的路子,不考虑学习其他语言。(我只会c/c++,略懂vb和java,所以对于通过其他语言来切入vc的没有体验,不置评论)
1.必须对c/c++非常熟悉
如果c不熟,可以看清华谭浩强的书,经典之作。(学习时间1到2个月,对函数、指针和链表须滚瓜烂熟)
如果c++不熟,可以看电子工业出版社的《面向对象的程序设计于c++教程》,张国锋写的,既讲面向对象的思想又讲c++的语法,是我见过的讲c++最全最好的书,里面的例子都是精心设计的,值得好好体会。好像清华也出过一本张国锋的,不过我没看过。(学习时间2到4个月,关键在于理解oo概念和c++中的多态,对此应挥洒自如)
2. 最好/应该对windows结构相当熟悉。
如果你很牛,非要从mfc下手来了解windows结构,当然也不是不可以,但我以为从mfc来学习windows有雾里看花的感觉,很容易陷入迷惘中,我吃过这种苦头,希望后来者不要走这条路。
如果对windows结构不熟,可以看microsoft press的windosw95 programing,清华翻译出版了中译本《windows95程序设计》,后来北大翻译出版了最新的版本。清华版的译得不错,北大版的没看过,好坏不知道。这本书讲的是怎么样用c语言编写windows程序,不讲什么mfc或owl的,看过后对windows能有相当清晰的认识。(学习时间3~6个月,gui对象和消息很熟,多线程、dll有一定认识)
3.以上两部为准备工作,ok后就可以continue学习vc了。
学vc看microsoft press的《inside visual c++》清华翻译出版了中译本《visual c++技术内幕(第四版)》比较容易上手,看《技术内幕》一定要看清华,有一本希望出版社翻译出版的第五版技术内幕翻译的太烂了,看希望的不如直接看英文原版。(学习时间4到7个月)
4. 学习vc是为了在windows平台下做开发,所以当你对一上三步都很熟后应该进一步深入学习windows体系才能开发出高性能的windows程序,你也只有在这个时候才会明白为什么说vc是真正程序员用的工具而vb只是玩具。如果你在finish第三步之后已经忘记怎样在windows下用c语言编写一个windows程序,那么你应该把第2步refresh一下。在这一层次应该深入研究windows操作系统内的进程、线程、虚拟内存等知识,还应该了解windows网络程序的设计。这一步推荐的书是microsoft press的《advanced windows》清华翻译出版了此书的中译本《windows高级程序设计(第三版)》,读此书时很多东西有相见恨晚的感觉。机械工业出版社翻译出版的《windows核心编程》是这本书的第四版,结构上重新组织过了,内容没有细看过,应该还可以。网络编程有一本也是microsoftpress的,好像是叫《windows network program》吧,机械工业出版社翻译出版了此书的中译本《windows网络编程》还不错的。
5. 往后你就看自己需要了,有兴趣可以学习com/dcom/com+,这套东西是现在windows系统的核心架构。
用vc学vc两年了,自认为不是什么高手,精通更谈不上了,因为vc的功能实在太强大了。我只想谈一谈自己的学习过程和体会,总结一下自己的编程之路。
一开始也和大家一样,对vc、vb、delphi、java非常感兴趣,但是学什么好呢?毕业设计来了,导师要求要么用vb要么用vc,听说vc难学但很有用,于是狠狠心用vc吧。对于一个对编程一点都不感兴趣的人我想他是学不好的,没有强烈的动力和恒心也很难掌握一门知识。怎么办呢?你总要毕业吧,这就是我的驱动力,而且编程还可以挣钱:),学吧!
对于一个一点都不懂的人来说,下面的知识应该补一补:程序算法和数据结构,c语言的变量、数组、指针、内存、文件、函数等等基本概念和用法,有的人说学c++可以不用学c,我个人认为还是从c学起好,因为c++对c是兼容的。
有了最根本的编程基础之后,我们就可以学习c++的编程思想,就是面向对象(oo),自然对于什么是类、对象、成员、成员函数、构造函数、析构函数、虚函数、模板,最开始可能用不上析构函数虚函数什么的,但要想精通深入就必须掌握(当然可以以后再学)。可以说面向对象是c++对c的一个最重要的扩展,而这也恰恰是我们理解和深入的基础,这部分越扎实以后理解和掌握就越快。
再下来就是mfc了,mfc是一个很好的封装类库,它诚如大家所说对用户屏蔽了很多实现机制,以致很多人只知其所以然,而不知其然。要想知其所以然,当然是学习windows编程,熟悉windows的消息、窗口、api函数。可惜当初我只是为了快,没有深入地学,留下了现在地恶果,对mfc及其机制仍不甚明了。一则mfc已经封装好了,二则自己觉得麻烦和累,一大堆长长的函数名和长长的函数参数把我吓晕了,大家千万不要学我^-^。基本观点就是如果只求使用,不学api也可以,如果想做得更好精通,非学不可。对于mfc,对我帮助最大是www.codeguru.com、程序员大本营、和msdn,有了这三大法宝加上自己的刻苦钻研,一定可以成为大虾。前提是有一定的英文基础,并且已经知道如mfc frame及application的基本运行机制,对对话框、编辑框、组合框、列表框、进度条、标签.......等控件的基本功能都自己试过。我就是从这些开始学习mfc的,另外还学了一些和数据库打叫道的东东,如odbc之类的,我觉得如果仅仅是界面开发,这些东西还是可以胜任的,都是些简单易学的在哪里设置什么属性,添加变量和调用成员函数就行了,不笨的人都会,当然如果你不知道在哪里加又会变得很神秘和难于上青天,夸张了呵呵。这时候你就要查书问别人上internet和帮助网站去找了,具体成员函数的用法可以看msdn。总之对于没有学api耿耿于怀,对于没有了解mfc机制也愧疚于心,因此把自己归于初级水平还是可以的:(
vc是一个开发工具和环境,在你需要的时候你可以边学边用。比如你要编网络方面的东东,好!先去看看别人是怎么做的,有哪些基础,另外你自己也要针对需求学一些网络知识。微软的主页还是不错的,英文好的话可以找到很多很好的东东。你要编关于数据库的程序,请先了解一下数据库的基本概念和它们在vc中的使用。你可能还有各种各样的编程需求,如游戏、小程序、动态连接库、静态连接库,com,activex等等,学习吧,这是唯一的捷径。
我的体会是,边学边用,边用边学。学习先打好一定的基础,磨刀不误砍柴功,看似浪费时间实则受益匪浅。学习要利用一切可以利用的资源,书(包括电子的,不过我很少看电子版本)、bbs、网站(比如vchelp)和高手,勤学好问,搜索不倦,想必你肯定也会成为高手的:)。书我是狂看、乱看、瞎看,主要是没有条件和时间,当时也没人指点应该看那一本好书,原则就是找到自己需要的东西的书就可以拿来翻一番(当然我有图书馆这个资源,学生借本书应该没有问题的)。bbs主要去精华区溜达溜达,里面都会有你要问的一般性问题,如果实在找不到答案,请去codeguru,微软网站和msdn查找搜索,应该可以找到蛛丝马迹。这样还是很费精,如果有高手指点就不一样了,他们做过的话,这可能就是小差一叠,随便说一个关键词就可以帮了你的大忙,可惜高手毕竟是少数,正好碰上做过的高手的概率就更小了。所以各式各样的网站就显得那么的重要,它们一天二十四小时都在,而且可能是很多高手都在,因此在它们身上可以找到一些参考答案。问专家我觉得不错,vchelp更全面和包罗万象。说了这么多,都是自己的胡思乱想了,一点个人体会,不当之处,各位多多批评指正了*^-^*

下面是我的一些建议,如有不对,请批评指正.谢谢!我想现在大部分的初学者都在问,怎么样学c/c++最快?确实,这是个比较重要的问题,但对于初学者来说,最重要的,是你对学习c/c++的恒心!学习c/c++并不容易,我想这是每个初学者很清楚的事情.之所以选中c/c++是因为它的涉及面广,并且强大.但自学想很快掌握c/c++编程那是不太可能的,除非你是个天才,或有专家专门对你进行辅导.如果学习方法和路线正确,的确可以提升学习的速度和效率.下面是我对怎样学习c/c++的一些看法.总共分三步.第一步.系统的学习c/c++语言,(不要涉及mfc.)并且学习操作系统,对操作系统的运作有清楚的概念.这一阶段,可以把重心放到研究算法上.(估计时间将会是一年.如果有人帮助的话,可能会减短.)第二步.开始学习mfc,并选择发展的方向.一个程序员,很难做到各方面的编程技术都精通,所以要有选择的学习你感兴趣或有钱途的技术发展.如果做游戏,则可放弃对于mfc的学习,因为游戏不需要mfc.(估计时间将会是半年.)第三步.开始对各种技术的涉及.因为本人还没有考虑到这一步,所以,不做多提,但如果你已经学到了这一步,也不用我再废话了.(时间未定.)当然,以上的时间估计,是在假设你努力学习的情况下定的,并不具有实际意义.对于书籍的选择,有很多人想用电子书.我提议,如果是初学,最好不要用电子书,来学习.还有些初学者对于编程工具不知如何选择.我想无论是c或者是c++,vc都是一种不错的选择.如果机器配制不高,可以使用版本低的vc.vc1.52版本是个不错的选择.

visual c++与delphi/c++builder之比较

作者:紫云英

jasoncrazy@sina.com http://jacafe.webprovider.com

如果有什么看法,请大家在在线讨论中进行讨论。

写给站长的话

“visual c++与delphi/c++builder之比较”这个话题也许有些无聊,但既然网上有那么多的人在争论这个话题,也许这样一篇文字也不是全无价值。我觉得你的网站”学术气氛“比较浓,新开的聊天室里人们也比较友好。(也许因为大家都为了同一个目标走到一起吧。^_^)我就把这篇可能有争议的东东发给你了。本文欢迎讨论,也欢迎批评,从语言到内容。
正文
  经常看见有朋友在csdn等论坛发帖子问visual c++和c++builder这两个重量级开发工具孰优孰劣(更多的是问visual c++与delphi孰优孰劣)。本文就试图从技术水平、易用性、稳定性、发展前景等对它们进行比较分析。

  由于delphi与c++builder同为inprise公司产品,共享集成开发界面(ide),而且使用同一套vcl框架(这一点最关键),它们带的调试器、pvcs/teamsource团队开发支持、数据库引擎及企业版中集成的其它高级功能等都是相同的,所以本文将其与c++builder归入“同一阵线”。我在网上见到一些delphi程序员认为c++builder与vc比较接近,这是个误解。事实上,delphi和c++builder除了使用的语言不同,其余几乎都相同。为了避免话题转移到c++语言与 pascal语言(即delphi所用的语言)的比较,下文主要对比分析visual c++与c++builder。

  首先,从它们的应用程序框架(application frame,有时也称为对象框架)进行比较。visual c++采用的框架是mfc。mfc不仅仅是人们通常理解的一个类库。(同样,delphi和c++builder使用的vcl的概念也不仅仅是一个控件库。)你如果选择了mfc,也就选择了一种程序结构,一种编程风格。mfc早在windows 3.x的时代就出现了,那时的visual c++还是16位的。经过这些年的不断补充和完善,mfc已经十分成熟。但由于原型出现得比较早,mfc相比于vcl落后了一个时代。尽管微软对mfc的更新没有停止,我也经常读到持“只要windows不过时,mfc就不会过时”之类观点的文章,但就象inprise(原borland)的owl框架的淡出一样,mfc的淡出也是早晚的事。如果mfc青春永驻,微软的开发人员也不会“私自”开发出基于atl的wtl呀。当然,wtl的地位不能和mfc比,它并不是微软官方支持的框架,封装的功能也相当有限。但至少也反衬出了mfc存在的不足。

  我以为,最能体现一个应用程序框架的先进性的是它的委托模型,即对windows消息的封装机制。(对windows api的封装就不用说了吧。大同小异,也没什么技术含量。如果高兴,你也可以自己写一个类库来封装。但对windows消息驱动机制的封装就不是那么容易的了。)最自然的封装方式是采用虚成员函数。如果要响应某个消息就重载相应的虚函数。但出乎我的意料,mfc采用的是“古老”的宏定义方法。用宏定义方法的好处是省去了虚函数vtable的系统开销。(由于windows的消息种类很多,开销不算太小。)不过带来的缺点就是映射不太直观。好在较新版本vc带的classwizard可以自动生成消息映射代码,使用起来还是比较方便的。但和vcl的委托模型相比,mfc的映射方法就显得太落后了。而c++builder对c++语言进行了扩展,以便引入组件、事件处理、属性等新特性。由于功夫做在编译器级,生成的源代码就显得十分简洁。但是由于扩展的非标准特性,使用vcl的c++builder的源代码无法被其它编译器编译。而mfc的功夫做在源代码级,虽然消息映射代码较为复杂且不直观,但兼容性非常好。只要你有mfc库的源代码(随vc企业版的光盘提供),你的mfc程序理论上用任何符合ansi标准的编译器均可编译通过。c++builder 3以上版本可以原封不动直接编译visual c++程序,很多人认为这是c++builder的兼容性好,实际上很大程度应归功于mfc的兼容性好。微软辛辛苦苦用标准方法写mfc,却为对手制造了方便。不知他们作何感想?而因为c++builder对语言作了扩展,vc不能编译c++builder的程序。看来在这方面vc要输给c++builder了。而且vcl所支持的组件、属性等都是mfc所缺乏的特性。虽然vc也能支持组件,但要通过appwizard先生成一个“包裹”类(wrapper),不如vcl来得简洁。有很多人使用c++builder就是冲着控件板上那一大堆组件来的,vc虽然能使用的组件也很多(也许不比c++builder少),但由于不方便而对rad程序员没有吸引力。

  c++builder的vcl比visual c++的mfc先进的另一个特性是异常处理。但令人啼笑皆非的是,它的异常处理代码有bug,有时会无端抛出异常。不知道在最新的版本中有没有改正了。而vc的框架mfc也不是一无是处。经历了那么多年的发展和完善,mfc功能非常全面,而且十分稳定,bug很少。其中你可能遇到的bug更少。而且有第三方的专门工具帮助你避开这些bug。如此规模的一个类库,能做到这一点不容易。不要小看了这一点,很多专业程序员就是为这个选择vc的。而c++builder的vcl的bug就相对较多了,而且有些它自己带的示例程序都有错误。看来inprise还有很长的路要走。

  再从它们的易用性比较。vc有classwizard、sourcebrowser等一系列工具,还附带visual sourcesafe、visual modeler等强大的工具,易用性非常好。(vc自带建模工具visual modeler,也许说明了它才是工程级的开发平台,与c++builder的定位不同。)它所带的msdn这部“开发者的百科全书”更是让你“没有找不到的,只有想不到的”。而且它的autocomplete之类小功能也比c++builder要体贴。c++builder的新版本虽然也提供了这一功能,但它的提示要等好几秒才出来,有时你不经意间把鼠标停在某一处,也要等硬盘响好几秒,这可是在566mhz的赛扬ii上呀。不要笑我琐碎,有时一个开发工具的成熟和易用,就是从这些小地方体现出来的。c++builder作为rad工具,理应强调易用性。但与vc相比还显出不成熟。这是不应该的。

  再来看看它们的可移植性。inprise正在开发c++builder和delphi的linux版本,代号为kylix。也许通过kylix,用vcl构架编写的windows程序向linux移植成为可能。但这只是可能。因为在目前inprise的兼容性工作做得并不好。c++builder可以编译vc程序还要多谢微软使用标准方法写mfc,而它自己各个版本之间兼容性却不太好。低版本的c++builder不能使用高版本的vcl组件(这还别去说它),而高版本的c++builder竟然不能使用低版本的vcl组件。真是岂有此理,我很少看见软件有不向下兼容的。如果windows 98不能运行95的程序,windows 95不能运行3.x的程序,win 3.x不能运行dos程序,你还会用windows吗?如果不是c++builder的其它某些方面太出色,光是这个向下不兼容就足以让我抛弃它。而且虽说通过捆绑编译器,c++builder可以编译delphi的 pascal代码,但c++builder仍不能使用为delphi开发的vcl组件。所以一个组件有for d1/d2/d3/d4/d5/c1/c3/c4/c5这些不同版本是常有的事,而且随着c++builder版本的升级可能还会增加。希望inprise能先解决同门兄弟的兼容性问题。而微软的vc就没有这类问题。mfc1.0的程序也可以毫无障碍地在vc6.0下编译通过。

  再来看看它们的前景吧。实际上,技术的进步在很多时候是此消彼长的。当初borland的turbo c和borland c++几乎是唯一的选择。微软的quick c(现在还有人知道这个产品吗?)和microsoft c/c++从来也没有成为过主流。但borland c++又流行了多少年呢?不久就被新崛起的microsoft visual c/c++压下去了。现在的c++builder又有后来居上的态势,如果稳定性再提高一些,bug再少一些,有希望成为主流。但inprise的总体实力不及微软,这也是无可争议的。从c++builder 5的release notes中的known issues部分,以及它们的帮助文档的规模和质量都可以看出。(哪个同类产品的帮助文档能和msdn比呢?)inprise公司应从netscape吸取教训,不要让c++builder成为第二个netscape communicator。(communicator也是一度技术领先,甚至曾占据了大部分的浏览器市场,但似乎后劲不足,而且 6.0 pr1、2中bug多多,现在被ie压得抬不起头。)c++builder是inprise的旗舰产品之一,前景应当还是比较乐观的,而且inprise已经在向linux进军了,而微软还迟迟没有动作,难道非要到linux成燎原之势(或许已经成燎原之势了)才会奋起占领这个新兴市场?似乎他们对linux的态度与几年前对互联网的兴起的反应迟缓有些相似。但后来......唉,真希望inprise不要步netscape的后尘。c++builder是一个很有前途的开发工具。遗憾的是,inprise公司delphi的创始人已经跳槽到微软去主持visual j++项目了。但愿对inprise冲击不会太大。微软的visual c++的前景又怎样呢?visual studio 7.0不久就要推出了。不知能不能在保持稳定性的同时在技术的先进性上赶上c++builder。另外,这一版本将加强网络开发的特性。看来微软虽然被判解体,开发实力可是一点没打折扣。

  就技术(主要指应用框架)来说,c++builder目前领先于visual c++。但多多少少的不尽人意之处让我对inprise“想说爱你不容易”。而vc尽管发展到今日已十分完善,但mfc框架已是明日黄花了。如果不使用mfc,目前又没有合适的替代品。wfc是支持组件、属性和事件的,但那是visual j++里边用的;atl也很先进,但是用来进行com/activex开发的;基于atl的wtl也不错,可惜是非官方作品,也未必比vcl先进。微软最近提出了c#(读作c sharp)语言方案,但那属于和java同一类的东西。看来是金无足赤啊。根据你的需要做选择吧。实际上visual c++和c++builder也不是单单竞争关系。它们在许多领域并不重叠,甚至是互补的。到底怎样取舍,要根据你的项目特性决定。如果你开发系统底层的东西,需要极好的兼容性和稳定性,选visual c++吧。你可以只调用windows的各种api,不用mfc。如果你写传统的windows桌面应用程序,visual c++的mfc框架是“正统”的选择。如果你为企业开发数据库、信息管理系统等高层应用(“高层”是相对于“低层/底层”而言的,不是说技术高级或低级。)而且有比较紧的期限限制,选c++builder比较好。如果你用的语言是 pascal,delphi是唯一的选择(如果gnu pascal等免费编译器不考虑的话)。如果你原先用delphi( pascal语言),现在想改学c++,应当先用c++builder。熟悉的界面和相同的框架会让你的转轨事半功倍。

  另外,虽说mfc已显落后,但不是说它不值得学。事实上,不学mfc就等于没学vc。利用mfc框架开发程序仍然是目前开发桌面应用的主流模式,而且还会保持相当长的时间。即使你不使用mfc框架,花点时间学习一下mfc的封装机制对你熟悉c++的oop机制和windows底层功能也是很有好处的。

  以上意见仅供参考。

我在工作中,接触到印度软件公司开发出来的软件:整个体系架构非常清晰
,按照我们的要求实现了全部功能,而且相当稳定。但是打开具体的代码一看,
拖沓冗长,水平不咋样。我们自己的一些程序员就有怪话了,说他们水平真低。
但是!印度人能够把软件整体把握得很好,能够完成软件,并得到相当好的设计
文档。而中国人在那里琢磨数据结构、算法,界面人员就还没编码就想着是outl
ook式的还是visualstudio式的界面。到最后就成为code高手,对某些特定的开发工具精通,但是就是不能保证能够把一个软件稳当、完整的开发出来。
  举个简单的例子:软件中需要一个列表,用来表示我们处理的事务。该类表
在业务繁忙的时候将变得很大。中国人就用双向链表,抱着《数据结构》书在那
里写链表的类。印度人开了一个大数组,然后就开始干。为什么印度人不用链表
,他们说:1、你们给出的设备(小型机),最少具备512m内存,浪费一些没有什么。2、数组方式访问方便、效率高。看出了一拿到东西就吭哧吭哧作code,和好好进行软件分析的不同了吗?
  正好前几天我有几个同事从印度回来和我们交流,那家公司是cmm4级公司.我
感受的几点:1,流程重于项目2,qc(就是qa)独立于研发部门,专门检查研发部门的
开发流程是不是按照既定流程走.如果qc觉得流程不对,他会直接上报高层,项目
定就此停止.3,所谓的项目经理(pc)一般也是从编码人员升上来的,并不是所谓的
不懂技术,一般都至少有四年以上的经验4,pc主要就是制定开发计划,负责协调,填写各种表格.5,所有的东西(包括草稿)都有文档.6,详细文档要求达到只有这个文档就可以编码的程度,一般写文档时间占60%,编码时间极少7,有各种详细的review(同行评审),项目组内的,项目组之间的,客户的...8,计划很详细,的确能达到小时级,但是实际情况还是误差比较大,所以他们也有加班.先学习uml和rose以及ru p,不要总是要找着证据。在中国的软件开发水平下,很难给你一个好的例子,ok?中国人总是要看到一个东西有了试验田,而且稻子长得好,才换稻种。要知道在国外上述的软件开发模式的应用,大可以看看rational网页上的story。justdoit! 一句话,中国的软件开发水平低得很。赶不上印度人,印度的软件公司可以
让高中生编代码,它的软件工程水平可想而知。当然,你如果是个很牛的程序员
。估计够呛,因为中国的气氛中,很牛的程序员都很难接受软件工程的。你可以
测试一下自己,看看自己适不适合现在学习软件工程:1、你是不是不能忍受一个
编程序不如你的人做你的项目经理?2、你是不是觉得你的老板对客户吹牛皮、夸
大自己而感到不舒服?3、你是不是一个拿到一个需求脑袋里第一念头就是如何实
现的人?4、你是不是很崇拜stallman,linus,很讨厌microsoft?5、你是不是曾经在深夜编码的时候,突然感觉到一种乏味,对code的生涯感到一种无趣?以管窥豹──印度神话作者:"kino"我们现在处于深深的自卑当中,感到中国的软件工程水平的低下已经是牵涉到民族劣根性的问题了。1、他们的软件教育水平:我们招聘印度人,给应聘者出了一份与国内差不多的试卷,有基础概念和编程题目。等到他们完成后,我们这些中国的自认高手惊呆了!他们的编程题目简直象是抄袭的?nbsp;?nbsp;程序结构,注释,变量命名就不说了吧,全部都是极其类似!反观中国的牛人、高手,每个人有自己的一套。到了新的岗位,先把前任的程序贬损一通,然后自己再开发更多的问题的代码来代替。我的公司统计,一个软件中有4个以上csocket版本,每个人都觉得别人做得差,自己再搞一套。中国人 ,就是这个样子,还会辩解说“我们这样有创造性”。
  其实软件发展,早就走过了求伯君那个编码英雄的年代,程序员已经是个坐
办公室的蓝领了。你具备拧好一个螺丝钉的能力就可以了。code是最低级的事情
了。2、他们许多公司的项目经理根本就不懂技术。中国的项目经理如果不能在技
术上压服下属,那么下属将与他搞鬼,越是高手越喜欢搞鬼,根本不知道作软件
的终极目的是从别人兜里掏钱,而在内部搞不团结。技术高手都会纠集一些对他
技术上崇拜的菜鸟,与管理层作对。而印度的软件经理根本就不懂正在做的东西
,许多甚至直接就是mba,或者是领域专家(工业设计、地理专家等),而不是编码 的专家。但是却能够领导大群素质良好的程序员把工作做好,没有内部不团结的情况。许多印度的程序员加入一个公司很长时间,都不知道自己整天编的代码是干什么用的。给他们的任务可能就是一个函数的声明以及该函数要实现的功能。
我们呢?3、他们的编程人员的流动率达到30%!他们的编程人员流动率(包括内部
项目之间的流动)高达30%,可以想见他们的文档水平如何。他们的产品不依赖任
何一个人,谁都可以立即辞职,产品的开发还是会正常进行。而中国,是老板怕
总工。技术骨干拥兵自重,抗拒管理。任何制定好的计划,都有可能被技术人员
推翻或者跟你消极怠工。4、他们的开发计划能够做到小时级别。如果一个印度公
司的项目经理没有上班,那么他的下属将可能不知道作什么。他们的计划一般都
定到天,每个基层开发人员每天的工作量就是8小时。而我们能够给出月度计划的 公司就很少,而给出的月度计划要么不可能实现,要么就可能被取消。开发人员 被初略的给个任务,他在月初,可以慢慢琢磨是做成什么样子,然后上上网,聊聊天。到了月中和月末,就开始熬夜编码。
  看到每年,从各大高校不尽牛人滚滚来,我们是不得不要召人,同时又是
不抱希望。我公司现在有意以后将核心软件开发外包给印度公司,中国人?做做
界面吧,中国人做界面会极尽奇技淫巧,搞得花里胡哨的。btw,我公司非外企,
大家不要误会我们有什么种族歧视。但是我们现在就是对自己歧视,自卑得很。
中科院那么多研究院,连个能用的操作系统都搞不定。北大开发一些东西,比如
什么青鸟case,就是给一帮人评职称的。杨芙清院士整天搞来搞去,搞出了什么
东西?b大,t大的人最难管理,牛得看不见人。中国的程序员骂微软,追linux是全世界最狠的,可是我们除了汉化linux,做了什么东西出来。cde是瑞典人写的,linus是芬兰的,gnome是墨西哥人写的。哎,我们曾经是多么的瞧不起印度人。

现在,越来越多的人开始学习vc了,如果能精通vc,就象精通了九阴真经一样,可以天下无敌
了。我想很多vc爱好者都有这种追求武学至高境界的心理。
我就是抱着这种心理开始学习vc了,至今已近三年了,其间经历过无数的困惑和磨难.....
可是我最终没有放弃,到如今已经有一定的功力 :)
以下就把我修炼中获得的经验与大家分享 ,一起提升修行!
首先要搞清楚vc能干什么.很多人只是听说vc是最好的开发语言,便去学习,就象大家听说辟邪
剑谱厉害,便都去抢着学一样,都是很盲目的。其实语言并没有好坏之分,我在用c之前,一直
觉的basic 是最好用的语言。现在在windows平台下编程,vb和delphi可以满足大多数的应用
,而且速度不会很慢。使用vc主要是用来开发系统软件和大型工具软件以及开发游戏。

现在比较流行的操作系统主要是windows系列和unix系列。这些操作系统都是复杂的多任务系统
,在设计操作系统的时候就提供了一大堆应用编程接口(api,通常是c语言的函数),编程者
使用c语言调用这些api便可以开发该系统下的应用程序了。 这与dos时代的 编程接口是不一样
的,那时侯的函数库是由开发环境提供的(如turbo c) ,不具有很好的封装性和设备无关性。

每当新版的windows操作系统发行,便会提供一个相应的plantform sdk(软件开发包),开发者
可以用sdk 编译c程序。在没有vc和vb的时候,windows程序就是用sdk编出来的。

vc跟这些乱七八糟的东西有什么关系呢?

其实vc的核心就是mfc,mfc是个c++类库,就象结构化程序设计时代的c语言函数库一样 ,
给程序员提供了丰富的编程接口,简化了程序的设计。 而mfc就是直接把windows的c语言编程接
口api函数用c++的类封装而成! 这样既实现了面向对象的编程思想,又直接使用了windows的原
始编程接口,代码的效率是 最高的!

当然很多人不适应c++的编程方法,他们依然使用c语言编写winmain()和窗口 过程,
vc同样为他们提供了很大的便利,因为vc可以很方便的管理资源和代码!

明白了以上关系,学习vc的步骤应该也明确了:首先要学习c语言(如果你还不会的话)!
这是非常重要的。如果c语言不懂的话,一切都无从谈起。懂了c语言,你就可以研究
windows系统的工作原理和windows应用程序的工作原理了。这也非常重要。vc只能用来
开发windows系列操作系统下的应用程序,如果不懂windows下的程序的工作原理就去写windows
程序,那也是比较盲目的。主要是体会一下windows的多任务和消息驱动机制。
然后就可以使用api编程了。这个过程是比较痛苦的,因为一切都变的复杂起来,你会遇到很多
新的方法和概念!比如消息队列,消息发送,窗口过程,gdi,设备上下文,句柄,线程,
消息循环,绘图对象......当你可以熟练的使用c语言进行windows程序设计了,你可以尝试
面向对象的方法了。

这时你需要学习c++语言(最好是ansi c++),这不是浅尝则止,你要深入的理解c++语言的
精髓!经过一定的努力,你可以用面向对象的思想去考虑问题了,这时一切都水道渠成,你可以
很自然的使用mfc来编程了,有时你觉的mfc的类不好用,你可以从头作自己的类,而不去继承
mfc!

我每天要收到很多朋友的来信,有很大一部分朋友都询问学习vc的方法和途径,还有相当一些朋友对c/c++语言的前途感到担心,总觉得学习c语言在开发效率上没有赶上其他的开发工具,今天我就借“开发有感”这个栏目谈谈我的一些浅见。

首先来讲我使用c/c++语言开发已经有六年多的时间了,在使用c以前我是用汇编语言的所以我转变到c时就很自然和顺利。但就目前的情况来讲大家都不再需要学习汇编语言了,所以在进入c语言的世界时就会遇到一些困难这主要表现在指针的使用上。由于没有亲身的经历所以我很难想象这个困难有多大,但我在这点上的建议就是开始时尽量避免使用指针,至于一些必须使用指针的c函数只要记住用法就可以了。当然这种情况不会持续太久,因为但你对语言的熟悉程度增加后自然也就会有使用指针进行开发的需求,那时候如果对指针的用法还没有深刻的了解再学习也很容易,这就是主动学习与被动学习的区别。

其次很多朋友都问我如何学好vc,我想对于初学者首先应该掌握的是c/c++,vc只是c/c++的一种开发工具。如果是刚接触c/c++则最好不要使用vc做为开发工具,因为vc的各种特性会分散你的注意力。我建议使用turbo c++或boland c++集成平台做为开发工具,这两个平台虽然都是dos下的但是对于初学者真是在适合不过了(当然msc也可以)。

此外刚开始时开发一些字符界面的程序(也可以说是dos程序,console控制台程序)来加深对语言的熟悉。在掌握了c/c++语言后就可以开始利用vc编写基于windows的窗口程序了,这时候就是一个转折点,因为这时候windows系统是基于消息机制的,这和单流程的程序有些区别。所以这时候也不要急着去写学习开发和写代码而是应该先对windows系统的消息机制做一些了解然后才开始学写程序。其实我的主张是一开始用基本的sdk形式(也就是用winmain函数的那种,不用mfc功能)来开发几个程序做为入门,然后再使用mfc来开发程序。mfc开发的方式与sdk开发方式的最大区别就是mfc隐藏了很多细节,这是优点也是缺点对于初学者来讲我认为是一个缺点,所以我建议初学者先用winmain的形式写程序,即使不亲手写也可以看几个基本的程序来加深认识。

上面这些话都是为了说明一个问题“磨刀不误砍柴工”,学习开发一定要打好基础,还有一点就是一定要想办法激发自己的学习积极性让自己进入一个主动学习的境界。

下面我再分析一下c/c++与其他开发语言之间的差别,c/c++,( )pascal,java,perl都是我认为比较通用而且是比较好的开发语言,但c的语法比pascal自由,pascal开发比其他结构化强,但这一点上c语言也能够做到。至于java和c++非常类似而且能够跨平台这一点上是很大的优势,但java开发的程序效率差。perl也是一中我很喜欢的开发语言,虽然perl没有面向对象的特性(至少我认为它的面向对象很糟糕)但我喜欢perl中自由的语法和各种时常让人感到惊奇的用法。

如果说到windows下的可视化开发工具现在大家接触得最多的就是vc,vb,delphi,bcb,一些可视化开发的java。其实我觉得vc并不能完全算是一个可视化工具,这表现在vc中编写代码还是占了开发工作的大部分时间。而其他的可视化工具中都在界面设计中耗费了大量的开发时间。我一直使用vc的原因就是因为我能够一直将注意力集中在软件功能开发上而不是界面设计上。我认为这样能够在开发的过程中更加自由和有更多的控制权。而且这种情况下产生的代码维护性更强。举个简单的例子,在维护vb代码时如果没有一份详细的说明和流程就会使维护变得不可能,我想其他的基于界面开发的工具都会或多或少的产生这样的问题,因为在开发过程中开发工具将一个完整的流程分离成为多个部分,在开发完成后这些部分就很难统一起来。

选择什么样的工具的前提是你的开发目标,如果你希望开发一个很大的系统你就不应该选择面向基于界面开发的工具,但你可能会选择vb来开发前端的客户软件,而后台使用vc来实现。

对于一些并不是很复杂的软件来讲,界面和操作方式可能是非常重要的,所以选择vb,cbc都可以缩短开发时间。这时候选择vc就有些不智。

所以我认为使用vc开发的朋友应该将更多的注意力集中在实现软件功能的流程上,多从整体角度看问题。我想这一点来说其他的可视化开发工具是很难达到的,因为vb,cbc等开发的程序在很大程度上都是用各种控件“堆”出来的,这会在后期的维护升级过程中带来很多的不便,例如要替换掉一个控件就可能会对整个程序的结构产生非常大的影响。

最后我想说的是每种开发工具都有它的价值,也各有优缺点,更重要的是如何根据具体的任务选择合适的工具并利用这些工具来完成工作。





接触编程有两年多了,也算积累了一些经验,希望能给刚入门的朋友一些帮助,文章仅代表本人观点,如有错误之处,还请多多包涵。
1.我该学什么语言?
vb、vc、delphi、java……面对各种各样的编程语言,你是不是被弄昏了头脑呢?该学什么?“学vc吧!”许多高手说。并且还举了很有说服力的例子:“学vb只要两个月,学vc要一年,如果先学vb再学vc,所用时间仍然是一年,但学了vc再学vb,所用时间将不到两个月。”这句话没错,的确是这样的。但是刚入门的初学者都能学vc?把每个人都看得这么高?一些初学者把vc当成自己的入门语言,结果能学到最后的只有少部分人!我们不能奢望所有初学者都是在十分熟悉windows的情况下才开始接触编程的,实际上,很多人就是在学习编程的过程中逐渐深入了解系统的,要是所有人都选择vc作为“入门级语言”……
初学者应该根据自身情况来选择语言,如果你刚开始接触系统,应该去学vb,因为vb很好学,基础最重要;当然,还有delphi,它介于vb与vc之间。除非你比较熟悉windows,否则别急着学vc,你会因此神经衰弱的。

2.切忌同时学习多种语言
有没有试过同时学英语俄语德语波兰语法语日语?最后八成会变成鸭子。学编程也一样,如果你才高八斗机敏过人玉树临风,那么随便你同时学vc、vb、delphi等等等等,没人会拦你,但如果是初学者呢?去做鸭子吧。同时学这么多种语言还不如踏踏实实学好学精一门适合自己的语言!初学者往往什么语言都要去了解一下,更有甚者连一些概念都不熟悉就什么都学,面对他们,我都要自愧不如了,但我还是要劝他们一句:一样一样的学,没有人能一步登天!别以为同时学多种语言就很“光彩”,当心最后仍是七窍通了六窍。
无论学哪门语言,都要把它学好再想其它,别“花心”,如果你是学vb的,至少要熟悉vb编程并且能熟练使用api的时候,你才应该去学其它语言,学vc更要注意,否则最后只能“无所不学,而一无所知”,只学一种语言时遇到困难还是好处理的,但是同时学这么多种,你保证都不遇上问题?小心几种语言的问题一起来压你!

3.要有主见
许多初学者爱跟着潮流走,外面流行什么他就跟着做什么(追“猩”族?)今天流行vb他就学vb,明天流行delphi他就把vb忘了,再到vb.net、c#……人云亦云,随波逐流,“专家”说什么语言好他就投奔什么语言,“走在科技前沿”,但是到最后又能学到什么?不仅丢了西瓜,连个绿豆都没拣着。这年头“世界变化快”,我知道,但是它怎么变就随它去,总不见得把你变成今天张三明天李四吧?“月亮走,我也走”的思想要不得,别管外面流行什么,如果不是大众需要,你只管学好你该学的语言就行。

4.别看轻其他语言
经常有人说“xx语言差,学了没前途!”要是让我评价一句,恐怕是你没前途吧?你凭什么说它差?没有一种语言是十全十美的,即使它再“差”,只要它还没有被外界宣布完全淘汰,它就有存在的理由!曾经有人对我说:“我的老师经常教育我,vb太差了,所以我要把以前学过的忘掉。”且不说这家伙随波逐流,单是他老师就够酷了,呵呵,不知道他的老师是圈子里的哪位资深专家呢?只怕是个三角猫吧!vb虽然存在一些局限性,但它的语法很好理解,数据库编程很方便,配合api也能完成一些复杂工作,这就叫差?多少个优秀程序不是用vb这个“没前途”的语言写出来的?多少个程序员不用vb?你看见他们没前途了吗?

5.不可缺少的教材
虽然从古到今一直有“尽信书,宁可无书”的遗训,但是我们可别因此“无书”哦!也许你天资聪明,自学电脑不用教材,但是自学电脑可以凭现象和经验,学编程能凭空摸索?连变量、过程等概念都不知道,还能看懂for(i=1;i<50;i++)的意思?要学编程绝对不能少教材资料,如果连这都不舍得买,那么你最好别学了。还有一点,关于网络教程,我个人认为它太过于零散了,即使是一本完整的电子书也尽量不要看(除非实在买不到),难道你要一边写代码一边alt+tab?我宁愿慢慢翻一本书,也不愿盯着屏幕看半天!现在市面上的教材参差不齐,光买一本是明显不够的,基础的、高级的都要买回来慢慢研究,至少也要3本吧?市价低于20元的书最好不要考虑了,看看它的厚度!书本的厚度通常与含金量是成正比的(厚厚一本垃圾?你衰),最好选一些比较常见的出版社出版的书籍,尽量别买少见的,质量没得保证!我的一个同学就买了一本20元的垃圾,整本书连个完整的例程都没有,还大言不惭“基本入门”,误人子弟啊!现在那同学看的是我借给他的清华大学出版社出版的《中文 visual basic 6.0 傻瓜书》。
一个小窍门:如果你不知道该买什么书,最好找个高手一起去,让他帮你选本好的,如果你身边没有高手,那就找厚点的!或者书名带有“疑难解答”或“api”,这些书质量一般都可以。

6.关于英语
由于大多数语言的母语都是英语,这就导致了一些初学者望而却步,但是英语对于编程很重要吗?实际上编程需要的英语很少,都是比较基础的词汇语法,它和一般的英语不一样,即使你连一篇英语文章都看不下去,但只要有点英语基础的,你就不用怕“不会”!(当然前提是一些基础词汇如if、for、next、while、include等必须看得懂,否则先去补习一点英语再说)就算英语再好,没学过编程也不会看得懂程序源码,难道没学过编程能知道strcomp等于string compare?学编程与英语水平无关,我们学的是编程而不是英语!

7.编程大忌——组装
vb最大的方便之处是它和activex能很好组合,ms和第三方厂商为vb开发了许多activex控件,为初学者提供了很好的学习机会,但是一些初学者却满足于此,做一个程序用了一大堆别人的控件,加上一点微不足道的代码,就以为学会了编程,却不知这样根本没有入门!activex是别人做的东西,写了多少代码才到你用的!别幻想activex无所不能,从另一个方面说,它正是vb的累赘!会用activex又有什么了不起?api会吗?复杂点的代码会写吗?会自己开发activex吗?做一个用到通用对话框的程序,只会用comdlg32.ocx的showopen方法,却不会用getopenfilename这个api来打开,而且使用activex会让你的程序挂上一大堆ocx,加重程序开销,更要命的是activex会导致许多不可预料的错误,如控件过期、控件没有注册等,任何一个错误都会让你的程序无法运行,许多初学者搞不清activex与程序文件的关系,发布软件时忽略了程序需要的activex,导致程序在其他环境无法运行,我早期发布的iis cracker就因为不得已用了两个activex而成为我最头痛的事(有些东西不用activex做不出来,没办法)如果一个程序出现控件错误,
而作者又没有提供相应的控件,那么我要做的就是把这个程序删除!在此提醒各位一句:写程序不是组装!别以为用vb画个窗体,加几个activex就学会了编程,你根本连编程的门槛都没入!

8.循序渐进
许多初学者刚开始接触编程就急着写一些较高级的代码,却忽略了最重要的基础,他们也许热情高涨,也许有心学编程,但是却没能静下心学编程基础,这将导致付出时间多而收获少的后果,举个例子吧,你刚入门,连一个简单的程序都不会做,就算我给你个木马程序的全部源代码(谁要独裁者的代码?呵呵)你又能看懂多少?学习要一步一步来,没有扎实的基础,谁都不可能写出好程序。当然,学习的方法也不能不提,尽管学vb、delphi不需要专门学basic、pascal,但是学vc就不能不学c/c++了,否则你会前进得很辛苦!别信什么“速成班”、“24小时学会xxx”,那种是喂猪的!经验要靠练习来积累,不能只学理论,编程不是让你纸上谈兵的,平时不多练习,别想写出什么好程序!学习时要从简单做起,先熟练简单编程,在这个基础上要写出高级点的程序就不困难了,遇到难题别被吓着,努力克服它(除非是由于语言的局限性而做不到的),如果暂时做不出来,可以先搁一段时间,但别把它忘了。等你学到更高一层的技术后,再回头研究过去的难题,将会事半功倍。

9.在学好一种语言的基础上,继续学习其他语言
别误会,这不是让你同时学习n种语言,而是在学好一种语言后,继续学其它语言,例如学好vb后,可以改学c、delphi等,不要守着vb不放,多一种语言就多一条出路,如果你觉得自己学得够好了,那就别犹豫,马上改学另一种语言(喂喂,你怎么把vb的书给烧了?不是让你放弃已经学会的语言啊)还是那句话,切忌同时学习多种语言!如果你对自己掌握的水平没信心,最好还是别想其它了!
多学几种语言的好处是显而易见的,一来可以做到几种语言同时配合,二来对扩大知识面也有很大帮助。
注意:学vb/delphi后马上学vc是错误的,你必须先学会c!

10.用多种语言配合,多利用各种语言的长处
前面已经提到过,各种语言都有短处,但是它们一般都能互相弥补,vb的局限性导致一些复杂工作不能实现,vc强大,但是界面难做(个人想法),这时你可以用vb写界面,vc写dll供vb调用。例如vb的指针、位运算操作麻烦且执行速度比较慢,在一些特殊应用环境里,就必须用vc写dll了,其实写个dll并非难事,甚至比写个vc的mfc程序还要简单。

11.多收集信息
学编程不能闭门造车,有些知识是书本上没有的,应该多使用搜索引擎,多搜集研究前辈们做的源代码,吸收一些新知识和优秀思路,有助于提高编程水平,另外还应该参与一些论坛的讨论,积累一些经验。

以上是我在学习编程的过程中积累的一些方法,仅作参考,希望大家共同进步。 
 
  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值