教学了C++,想学习做应用程序,看了MFC后,一头雾水啊。求高手们谈谈经验。不胜感激!!!

解决方案 »

  1.   

    试着做项目
    然后一步步的慢慢了解
    深入浅出MFC
    最后完全了解
    坚持
      

  2.   

    慢慢来,不急。但如果楼主不是必须学习MFC的话,那就别学了。
    学Objective-C和C#有前途的
    就算Windows C++开发不一定要用到MFC是吧,楼主可以去看看windows程序设计
      

  3.   

    感同身受啊,正在看《深入浅出MFC》
      

  4.   

    看《深入浅出MFC》,然后做项目,然后再看《深入浅出MFC》。牛逼都是熬出来的
      

  5.   

    复杂呀,问题的关键是MFC还没搞清楚,老师就让自己做东西。
      

  6.   

    一位仁兄说的“程序员写的程序不是‘算法+语法',而是要能够满足用户需求的工具”我非常赞同。要想达到用户需求就必须从各个方面来考虑,如业务、人机交互 、效率等方面,而不只是一个语言(语法)的问题,语言(语法)只是工具,只知语法不知其它那就真是编程机器了!编程机器在印度高中生经过几个月培训,按照严谨的软件工程方法,加上较高的管理,就可以胜任了!大家相信吗,我是相信的! 谈到这里我就不禁说到了国内教育界最近在探讨的问题“计算机科系的毕业生特别是本科大专生到底出来干啥、如何适应社会要求”。大家也看到了很多计科系大学生说“精通N种语言,熟悉N种工具”,不知道学校里的其它知识到那里去了,甘愿做编程机器,浪费了人民的纳税 ,干高中生能干的事,比较可惜吧!在国内现在就是这样了。国内的软件开发业到底是需要那些人?如果仅仅是编码机器,那我估计中国硅谷还是做梦去吧! 社会似乎也需要编码机器,翻翻招聘广告,做应用开发的都要求精通某某语言,熟悉某某工具,很少需要懂管理懂软件工程的人。以我个人一点偏激的想法,民族软件产业要腾飞,更需要的是能管理使用编码机器的人,即管理人员。国内软件产业编码机器已经很多了。希望不要惹怒了那些编程高手!System Develop 与Application Develop 在国内到底哪个能养活你,能赚钱?诸位仁兄想必也知道,况且俺也没发现几家水平高的公司招这方面的人。毕竟OS,DB MS,COMPILER都被国外做了;另外也别跟我谈LINUX,毕竟还是少数烧钱的人做的事情,我先喂饱肚皮再说。我手下的很多搞4GL语言的程序员都想转行学VC等所谓的更低级的语言,我总是说“在XX城市,先用4GL工具生存,以后再学习VC吧!” 。说的简单一点:先解决肚子问题。 如何判断自己是否是编程机器? 
    1、面对需求不考虑用户,只是考虑用哪些程序技术展示自己的语言语法技巧。 
    2、学习了N种语言。 
    3、从来不学习或实践软件工程。 
    4、语法语言水平在众人中遥遥领先、特别是一些稀奇古怪的语法。凭着兴趣和创造力去干,却重复繁琐的劳动,做着没有意义——唯一意义是赚钱,而且真是出了半斤力, 拿不足八两。 终日劳累,却不能学自己想学的。最终结果是跟不上社会科技的发展 ,人已衰老。悲哀!!!   
    我觉得大学里的高、数理方法之类的, 如果你不是做研究的话, 应该是很少能用到的。不过如果说到离散之类的, 倒还是时不时的能有点用。 开发软件的关键是要有想法,一个好的想法比什么都重要。尤其是有关网络方面的就更是如此。实际上一个程序员最终的技术需要和实际相结合。真正在编写程序到达一定时候,语言的使用并不是最大的障碍,对整个项目的把握、软件工程的把握、数据库的设计以及执行效果的分析等等才是需要进一步考虑的东东!否则,为何大多数公司要求有编程经验了!这些不是程序员必须学的。但数据结构,编译原理,操作系统原理等是必须要学好的,英文也要多看,不懂计算机英语可不行。 我不认为编码的人就是机器, 而系统分析就不是机器。 其实系统分析员就是销售的机器, 所有职员有是老板的机器。它们之间只是不同工种吧了。当然对系统分析要求要高一些, 薪水也高一些。 但更让人佩服的是销售, 是他们驱动了整个的运作。我也是个中专生, 还是学机械的(后来自学了计算机),我非常了解在传统的制造业是如何的规范, 设计人员设计图纸, 然后经审核,再到车间试样, 再根据情况, 修改图纸, 如此反复几次后才能一个产品定型,而在软件界, 就没那么好了,领导会说, 这个你做, 那个他做, 也没有经过很细的分析(国内很多都是这样),在我们这里也没有系统分析员, 每个人都是设计员,也是编程员。 虽然这样对个人来说, 能学到很多东西, 但不利于项目。我国的软件过程水平,确实令人担忧, 目前为止只是几个人十几个人的小软件, 还没有能拿得手的大型软件。 至于中专生编程问题,我认为只要入了这个行, 就不会比本科生差。 因为对他来说没有优越的学历条件, 那么只好埋头苦学,但这正好适应当前计算机软件迅速发展的今天。 学历只能代表过去和基础。更需要的是有能力的人, 解决问题的人,实干的人。对我来说确实有时有点自卑,没有上过高中和大学(由于那个年代, 我只知道能为父母减少一点负担就行了), 所有我一直在努力的学习(corba,uml,java, 软件过程等), 目前为止我并没有觉的我的构架能力和编码水平比他们差,只是觉得E语言实在太差。过计算机本科又如何?我有几个同学到银行去搞业务了,有同学任教,有同学收税去了......60多个人真正现在搞计算机的还就只有几个人,再看看当时这些计算机本科生的毕业设计,//faint 有的人到最后连vb都搞不定,但他们什么编译原理啦什么组成原理啦什么软件工程啦学的(应该是考试的分数)还真不错,至少我感觉有些概念比我清楚(上课没听?)所以我觉的中专生并不比一般大学生差(当然有些重点学校除外 //hehe),有时中专生有更大的压力*迫自己去学习。 学历不是重要的,关键是一个人的素质。我们不能将目标定位在做程序员或编码员(Coder)上。光会写代码有什么用?那叫“编码员”,在国外是属于体力劳动的,不像国内,会写程序的就叫高科技。重要的是分析问题、解决问题和规划的能力,系统分析,系统设计及项目规划才是正途。这就需要学习所谓的基础课程了,如:软件工程、离散数学、数据结构等等。我从vb到现在开始学vc后,一个人捣鼓了几天也没有什么新发现。跟本不知道VC的编程思想是什么,请大虾们告诉我,它和VB的差别真是太大了。VC的博大在于MFC的操纵,它是Win32API的封装.思想在于怎样了解MFC的内幕,它的运行机制。差别也大,差别也不大!这要看你对API的理解了,虽然VC++的可视化没有VB的好,但是不是绝对没有的,其对而且对话框的编辑是跟VB一样的,不过不是像VB那样放在第一个界面罢了,VC++的博大精深是VB难以望其项背的!:)而且VC++是完全面向对象的编程工具,而VB是不够完全的面向对象编程工具,VC++是完全编译语言,VB是本地编译语言,不够完全,VC++效率高,封装性好,继承性高,VB效率相对低了很多,但界面友好,二者只能取其一,或者使用 
    VC++,VB辅助(因为VB开发快),当然Delphi,BCB也是不错的选择。 程序员不应依赖开发工具,程序员更应该拥有的是一种思维、一种精神、一种观念。就像Richard.M.Stallman一样,有自己的精神,为自由软件而奋斗。就像求伯君,为民族软件的振兴而奋斗。这才是真正的程序员。应该说,他们更注重的不是技术,而是软件的思维,软件的灵魂!!我刚学VC的时候,还没有上网。身边也没有一个可以问的朋友,所以大部份都是自己啃的。那种感觉真是很痛苦。 现在在网上就不同了。可以得到太多的资料了。而且还可以得到在线帮助。但这些都不是学习的关键。相信各位也知道VC的难度,并不是那么容易上手的,所以要想学会,学好VC,靠外力是不可能的,主要得靠自己。 自己要有一份难得的毅力,对编程的狂热也可以在一定程序上起到帮助。我就是这样的。起初,没有人帮我,我学习VC是三天打鱼两天晒网,学习进度很慢,幸好对编程的执着,使得自己坚持下来了。 如果你从来就没有接触过编程,那你学习VC的速度可能会比学过面向过程编程的人要慢一些,因为你要去理解命令及语句的含义。但只要你努力,并且可以得到别人的帮助,我相信在半年内会对VC有一定的认识。 请学赤面向过程编程的朋友也不要笑,因为面向过程与面向对象实在是区别太大了。就拿封装一词来说吧,当初我是左想右想才想通的。所以不要自己学过编程,就会在学习VC的通道上比别人轻松。 现在有一种现状应该让我们注意,我发现有很大一部份初学者觉得VC是一种语言,C++又是另一各语言。我在和一些初学者的交谈当中,察觉到了这一点。有的初学者竟然还认为我学VC为什么就一定要学C++?我想这个问题是我们大家都没有注意到的一个问题。就是向初学者讲述C++对VC学习的重要性。 我这有个例子,跟大家讲一下。 我有个同学,他接触编程比我要早,在我还在为VC中“::”号怎么标记的时候,他已经在学习C了。后来,我对VC稍有理解的时候,他也发觉C的跟不上时代的脚步了。我便提议他从C++语言学起,可他认为自己有C的学习功底,根本就用不着再去学习C++。可在学习VC的当中,遇到的困难真是数不胜数。最近,他还是去买了一本学习C++的书,从头再来学习C++。 我希望通过这个例子,能让广大的初学者知道,C++对VC学习的重要性。 学习VC必须有狂热的编程热情,否则是很难坚持下来的。我周围就有几个这样的人,他们比我先学VC近半年,但现在仍然学不会;而我现在虽说不是很厉害,但基本的应用程序是不在话下。我就是天天看书,上机实践,几乎所有的时间都泡在里面,有时连吃饭都在想,为什么?因为我确实想啃下这块硬骨头,我不想半途而废,我觉得学习VC不仅仅是学到了更多的东西,最主要的是培养了我们自己一种坚持克服困难的毅力。 对于VC,我有几点经验:
    1. 技术为本,语言为次。
    2. MFC的单个类有用,DOC/VIEW要小心。
    3. OOP要小心,使用不当反而造成大量的工作和糟糕的代码。
    4. 如果可能,考虑选择使用Delphi ( CBuilder+ VCL 。
    5. 到了一定程度,一定要学COM。 
    要学VC,必须有对C++深刻的理解,对WINDOWS运行机制的深刻理解。尤其想成为VC高手。举例 ,对于虚函数,不仅要知道有这么一个东东,更要知道它的内存镜像 。这样才能对VC中很多的东西举一反三,事半功倍。本人学习VC近2年,但自觉第一年由于心情浮躁,把VC的书翻了一遍又一遍,却每次都只看了一点就无法再深入。直到毕业前夕,痛定思痛,克服浮躁,认认真真的从最基本的开始学,把每一点都搞的水落石出,经过三个月的刻苦,终于大成。直到现在,半月搞定COM/DCOM,都托当日刻苦之福,因此劝告想学VC的朋友,一定要顶住开始的艰难岁月。成功属于刻苦者。  每个人都有自己的学习方法,也许这种方法对我来说有用,但不见得就对所有的人有用。所以,请不要盲目的跟着别人的学习方法学习,要思考属于自己的学习方法。 但我还是会向大家说出我自己认为比较好的一种方法。 学习编程其实与学习其它东西一样,要想掌握它,就要实践,实践,再实践。当你学到了一种新的技术或知识时,多实践是巩固学习的一种最好最有效的方法。这个实践不是照着书上的例子做一遍,而是根据自己的能力,给自己出题,然后去完成它。只有这样,你才能发现自己的不足,同时又增加了自己的编程经验。 但要成为合格的程序员,光会写代码是远远不够的,更重要的是思考。谋定而后动,是不变的真理。 在我的理解,VC只是一个编程工具,就如BC、BCB、Delphi 一样,其实对于编程最根本的就是三个方面,语言、开发包、 操作系统API,他们三个方面应该说是相对比较独立的。 VC是MS开发的,所以针对的是windows api,你可以不会C++, 也可以在VC下用C写出很优秀的程序,当然如果你比较熟练C++, 并且熟悉开发包MFC的话,工作可能要轻松不少。所以在我看来,学习的过程可以是这样的: 
    1、先学习C或C++,在windows的console环境下编写不太深 入涉及API的程序; 
    2、在基本上掌握了语法之后,开始接触简单的系统API,学习 Windows的编程原理和机制; 
    3、在可以编写简单的菜单程序,可以简单地在WM_PAINT下操作 GDI函数后,开始学习MFC,可以从Step tourist学起,看MFC的源代码,理解几个关键的宏的定义与实现,特别是MESSAGE _MAP。 在学习的过程中为了给自己增加点挑战,尽量不要使用resource edit,试着自己编码实现控件的创建、消息的响应。 再就是看自己的造化了,动手做一些小工具,特别是自己平常需要的,对自己的提高也应该是很有帮助。 究竟我们要的是结果!良好的分析问题高效清晰地肢解问题的能力才是我们真正要不断学习的吧? 和学习其它知识一样,重要的是获得提出问题,分析问题,解决问题的能力,不是为编程而学习,你具有什么样的思想,就会写出什么样的程序。学一门语言,不能仅仅是语言,要注重语言背后的思想方法,看他是如何来解决某一问题的,为什么要这样去做,他总是要符合客观事实的,就像人说的话一样,存在某种逻辑,数据的组织,信息的传递,靠你自己的头脑去建立,然后看C++中有什么可以帮你的,该怎么样用他来表达自己的想法。只要你认真实践,努力去做,寻求乐趣,就会达到目标。我虽然 真正认真学习编程的时间不长,但现在我是认真的,就有了以上的体会。  学习VC++有相当的内容要学,而最后的深度则看个人的悟性与勤奋了。 
    1)掌握最新标准的C++。(2个月) 
    如果曾经在大学里自以为学过C/C++,还对dynamic_cast/static_cast/template/try/catch/throw/stl/...感到陌生,那你该Refresh一下新的ANSI C++标准了。 
    ——此与VC++无甚关联,g++/bcb均有所支持 。 2) 学习SDK编程。(6个月) 
    痛苦是暂时的,必要的,坚持就是胜利! 建议用Lccwin32/Masm32/Tasm编写小而精的工具软件; "Windows Programming Guide"、"Advanced Windowsprogramming " 3) 研究MFC源代码。(6个月) 
    不要被一大堆的宏所蒙蔽,just track and dig into it!! 在知道MFC如何扩展、包装SDK之后,自可功力渐进,不被其MFC系统框架所困绕。(《MFC Internals》) 4) 研究OLE/COM技术。 
    COM/ActiveX技术是MS的核心技术,只有彻底洞察其理论精髓才可以体会现在的操作系统的技术趋势,以不变应万变。(《Inside Ole 2》) ***几点建议***: 
    1) Delphi/BCB/VB可以很快构筑界面,但对于想真正学习、理解系统不是一个好的平台,但如果有时间读一读VCL的源码,看看Borland是如何封装系统的,也可借鉴不少。 
    2) 学习ASM对理解C++有很大益处。Soft-ICE也是和VC++结合在一起的好工具。 
    3) 语言本身是皮毛,算法是筋骨;无论高级语言如何发展,在理解操作系统的基础上不断自我创新的能力是源源不断的;如果精髓一旦了然于胸,选择何种开发工具都可以驾御,一见如故了。  每个人学习的过程都会不同吧,我在98从TC转向VC时,对Windows的消息机制一点概念也没有,对着个MFC不知所措,几个月下来一点进展也没有。我于是暂时转向win32位编程。整整一年时间吧,我就是与API打交道,连编辑菜单条对话框等资源文件时也用Uedit32手工编写,为的是希望能对编译器的全过程有个感性的了解。之后我再转向MFC时,果然发现两者是相通的,虽然有一定的区加,不过有了win32位编程的基础再看MFC 时会发现它比win32位编程要方便了太多。 现在市面上的VC书很多,不过大多是入门书。我以为要精通VC(只是以为,本人自已距精通还远的很)应该多看多写程序,看书只能是入门,会用了而已。我不赞成滥用ActiveX,一来我以为它的性能很成问题,真是又大又慢又不稳定(可能是我有点偏激了吧),二来用了它您的程序今后就要被别人牵着鼻子走了。有次我用了个控件,程序都写了大半了,它给我来个继续使用请支付333美元,我两个多月的工钱,烦不烦人?现在我尽可能用别人写的类源代码(我已收集各类代码3-400MB了),一样用起来方便,还能边用边学,必要时还能自已改造。 我以为在现代的网络时代,资料到处都有,无论什么先进的技术,今天我不会我只要查到资料,快的学上几天慢的一两个月我也能学会,现在已没有写不出的程序了,写不出是因为你没有耐心写完它。我以为现在的程序员不一定要多么聪明,而更需要他有完成枯燥项目的耐心,找BUG的细心,对于金钱的平常心(不要为了早日拿到钱而赶进度),最后最重要是有顾全大局,团队协作的精神。 最后,王靖朋友的经历与我实在是有点相似,算是同病相伶吧,真心祝您早日实现自已的人生目标! 学习VC是一项费时费力的艰苦学习过程。为了真正用好VC,你不得不先从OOP开始学起,也许浏览一本纯理论的书要更有意思。 你将从另外的角度考察OO思想。接下来学习C++,学习WindowsAPI 学习MFC,剖析MFC,扩充MFC,创造自己的类库(不要企图写一个和MFC同重量级的类库)。如果能够精通Microsoft C编译器的各种 参数,你就可以开始研究微软C/C++语言编译器的进化历史(结合 各种背景知识)。 掌握了编程的思想,征服VC只是时间问题。  学习VC是接受微软技术体系的过程。所需要学习的不仅仅是C++,MFC。需要学习所有微软的技术,包括Windows编程,Win32系统(实际上 Win32系统实现了很多我们在屏幕上能看到的东西,最起码NT的内核并不大),COM(深入研究它,理解对象是如何跨越进程边界的,最终 能够自如地在Exe中实现自己定义的接口才算到家了。不过这多少有些 不太必要。),DCOM,ctiveX,Windows DNA... 如果你想成为大拿,学吧,没完没了。最起码,使用VC,你甚至于可以 开发自己的操作系统(当然与MFC没有一点关系)。
      

  7.   

    相信大家或多或少都有遭遇技术瓶颈的感觉,那么不妨来各自谈谈自己的体会,因为感觉自己到技术瓶颈的时候,想突破的感觉真的很苦恼,如果能好好总结一下,或许对我们都有帮助,先说说我的经历: 
    最无知的阶段 
    最开始就是编程方面的基础知识,像编程语言,数据结构,操作系统,计算机组成原理, 这个时期基本上是学什么都是一头雾水,各种各样的概念像山一样压得人喘不过气来,感觉看什么不懂什么,很迷茫,这个时候也最容易退缩,这个时期也是最难的,我在这个时期的时候大概是大一大二的时候,我本身专业是自动化,第二学历是计算机,本专业的人没有人学,农村来的孩子以前没有接触过计算机,最开始先学的java(听大肆师兄吹的就想学,后来才知道他根本就没学过也是听别人说的) ,那时候是2000年的时候,上来就windows 95了,没有接触过dos偏偏JDK是在dos下用的,当时以为这么高档的编写界面的IDE(呵呵那时候还不知道什么叫IDE),总是认为肯定是通过鼠标操作的,结果一点屏幕一闪就什么都没有了,当时总以为自己装的不对,反复的重装,那时候根本不知道什么csdn基本上就是上图书馆翻书,反复的捉摸哪装的不对,后来在大一开计算机文化基础老师说到了dos才恍然大悟,呵呵原来是这样,“真原始!”。于是又去图书馆找书,发现了JBuillder几点零忘了,就记得它装完了需要重起系统而学校的机房有还原卡,重起啥都没了。迫于无奈只好厚着脸皮去找机房老师,那时候我们学校废弃的电脑都在一楼机房里,那个老师对我很好和我说有一些旧电脑没有装还原卡,你可以找找。呵呵你能想象的到嘛,一个月的时间我什么都没干,几乎空闲就找这样的电脑了,基本上能用的电脑都是装了还原卡的,不能用的都是没装的,现在回忆起来,这个经历我是学的最多的。后来实在没有办法了,开始看dos。确实不止一次的想过放弃!幸运的是大一下学期计算机专业开c语言了,什么东西老师都告诉了,不会就问。当时最大的乐趣就是做课后习题,并且乐此不疲,几乎谭浩强的那本课后习题我都练过。我认为这个阶段突破瓶颈的方法是,别害怕别气馁坚持就是胜利,突破的标志就是你开始有目的性的有选择性的看书了,最起码你知道了,在这个时候数据结构离你还很远,还是关心指针比较切合实际一些。最开始的时候兴趣很重要,我的自学能力有可能就是这个时候练出来的。我现在印象最深刻的一本书是杨芙清的红皮的讲OOP和OOD的书,书名忘了 
    呵呵当时理解了一些概念那个激动啊,想想还觉得好笑,另外就是有点不知天高地厚了,感觉C语言过时了,太简单就那么点事。 
    看什么都会又看什么都不会的阶段 
    有点基础了,兴趣更强了,开始飘飘然了!开始和不懂的人侃了,给别人的感觉很强。说什么都好象头头是道,看什么都会又好像什么都不会,其实那个时候我就会用Turbo C知道java的一些东西,这已经大二了,买了一台电脑,也知道了JDK怎么用了,呵呵当着别人的面在CMD里敲javac Java这些命令,整的一副高深莫测的样子,很是装了一把。但内心还是很苦恼的因为内心知道,该看的书太多了,该学的东西也太多了。其实这个阶段看书不是最重要的,只要找一本好书,练习例子就行了,最好能动手改改,我记得当时用的是Thinking in Java,语言一定要多练,基本上这个阶段我还是在语言里爬,基本上认为软件就是语言,学好了语言就是高手了。在这个阶段我最有成就感的就是买了一本Java Swing的书,照它上面的例子,编了自己的第一个可视化程序,呵呵激动了一个下午,书名忘了,黄皮的上面有一个活口的扳手,相信很多人都看过。在这个阶段最重要的是一定要养成好习惯,给程序写注释了,给变量起名字了,另外就是一定要踏实,多动手,不要忽略程序的bug,不要关心程序只跑出个结果就成功了,对照书的内容好好分析总结一下,其实第一次程序出现死循环我也很兴奋的。我认为在这个阶段突破瓶颈的标志有几个:非常渴望和懂的人获得交流,上瘾了基本上不是去图书馆就在电脑前边,不屑于编一些小程序了,渴望编一些大的程序但是又不知道自己行还是不行,很困惑商业上的软件到底是什么样的,并且知道了计算机这个专业博大精深不知道学到什么时候才是个头,愿意和别人承认自己是个菜鸟了开始看数据库网络编程方面的书了。这个过程持续的很长几乎一直持续到我大学本科毕业。 
    学以致用阶段 
    研究生阶段有幸跟着导师进入了中国民航的一个特种设备研究基地,做机器人的课题。遇到了很多真正的高手,由于课题需要改用VC6.0,开始看WIN32 API(一本黄皮的教材,好像是WINDOWS 95/98程序设计,清华大学的)。那是我最充实的时候,天天都在进步,早上和晚上都有一种获得新生的感觉,我最庆幸的是在第一阶段看的那些书 ,在这一阶段都穿起来了,呵呵也终于有了自己多于1000行的程序了,并且我发现很多的高手在分析bug的时候都不能从原理上进行解释,我还凑活,这应当很庆幸当年图书馆没有白跑。或许这也是科班和非科班的不同吧。这个时候我遭遇过第一次程序内存泄露,第一次程序死机,第一次主动去看软件工程,第一次机器人爬到墙上掉下来,知道了CSDN进而知道了慰www.codeguru.com和www.codeproject.com等很多网站了。这个时候我学会了MFC STL数据库编程,学会了网络编程,看了N多本C++方面的书。那时候经常早八点晚十点没有周六周日。并且很清楚的知道了,只要自己肯努力,自己一定能成功。突破学以致用最重要的标志最明显的我一直受用到现在的标志就是不太关注语言了,因为知道语言不是最重要的了。进图书馆总是找一些算法方面的书当然这本身也是课题需要,知道啃数据结构了。我非常庆幸的是我们学校有一个女老师,国内第一批恢复高考的大学生,东北大学数学系毕业,她很关注我经常和我说一些数学问题,还告诉我看一些什么样的书,在后来走向工作岗位的时候真是受用非浅。另外编写代码也变懒了,寄希望于什么东西都从网上下,除了算法模块否则根本就不愿编程序。现在回想起来我还是在细节上进行打拼,还是没有清楚的明白到底什么才是软件,最多也只能算是一个初级程序员。 
    明白真正软件的阶段 
    工作后顺利的进入了一家软件公司,在一个七人开发小组里做开发(该软件开发从九几年开始的(那时我还没上初中呢哈哈),软件的后台包括实时库部分是由二十多个博士硕士经历几年时间做出来的)我们小组的开发需求是给一些大型变电站(上万个数据采集点)做配变监测系统,我进入公司的时候项目已经启动三个月了,有幸看到了这个平台的很多源代码,终于知道了过去我做的软件简直就是小case中的小case。在发奋图强了半个月后,我发现我在大学的知识点绝对够了。 
    在进入项目组的第二天,就给我分配了任务,呵呵开始做一些小模块,由于做的很认真,质量效果都很好,研发部经理认为我虽然刚毕业,但是很有潜力,就让项目组内一位我很尊敬的高手(哈工大本科上交硕士,七年大型软件开发经验,手中无剑心中也无剑的那种人)带我,他是公司的技术主干,而且一直负责软件框架方面的工作,在后来的几周里简直就是集训般的编程序,而且他向我详细的阐述了用户的需求和整个软件架构,从底层的数据通道采集,网络通讯架构,实时库的原理,后台的数据处理,前台的数据处理直到前台的界面设计,现在想想我真的是很感谢他。      在我进入这个项目组两个月后,这位大牛不知道因为什么原因被调走了。这个时候项目已经进入测试阶段了,呵呵项目经理让工程部和我们小组的其它六个人测试程序,让我一个人负责bug修正(因为我的优点就是不但快而且好,另外他也没有别的人选了,除了大牛我知道的最多,别的牛都是负责一部分),呵呵短短两周时间200多个bug被我一个人搞定,至今我还为这件事情而得意,期间由于工作的需要我很是花了一番功夫研究了它的框架和代码,包括一些深层次的源码我都有幸看到。这个时候我才终于明白,程序框架和程序根本就不是一个技术层次。于是开始专研设计模式,UML一类的资料。 
    后来由于研发经理多次在公开场合表扬我引起了项目经理的反感,他处处找我麻烦,加上这种软件不是本专业,我还是喜欢控制软件,我选择了离开。但是我非常感谢这家公司。 
    在这个阶段我认为跳出瓶颈的标志就是开始向上走了已经开始用一种全局的眼光去看待程序了,再看程序的时候看到的已经不在是具体的代码了而是一种架构,一种数据走向交互图。基本上在这个阶段一般都不会困扰于具体的技术了,关注的信息资料大部分都是软件工程方面的资料了,喜欢用最简单的方法去解决复杂的问题了,知道软件开发过程包含很多事,开始关心CSDN主页上的内容了,喜欢了解业内的动态了,泡论坛的时间变少了。在这个时期的时候,做人做事情也更注重自己的风格了,很多事情也养成了自己的习惯了。一般也不开始盲目的去推崇什么技术或者什么算法了,坚信最实用就是最好的,人也变平和了少了一些锐气多了一些稳重。 
    技术转型阶段 
    搞软件的估计技术没有转过型的很少原因也很多,我离开了那家公司以后,有三个月的空白期一个是太累了想休息一下,另外就是有可能是毕业之后技术上没有经历什么太大的困难,总感觉真正自己感兴趣的软件不应当是这样的,应当很有挑战性才是,读书时想着捉摸着大型软件到底应当什么样,经历了以后才明白关键并不在于大小,自己做的高兴才好,开发的难点并不在于工程大还是工程小何况80/20法则估计大家也都听过,很多大型软件%80的工作内容都是重复的,没有什么新意。呵呵于是我还是回到了老本行,做我的运动控制软件,并且从事嵌入式系统的开发(新瓶装老酒呵呵),因为运动控制涉及到的算法太多了个人也喜欢。在这家公司一直做到现在。 
    我认为搞软件不可避免要进行一次技术转型,这个行业很累很辛苦,只有找到自己适合做、高兴做,愿意做的工作,才能让你继续走下去,因为行业待遇虽然高,但那也只能让你高兴几个月而已,你坚持不了多久的。所以这一阶段突破的标志就是发现自己喜欢的行业并且钻进去。 
    走在所在行业前列的阶段 
    不少人都是这个目标吧,在当前公司所开发的上位软件系统从需求分析到框架到编码一切的上位程序都是我作为主要人员进行开发的或者说上位这里就我自己,初期阶段用了两个月达到了国内同类系统用一年时间做出来的效果(与另外三家企业的软件相比,他们至今还没有超过我的初级阶段),当然这也与公司以前失败的经验有关。后来又用两个月的时间开发了国内一些客户需求好几年但其它软件公司都没有开发出来的功能,国外两家行业内比较强大的公司也只有一家有这样的功能,之后又用了两周时间开发了一种独一无二的功能只有我们的软件有。由于有对公司泄密之嫌,所以具体是什么就不说了,当然你也可以认为我在吹牛,在csdn里还有我其它的同事我想他们也会看到我的帖子。其中涉及到的很多关键性的技术和运动规划算法我想国内或许没有人比我更清楚,因为没有人比我们做的好,而且与他们接触,他们的程序10万行以上而我只用了两万多行的代码。当然如果公司不给我提供好的平台,我也没有这么好的机会,期间也得到了很多同事的帮助,我的人缘还不错。我并不是在这里吹捧自己,我只是认为这是技术人员发展的一个阶段而已。 
    最近项目已经快收尾了,最近也在开始总结一下自己,我今年28岁,工作到来年四月份就两年了,我下一步的路该怎么走?我现在已经不害怕技术了,经验告诉我只要我踏踏实实的肯学,基本上所从事的实际领域都可以学会只是时间问题,我还需要一些实际项目的历练,一定要更难的。 
    在这一阶段我总结出来了一个个人认为很重要的结论,技术人员要想突破自己的瓶颈,理论水平不提高光有实际经验是不太可能的,最终水平有限。前几个阶段的总结我几乎都是想到哪写到哪但是仔细回味一下任何一个瓶颈的突破主要还是理论水平的成长,经验和实践只能决定当前阶段的水平,实践只是外功,理论才是内功,没有过硬的理论,成长肯定是有限的,在技术人员的初级阶段理论没有实践重要,但是越到后期理论越重要。所以我下一步有可能读博,当然一定要选一个好导师。
      

  8.   

    用了8年的VC6。0,去年才被逼着用了VS2005,书上还有很多东西不知道,现在的书面太广,但不专。学代码只有一条路,实战,要有一条路走到黑的决心走下去