牛人的编程学习经历和好书推荐

你现在觉得学编程很累吗?嗯,那很正常,只有电影中的天才黑客才轻松,但他们只敲空 
格和回车... 
看看我的学习经历,或许对你有帮助。 

   
     
   
我的编程经历: 
  大一,熟悉电脑,极品飞车,古墓丽影...... 

   
     
   
  大二那年,在报纸上看了米特尼克的报道后,非常崇拜,于是开始学解密(那时候分 
不清hackercracker的区别),自然地学起汇编(我一直认为我能很好地运用指针得益于 
我不错的汇编功底),crack的入门比较简单,看过一些教程后,就可以动手解了。当时, 
懂得用SoftIcehmemcpy处设断在很长一段时间都是我炫耀的资本(现在想来那时被人称 
为解密高手真是脸红啊@)。后来软件解的多了(都是简单的),就想象Cracker那样做个 
注册机,扬名天下。 

   
     
   
  于是开始学C,因为对汇编很熟,所以在指针的理解上没遇到什么困难,花了一个月左 
右学完了。 

   
     
   
  接着开始了Windows编程之旅,幸运的,第一本书选择了Charles Petzold 的《Progr 
amming Windows》而不是《Inside VC》,Petzold的书虽然简单,但编排的非常好,循序 
渐进,很有成就感,看着看着就入了迷,花了几个月看完了上册(早把学习动机忘了), 
信心大增。下册难啃多了,象很多第一次接触位图的人一样,被DDB/DIB搞的晕头转向,只 
看了一半都不到就放弃了,从此很长时间对它们畏之如虎。 

   
     
   
  转看C++,看了一遍,什么虚函数,override operator,模板根本不懂,只知道个概 
念(要理解还得靠实践,书中什么teacherstudent的关系对freshman根本说不清),但 
总算还掌握了类的用法。 

   
     
   
  连受打击,对编程没什么兴趣了,进入低潮。疯狂迷恋quake3 

   
     
   
  大三上,偶然的,在书店里看到了Jeffrey Richter 的《Advanced Windows》,站着 
看完了SEH那章,立即取钱买下了它。头一次,看技术书有种想跳起来大喊的冲动。它比P 
etzold那本难了许多,更甚的是翻译还差,到现在已经看了好几遍了还没完全消化。看完 
后,眼界开阔了许多,重燃对编程的兴趣。 
  大三下,兴趣转到压缩方面,从图书馆借到Mark Nelson 的《数据压缩原理与范例》 
,一边看一边写程序封装,hehe,那时候就像巴浦洛夫试验中的狗一样,看到性能优化就 
流口水。FLibPCXTGAGIF的编解码部分就是基于那时候的代码完成的。RLE还好说, 
但写LZW算法是我编程生涯中最痛苦的一段经历:中途不能调试,没有验证数据-只能手动 
编解码,位运算,速度。500多行的代码前后搞了快半年,我算知道身处悬崖中间的感觉了 
 

   
     
   
  大四以前的两年大都是在看书学习,编程基本上全是验证性质的,超过1000行以上的 
程序都没写过。 

   
     
   
  大四,学了两年的SDK编程,还是不肯学MFC,抱着SDK不放,总自豪地告诉别人每一行 
代码都是自己写的。看着周围使用MFC的人越来越多,不服气,发誓做一套界面库来(第一 
次写可以称之为工程的东西),开头没遇到什么困难,消息转发用虚函数实现,FCWnd基类 
写好了,dialoglistboxscrollbarstaticbutton很快就出来了,但编Toolbar时遇 
到了障碍,而且随着程序的日渐臃肿,许多弊端开始显露出来,通用控件和OwnDraw控件产 
生了非常棘手的冲突,在Try NN次后,终于放弃。开始使用MFC,确实非常简单好用,而且 
网上还有很多扩展类,唉,我这半年究竟干了些什么。终于认识道:什么东西都自己从头 
写是不可能的。这或许就是最初的团队精神了。 
  看着编出的50K鸡肋,感觉很可惜,不过也很高兴,经过此役,我对virtualstat 
ic函数的理解加深了,而且关于进/线程,内存映射文件的封装类还是可以用的,填补了M 
FC的空白。 

   
     
   
  大五,轻松,时间多多,对自己极度的自信,准备直接工作,对图象处理,文件格式 
发生了浓厚的兴趣,把petzold的下册终于搞定(这回看就象看GRE中的数学一样简单了) 
,把几年写的代码做成FLib,然后就开始做Demo - PicViewer,开始只是想把它做成个演 
示的DEMO,但越做越感兴趣,而且我的界面编程水平也得到了提高,因此决定把它做成一 
个完善的图象处理软件。但快乐的生活中却暗藏着杀机,“清零”把时间记错了,好说歹 
说才又给了次机会,要不都毕不了业;工作又找不到合适的,唉.这个世界只相信学历。毕 
业后捡起了遗忘已久的高数,还是考研吧...... 

   
     
   
  回顾自己的学习经历,走了很多弯路:在汇编上花的时间过长,而且是干int 21h这种 
无用功,要不是一次自己辛辛苦苦优化的代码比VC-Release慢,我可能还沉浸于中。花了 
几个月去封装窗口类,写两千行的代码去理解虚函数到底值不值得呢? 

   
     
   
  转眼4年过去了,这其间的经历真可用“酸甜苦辣”来形容,虽然掌握了一些技术,但 
,现在的我还远远不能称之为高手,才学4年编程,有太多的东西等着去征服 :网络,D3 
DWDMCOMLinuxJava......或许十年后,等我长到身后的塑像那样髙时,可以这么 
认为。(给我来信的话,叫我foolish就行了^-^ 

   
     
   

   
     
   
学好VC的建议  
    
  在我初学编程的时候,特别想有人能告诉我,先学哪个,看那本书好,可惜没人告诉 
我,自己绕了好多弯路总算走上正轨了,但,如果最开始就有人能扶我一把,可能能到更 
高的境界,我把我的一些想法写出来,希望对初学者有帮助。 

   
     
   
  我以为,初学者先学SDK,再学习MFC比较好,而这时学习MFC就不用怎么看书,多看源 
+MSDN就可以了。 
至少我是这么认为的,全新的《深入潜出MFC》现在还摆在我书架上没翻过。 
我觉得比较好的学习路线  
C ==>Programming Windows(上)》==> C++ ==>Advanced Windows==>Programm 
ing Windows(位图)》 
==> 学习MFC,听说Jeff Prosis有一本书非常不错,也有中文版。(残念) 
==> 学习HookWindows 95 : A Developer's Guide -- 
     
==>Inside The C++ Object Model==>Inside Windows 2000 
至此,九阳神功已有小成,除了驱动,再往下学习别的应该都没什么困难。 
你可以大量的看源代码,这对提高水平很有帮助。 
PicViewer的就是我仿照PJ NaughterDIBImage编写的。 

   
     
   
  MFC?直到现在,我还是只把它当作一套不错的界面库,其他我都用FLib+STL实现。C 
File?有了内存映射文件,ReadFileWriteFile只能去干读/写端口的事了。建议系统相 
关:内存,REG,映射文件还是自己封装一遍的好。 

   
     
   
  当你写过一些代码后,应该确定一种固定的编程风格,我是 follow Petzold's styl
    
efeels good
    
并尝试写一个应用软件,这可以提高编程的整体性。 

   
     
   
  VC的调试器非常优秀,没有SI强大,但简单实用,memeorycall stackdisASM,这 
些都需要无条件地熟练掌握。 

   
     
   
  最后,在任何情况下也不要认为自己精通C++,即使在看完《Inside C++ Object》。 

   
     
   

   
     
   
我认为经典的一些书  
Charles Petzold 的《Programming Windows -- 入门 
Jeffrey Richter 的《Advanced Windows -- 经典中的经典,我太喜爱这本书了 
Jeffrey Richter 的《Windows 95 : A Developer's Guide -- Hook 
Matt Pietrek  Windows 95 System Programming SECRETS -- PE 
Stanley Lippman 的《Inside The C++ Object Model -- 适合于摆在床头,睡觉前翻几 
 
Mark Nelson 的《数据压缩原理与范例》 -- ZipRarGif不再神秘 
Don Box 的《Essential COM -- 你很想把你的C++类放入DLL中吗?但...... 
Walter Oney 的《Programming the Windows Driver model -- 底层Driver 
SolomonRussinovich 的《Inside Windows 2000 -- 你真的了解Windows吗?一本看起 
来会打击自信的书。
************************************************
文章来源:
 http://bbs.ustc.edu.cn/cgi/bbsanc?path=/groups/GROUP_3/CS/D6F5A8D99/M.1046357873.A 

你可能感兴趣的:(编程,C++,windows,汇编,object,mfc)