最近一个月笔者休了大约两周的假期,期间没有学习新的开发技术,也没有去游山玩水,而是对自己的知识结构和Windows开发本身进行了一个深入的思考,收获颇多,在这里希望和大家共同分享一下。
如果把Windows开发比作练武,那么就一定有内功和招式,二者相依相存,没有内功的招式只能算是花架子,中看不中用。
那么,什么算是内功呢?
首先,我想说的是系统模型和知识,整天在windows上做开发,对windows的了解够么?可能很多人说,我是做.net开发的,了解那么多没用,.net都做好了。我同意,人各有志嘛,但是我想问个问题,.net写的大型客户端有时候会突然卡一下,你能告诉我什么原因,怎么解决么?C++写的windows程序有时候内存会涨的很高,你能给我解释一下为什么吗? 别告诉我是内存泄漏,你怎么就知道是内存泄漏?在哪泄漏的?如何解决?
其次,我想说的是内存模型,windows内存分为虚拟内存,堆内存,栈内存,具体的堆内存又分为CRT堆,私有堆等等,你能解释一下都有什么区别么?如何分析那块内存上存储的什么数据?如何去查看这些数据?使用什么工具可以让这个过程更加方便?
第三点,我想说的是关于C++语言和C#语言本身的一些知识,你了解的够么?什么是C++ traits? C++构造函数和析构函数可以抛出异常么?如何写一个异常安全的类?对于C#,那些操作可能会导致性能问题,底层使用什么技术实现的,都有什么优点和缺欠?
限于篇幅,这方面的东西,不想写太多了,我想说的是技术学习并不是只有招式就够了,内功实在太重要了,没有这些知识积淀,好多人知识凭借自己的主观感觉去做各种的判断,一会说memory leak了,一会说问题在别人的代码里,自己没问题,我想请问的是,你有根据么?靠拍脑袋就做出的结论很难让人信服。其他的内功还包括:TCP/IP,反汇编技术,调试技术等等,在此不一一举例说明。
那么招式都有什么呢?
太多了,WPF,WCF,UI, .Net开发,MFC,ATL,COM,WTL可以毫不夸张的说就只把这些知识都学习一遍就需要很长时间,而且你可能越学越觉得没底,只习的招式没有内功,根本不能发挥出招式的最佳效果,所以我的建议是,刚柔并进,内外兼修。
总结
本文是笔者对于windows开发学习近10年的一点感悟,并无夸张本意,只是希望指名其中的道理,给后来人一点方向,以便少走一些弯路。人总有迷失方向的时候,只去学习招式而不修炼内功可能会走火入魔,内外兼修才是正路。