刚看到其他人的技术学习心得,在此做些分享会加上自己的一些看法:
学习新知识的两方面:整体结构和细节,就像书的目录与具体内容,得先了解整体有哪些内容,然后再去学习每节的内容,避免深入细节而迷失学习的方向。
整体结构:就像是接口,抽象类是做什么的,不用深入实现,看出整个骨架,分离出核心部分,在以后哪种场景下能用上。细节:这时就得了解里面的原理,不断实践,不断重构。
第一步应该是找到这些主要的类和接口,找出主要的调用过程,清楚这个过程.这样,差不多就明白这个软件/库是怎么工作的了.第二步,是看这些主要类,接口的继承/实现,这样可以了解这个软件/库可以做什么,怎么扩展.这样,一个数M代码量的东东,可以在2~3天的时间里把它弄清楚。对主要流程的掌握和对层次的掌握是第一位的。第一头就扎进这些细节,那就完了。
以问题导向,案例为基础的学习,不要拘泥于语言,要学习能学习到的最好的东东。比如,性能的关键在调度,这时候可以看看资源调度模式,hibernate算是把资源调度玩到了极致。基于事件的调度(如.net中的web cache),进程调度,线程调度,工作流,这些都算是行为调度,要是把这些东东融会贯通,掌握每一种实现的优点缺点。那么软件设计中所有和时间、并发、资源相关的东东都不在话下了。行为调度可以看看.net 中的cache实现,找一个工作流软件看看,找找几个线程框架看看,看看几个典型操作系统的进程调度机制。
找一个较稳定的的案例学习,如:pertshop架构,包括其业务、构架,了解有哪些业务模块后再从小模块分析起,多看源码,看其怎么实现此功能的。
同样的问题,多研究几种解决方案,分析它们的优缺点。