如何学习设计

从GOF的”Design Pattern”中的观点,可以看到模式的有两个要素:

1.反复出现的问题;
2.针对该问题的解决方案。

所以从这里看出学习设计模式,首先是积累问题,对问题进行归纳,分类,对比。其次是积累对问题的解决方案。
然而大部分人初学者都缺乏经验,学习设计模式是一个很好的思路。在看书的时候,在看书时,我觉得不是死记概念,而是可以不停地问自己这些问题:

  1. 这个模式是针对什么问题提出的?
  2. 为什么要这么做,而不那么做?
  3. 这样做有什么优势和劣势?
  4. 和其他类似的模式区别在哪里?

在自己设计的时候,也这样问自己:

  1. 我碰到什么问题,问题的本质与核心是什么?
  2. 我可以用哪些方案解决问题?
  3. 为什么用这些方案?各自有什么优劣势?
  4. 最终选择哪个方案比较好?

其实这是用批判性思维做设计,我觉得这样可以相对比较深入全面的了解问题,审视自己的设计。做到有理有据,心中有谱,和别人讨论时也能够给别人带去假设性的思想。同时在这个过程中,也加深自己对设计的理解。
我不太提倡死板套用设计模式,任何模式都是用来解决特定问题的,如果被套住,就无法深入了解其中的思想,也就不能真正做好设计,不能在已有设计上做提高。
同时我也不认同不用看设计模式,只要遵守设计原则就好了。我觉得看设计模式是一个很好的学习机会,是前人的总结,不能浪费。
另外看到一篇讲如何设计API的文章,觉得挺好,贴出来分享:An API Design Process
他主要讲了API设计的流程和一些注意点。但是其中我觉得他讲到一点给我挺大启发。他说设计API最重要的首先自己要清楚为什么要设计这个API,有明确的意识,是良好设计的前提。其次是设计过程中会碰到一系列决定,要做出明智的决定,当做出的决定都是明智的,这个API就坏不到哪里去。而做出明智的决定,你得先做过不好的决定,从中吸取教训,能以辨别好坏。
这一点给我的鼓励是让我可以正面自己做过的糟糕决定,明白这也是学习的宝贵机会。不光是自己的,看到别人做的糟糕的设计,也是宝贵的学习机会,要去想为什么他的设计会失败?从中就可以吸取教训。

上一篇:ThreadLocal源码分析


下一篇:Android常见的Event-driven方案