要提升设计能力首先须要对软件设计有着精神上的追求,即在软件开发的过程当中追求设计的完美性。梦想之因此有可能成为现实,是由于咱们会去“想”并为之努力,软件设计能力的得到也不例外。设计能力的得到并不会由于不去追求而“不当心”得到且水平很高。具有软件设计追求的人,会在设计的第一时间积极思考以试图找到更优实现,也会随着产品的演变而反思是否存在更好的设计,或者在必要的时候会选择接受挑战去经过改善设计帮助团队走出困境。
提升设计能力的另外一个途径是实践加模仿。做者小时候很喜欢武术,在高中时常常看有关散打方面的书,看过以后还在头脑中想什么样的场景应当用什么样的招式,并且还常常拿本身的弟弟、堂弟和表弟做为演练对象(可苦了他们!)。在高中期间的一次与邻居同龄小孩的打架中,做者快速地将对方巧妙地摔倒在地上取得了胜利。站在一旁观战的表哥后来问了一个问题,“你如何快速地将他打倒在地?我没有搞明白!”。“由于我常常在头脑中假想格斗的场景以及操练”,做者当时是这么回答的。有了那次经历之后,做者也明白了为何部队里面要有军体拳(简单地说就是武术操),也改变了军体拳只是个花架子的观念。什么东西只有对之熟悉了之后才能运用自如,而要熟悉它就得实践,且一开始是模仿性的实践。做者小时候打架能快速地制胜,正是由于看了书中的散打招式后,经过必定的假想和操练去训练大脑的反应,一旦在现实场景中出现了之前训练时的场景,就会本能地运用相应的招式。设计能力的提升也有类似之处,一开始要看别人的设计,且看出其中巧妙的地方,若是看懂了每每会在大脑中留下必定的印象。之后碰到相似设计主题时就会想起曾经在某一个项目中存在相似的设计,若是还彻底记得那一好的设计是如何实现的,那就依样画葫芦地作。固然,若是不记得也没有关系,能够再查看那个项目的设计并模仿它。相似的模范多了几回的话,后面就很容易想到用它,且领悟其中的精髓并把握各类设计方法的本质,乃至最后本身也能创造性地思考出更优的设计方法。这种学习方法,对于学习面向对象开发更是重要,由于面向对象的设计思想更抽象。做者曾经的一个项目组长是如此评价面向对向设计的 ——“我以为它很绕”。是的,在尚未彻底掌握面向对象开发时就是这种感受,但一旦掌握了就会以为它是那样的天然和直接了当。
实践和模仿的目的是为了最终造成本身的设计思想,设计思想的造成须要经过思考去作到。设计思想是什么?是设计时所遵照的各条原则。为何有的设计一看就以为好呢?是由于它符合某些设计原则。而思考的目的就是从各类好的设计中,找出藏在背后的原则。如何从一个好的设计中找出隐藏在后的设计原则呢?做者在高中时购买过一本武术书 —— 《截拳道》,这本书讲解了李小龙创立的截拳道。截拳道更加注重搏击效率,所以,它的招式都是以实用、直接打击对手为目的。诚然,在格斗的过程当中,没有人会优先考虑本身的招式是如何的“酷”,不然就是找打,而应注重如何在格斗过程当中占上风乃至最后取胜。李小龙的截拳道也正是从纷繁复杂的招式中发现最为简练的那些,经过对招式的简化来提升搏击效率。李小龙创立截拳道的过程或许与咱们从好的设计中找出隐藏在背后的设计原则很类似,须要什么样的能力呢?洞察力!想想,李小龙能创立截拳道是否是也正由于他对于武术招式独到的洞察力呢?他经过运用洞察力去去除那些在博击中没有打击效用的部分,以达到简化并提升博击效率的目的。洞察力不仅对于找出设计背后所隐藏的设计原则有用,其实在整个软件开发乃至人生中都有着十分重要的做用。良好的洞察力有助于发现表象背后的本质,或寻找出问题的根源。软件行业的洞察力也能够理解为技术敏感度,或职业本能。
设计能力的提升意味着将掌握更多的设计原则,能力的提升过程也是对设计原则进行精化的过程,理论上,应尽量让各设计原则所涵盖的内容是正交的。设计不是简单地运用每个原则,有时须要在各类原则中进行平衡。一个设计在两个原则之间存在必定程度的冲突时,是先知足其中的哪个呢?仍是二者都须要进行必定的折衷妥协?这些都须要有很好的平衡能力。平衡能力的得到一样须要经过思考,或者平衡能力也能够经过定义适当的原则进行掌控。
追求设计之美是提高设计能力的原动力,实践和模仿起到的是熟悉各类“零星”的好设计,而思考则是帮助领悟各类“零星”的好设计并找出隐藏在其背后的设计原则,进而造成本身完整的设计思想体系。