如何学习设计

简介:

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

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

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

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

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

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

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

目录
相关文章
|
7月前
|
XML 存储 安全
深入理解HttpSecurity的设计
介绍了基于配置文件的使用方式以及实现细节,如下:
49 0
|
7月前
|
存储 算法 搜索推荐
一文探究系统分析与设计的逻辑性
「软件分析」与「软件设计」这样的词眼经常听到,然而要真正理解「软件分析」和「软件设计」的本质是比较难的,本文带你了解软件分析与设计的「逻辑性」到底是什么。
899 24
|
缓存 Java 数据库
详细设计-设计讨论|学习笔记
快速学习详细设计-设计讨论
89 0
|
存储 NoSQL Java
设计的改进|学习笔记
快速学习设计的改进
71 0
|
监控 数据可视化 测试技术
软工导第一节课 计算机软件工程学作一个简短的概述,回顾计算机系统发展简史 软件工程的基本原理和方法有概括的本质的认识,详细讲解生命周期相关知识讲解8种典型的软件过程模型
软工导第一节课 计算机软件工程学作一个简短的概述,回顾计算机系统发展简史 软件工程的基本原理和方法有概括的本质的认识,详细讲解生命周期相关知识讲解8种典型的软件过程模型
202 0
软工导第一节课 计算机软件工程学作一个简短的概述,回顾计算机系统发展简史 软件工程的基本原理和方法有概括的本质的认识,详细讲解生命周期相关知识讲解8种典型的软件过程模型
软件设计体系 实验一 经典软件体系结构风格
软件设计体系 实验一 经典软件体系结构风格
|
存储 缓存 Java
评论设计|学习笔记
快速学习评论设计
127 0
评论设计|学习笔记
|
存储 SQL 算法
形式化验证工具TLA+:程序员视角的入门之道
女娲是飞天分布式系统中提供分布式协同的基础服务,支撑着阿里云的计算、网络、存储等几乎所有云产品。在女娲分布式协同服务中,一致性引擎是核心基础模块,支持了Paxos,Raft,EPaxos等多种一致性协议,根据业务需求支撑不同业务状态机。如何保证一致性库的正确性是一个很大挑战,我们引入了TLA+、Jepsen等工具保证一致性库的正确性。本文即从程序员视角介绍形式化验证工具TLA+。
形式化验证工具TLA+:程序员视角的入门之道