本篇反思总结了一般的学习过程。掌握学习的方法,可以让你更高效地进行学习。这对于天天要学新技术的IT人员来说,是非常重要的。
本文反思了自己学习WPF过程中出现的一些问题,然后对以后学习的方法进行了重新设计。
本文的主要内容:
- 与学习相关的哲学思想
原来的学习方案设计
工具的反思
没学好的原因
新的方案
相关哲学理论
我之前的文章中,有一些最基本的哲学思想和最抽象的学习过程,见:《方法》。这些基本理论中,与学习过程直接相关的是:
系统论:学习的过程中,切不可一叶障目,要系统、全面地认识你所要学习的东西。
普遍规律与特殊规律相结合:要理解所学事物的特殊性、它的设计理念、与其它同类的异同。
主次分明:所学事物主要解决什么问题,主要的设计理念,主要的解决方法。
透过现象看本质:透过各种实例看到内部的结构、设计原则、设计理念、抽象思维,思考这个事物出现的原因。
认识论:理论要和实践相结合,学习才能事半功倍。这一点在IT技术的学习上,表现得尤为明显。学习是一个迭代的过程,不可能“一口吃成一个胖子”,要“循环往复,螺旋上升”。
量变引起质变:学习是一个持续的过程,平时的一点一滴、对细节的研究,才能做到“深入了解”该事物。
学而不思则罔,思而不学则殆。
三省吾身。
关于学习过程,网上有很多相关的文章,有兴趣的可以看看:
《什么是学习过程》
《学习方法概述-学习过程》
《学习过程的分析》
原来的框架学习方案
之前写过一篇《如何学习框架》,里面设计了如何学习一个框架。在学WPF的过程中,在看MSDN的同时,也在不断地总结框架学习方法:
现在看来,还是有一些缺陷:
- 帮助文档太细,许多内容重复出现,不适合作为教材。
- 由于学习过程是一个持续不断的过程,所以没有必要设计时间占用百分比。
- 学习过程没有必要分为轻量/重量两种方案。
- 和实践的结合还是太少!
学习工具的反思
其实之前已经听说过MS Expression的名字,知道专业的WPF界面都是用这个设计器做出来的。但是一直没有去用,主要有几点原因:
- 原来学习ASP.NET的经验告诉我,要精通此类“Markup+Code”的编程模式,“只有自己动手写Markup,而不是用设计器生成,才能学得更深”。但是这一个方案在WPF学习的时候并没有发挥多大的作用。WPF的界面元素和代码编写较难,导致以直接学习Markup的方式学习时,障碍重重,寸步难行。这种看不起拖拽控件的方式,违反了“由浅入深”的原则。
- 未了解工具的实际情况。当时感觉在Visual Studio这个集成的开发环境中,也集成了WPF的界面设计器。而我一直觉得VS功能非常强大,想当然地,觉得集成的设计器应该也很不会弱,不需要再使用其它的工具。在这种情况下,也就一直都没有安装MS Expression。
- 懒得去用。虽然VS一直是积极主动地使用最新版本,但是却一直懒得去使用一些其它的新软件,今天更新一下,明天更新一下,烦都烦死。嘿嘿。:)
但是其实使用新的工具只会在开始时多花一些时间,等到熟练以后,使用它可以为自己节省出更多的时间,这个适应过程还是值得的。
走到前不久,偶然间试用了一下MS Expression Blend 4,发现在上面设计界面非常直接、易用,和VS自带的设计器完全不一样,这个设计器是为专业的设计人员开发的。难怪自己一直都很难做出绚丽的界面!
反思
没有学精WPF的原因:
- 没有向高人请教。
- 没有由浅入深。
- 没有尝试使用界面设计工具。懒得去用。
- 和实践结合过少/没有系统的实践。之前学习WPF的时候,花了大量的时间在系统的学习上,但是系统的实践却很少。一是因为现在做的项目中的界面都是自动生成的,没机会应用学到的理论;二是每一个小节后做一些零散的练习,并不系统,没有把这些零散的点结合在一起。
新的方法
新的学习方法中,对上述问题都进行了考虑。大致分两个阶段进行学习,同时,引入较多的实践环节(实践的量的问题可以现斟酌,如果不是学习IT技术,可以考虑减少一些。)。如下图:
图中,考虑到了总结对于学习的重要性。另外,在挑选《快速版本》和《完整版本》的系统知识“书籍”时,应该多听听专家的意见。
总体上来说,整个框架的体系架构、内部的各子系统的设计,还是比较复杂的。在学习整个框架时,参考以下建议:
- 分主次、目标导向:需要分清主次、先后顺序进行学习。(如果全部细致地学习,最后会发现,只有少部分知识是平时会使用到的。)
- 由表及里:先学习如何基于框架进行开发,并尽量多开发几个示例模块,熟悉后,再学习框架。
- 先总后分:先大致了解整个架构思想、分层,以及组成部分。再做出框架各组成部分的学习计划,逐个击破。
- UML图:这个环节相当重要,过程中应该一边了解类结构,一边绘制相应的类图,并可能需要绘制相应的时序图。
- 忘记细节:一些开发人员在学习内部代码时,总是会提出某段代码写得不好,某段代码性能太差。这往往使得他对于框架本身的设计把握不到位。例如某段代码的性能不好,这种细节的问题,可以在性能问题体现出来时,再进行优化。
尾声
学习各种框架是开发人员学习过程不可缺少的一项任务。如何能高效地学习,直接影响了技术储备量。
本文中对我个人出现的问题进行了一些反思,也画了新的学习方案。希望各位园友可以分享一下自己的框架学习经验,也希望能为我指正图中的不足之处,万分感谢。 :)