调试技术能够让新技术的学习事半功倍

调试技术能够让新技术的学习事半功倍


我是WPF菜鸟。我要学WPF。

一种方法,是根据推荐的书籍,按照书籍的步骤,从Hello World开始,循序渐进,从event handling, data binding, style, template, graphic, resource等等一路练过来,然后,然后呢?

然后没了。然后可以看看MSDN上深入一点的文档,写个小程序什么的,再然后呢?

再然后就真的没了。

为什么说没了呢。因为接下来不知道做什么了。首先我不知道我是不是学全面了,其次就算我以为我学全面了,我能做个程序了,我也不知道我是用的方法是不是最优的。学一个东西,学到后来觉得没了,那是很让人失望的。

所以我觉得按照上面的方法来学WPF,肯定会让我非常不爽。

那我该怎么学呢?

首先是我为啥要学。导火索是现有的产品无法满足用户日益增长的需要了。日本A片都用蓝光碟了,说明用户对于视觉感官的渴望是非常强烈的。那WPF真的能满足这个需求么?WPF能发挥GPU的多少硬件特效?功能上支持关键部位打马赛克么?WPF的工作模型跟我现有的数据兼容么?WPF画图是实时的么,我开发游戏用WPF能达到直接用D3D的性能么?WPF出问题后我到什么地方找专家?如何制定性能指标跟其它技术比较?开发平台完善么?...

稍微具体点的问题比如有:

1. WPF支持数据和图像同步吗?比如我的数据源刷新速度比WPF的Render还快的时候,我有办法得知当前的Render状态,以便调整数据的获取速度吗?

2. 如果我的目标程序是一个DCOM Server,我需要在DCOM请求执行的时候通过GUI来显示执行状态。WPF的线程模型跟DCOM Server模型有冲突吗,使用WPF会带来 DCOM的性能下降吗?

3. 当频繁改变UI Tree结构的时候,怎样的做法才能够带来更高的性能,怎样的做法才能够避免UI的抖动呢?

如果手头的项目是非常重要,要花很多钱,上面这些问题往往是决定使用何种技术的关键。但事实情况是,就算我把亚马逊上WPF 4星半以上的书全部看一遍,WPF所有的feature全部学会,也无法回答得到上面问题的答案。

要回答上面的问题,其实需要两点:

1. 明确地知道你需要什么
2. 明确地知道WPF产品本身是如何工作的,而不是知道应该如何使用WPF

所以我重新制定的学习计划如下:

1. 会用WPF写一个hello world,以便做进一步研究的试验品
2. 尽可能多地通过比较深入的文章,比如WPF developer的blog,来了解WPF的实现细节
3. 针对我的需求,分析出WPF对应的实现细节。比如WPF通过怎样的方式把图像画到屏幕上,WPF的线程模型如何通信,WPF通过怎样的顺序传递消息,遍历UI tree,WPF如何优化重复绘图,WPF对Windows消息的依赖等等
4. 根据前三点获取的信息,根据MSDN中的介绍完成一个技术原形,测量该原形的工作是否跟预期相符合,反证前三步获取的信息是否准确
5. 把这些信息进行多方面的反馈和讨论,进一步完善原形,完成进一步的证实和检验
6. 根据前面的信息,决定是否使用WPF进行当前的开发。如果答案是肯定,那去亚马逊随便买本4星半的WPF教科书,快速学习如何使用WPF的各种feature

上面的计划,难点在第三步。除了微软以外,别人没有WPF的源代码,如何才能知道WPF的实现细节呢。如果你有钱,如果你是HP或者Citybank,你可以找微软的顾问,把你的问题交代给顾问,然后顾问会参考WPF的源代码,会跟WPF的developer讨论,最后告诉你WPF某些具体的技术是如何实现的。但是如果你是个人呢,或者你不想花钱,那对不起,你只有自己硬啃了。

这个怎么硬啃呢,自然是需要有技巧地啃了。调试工具在这个时候就会发挥出巨大的作用!

(哪怕手头有WPF的所有代码,其实还是没有调试器+reflector管用。要是不相信,你去打开VS下MFC,ATL和STL的代码,看看能学到多少东西)

下面是我结合调试器学习WPF的步骤。调试技术能够让学习事半功倍。

WPF起步(上) --- WPF是如何把图像画到屏幕上 
http://blog.csdn.net/eparg/archive/2007/12/11/1930357.aspx

WPF起步(中) --- 的main thread跟render thread如何通信
http://blog.csdn.net/eparg/archive/2007/12/11/1930363.aspx

WPF起步(下) --- WPF的画图请求是如何生成和派发
http://blog.csdn.net/eparg/archive/2007/12/11/1930368.aspx

 



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1930560


你可能感兴趣的:(学习)