转自我的个人博客
这两天上设计课,最精华的收获就是这十条了
- Good design is innovative. 好的设计是创新的
- Good design makes a product useful. 好的设计是实用的
- Good design is aesthetic. 好的设计是唯美的
- Good design makes a product understandable. 好的设计让产品易于理解
- Good design is unobtrusive. 好的设计不引入注目
- Good design is honest. 好的设计是诚实的
- Good design is long-lasting. 好的设计经久耐用
- Good design is thorough to the last details. 好的设计细致入微
- Good design is concerned with the environment. 好的设计对环境友好
- Good design is as little design as possible. 好的设计就是尽可能少地设计
出自课上看的一部纪录片,名字暂时忘记了,之后再补上。
在工业设计中,这十条可以说十分精辟地总结了设计的动机与导向。从包豪斯到苹果,被冠以“优秀”的设计,其优秀之处无一不能在这十条中找到解释。
上一次有类似的震撼感,是阅读The Zen of Python的时候,仔细想想其实两者有很多共通之处:
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren‘t special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you‘re Dutch.
Now is better than never.
Although never is often better than right now.
If the implementation is hard to explain, it‘s a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let‘s do more of those!
除了对异常处理、命名空间等具体编程规范的约束,通篇讲的东西无非是如何建立优雅、易读、可维护、扁平、简洁的代码,而很多思想与上文工业设计的十诫是相通的
美观的实现比丑陋的实现更好,因为好的设计是唯美的
明确的实现比隐晦的实现更好,因为好的设计让产品易于理解
简单的实现比复杂的实现更好,因为好的设计就是尽可能少的设计
当然,The Zen of Python中的很多观点是pythonic的,而不一定适用于其他编程语言的编程习惯。但是我认为的确可以延申工业设计这十条告诫来作为编程时的一部分思想指导,因为说到底,程序设计和工业设计是很像的,它们都是由两部分组成:一半是艺术的设计,另一半则是面向实用性的设计
Good design is innovative. 好的设计是创新的
创新是为了追求更多的可能性。代码追求的是稳定、效率、质量,有时创新未必能解决问题(甚至没有机会创新),更多的时候我们去寻求已经经过充分验证的实现方案。所以这一条我不认为对软件开发有很强的指导性——但是在这个连传销都能以P2P之名上市的时代,谁不爱创新呢?
Good design makes a product useful. 好的设计是实用的
编程是实用主义哲学,不实用的代码,再美观也是花架子。因此在程序能正确无误高质量地运行之前,一切优雅的设计都是空谈。
Good design is aesthetic. 好的设计是唯美的
优雅的代码,逻辑清晰、一目了然,无论创建者还是维护者都神清气爽,自然质量高、易维护。
Good design makes a product understandable. 好的设计让产品易于理解
可读性,无需赘言。
Good design is unobtrusive. 好的设计不引入注目
无论Spring Framework、Django还是Tensor Flow,我们熟悉的这些优秀项目,其强大之处都是不暴露在外的。在使用时,我不需要关心依赖注入,不需要了解模板引擎的解析过程,也不需要针对底层硬件设计不同的计算图,我只需要把我的实现交给它们就好——即使在简单的几行代码背后可能是一个十分繁杂的运行逻辑。不引入注目可能是对封装的终极描述,一个极为强大的组件只需要一行代码就可以轻松地调用,调用时完全不需要关注内部逻辑,想一想就是很性感的事。
Good design is honest. 好的设计是诚实的
针对异常的检测与处理应该是诚实的。程序中应该尽可能少地“特判”,因为特殊情况和边界情况经常是无法考虑周全的,借助缜密的运行逻辑和丰富的运行时自限,规避、检测并修复它们才是鲁棒的做法。当问题出现时,一定要认真排查问题,切忌将原因不明的异常扔进try-catch完事儿
Good design is long-lasting. 好的设计经久耐用
好的代码也经久耐用。这符合我们常说的开闭原则,好的设计应该可以经过扩展进一步适应更多需求
Good design is thorough to the last details. 好的设计细致入微
细节决定成败,对细节的处理决定程序能否正确响应边界情况、能否规避性能瓶颈。不能只顾着追求大的架构设计而轻视局部细节,就像一个火箭不能忽视每一颗螺母。
Good design is concerned with the environment. 好的设计对环境友好
写代码当然不用保护环境,但是代码本身也有自己的环境友好性需要考虑。一方面是各种依赖环境的问题,比如前端工程师最头疼的浏览器适配,比如各种软件包的版本兼容性问题,什么样的代码能同时在open jdk 8和oracle jdk 8上运行,什么样的接口到了Pytorch 1.0就弃用了,这些都是编码时需要考虑的事情;另一方面是代码自身的向上/向下兼容性,用户能否以最小的代价完成版本的升级或降级,这也是个很重要的课题。
好的代码设计,一方面对依赖环境的变动有着强悍的鲁棒性,另一方面又对自身的不同版本有着良好的兼容性,这大概就是软件开发的环境友好了。
Good design is as little design as possible. 好的设计就是尽可能少地设计
极简主义,包豪斯主义,奥卡姆剃刀原理。设计的越多,代码量越大,越难以掌控,越难以理解,越难以维护,越容易出错,经常也会导致难以扩展。不写bug就是最好的debug。
其实并不足以概括软件开发时的各种指导思想。但是当把工业设计与软件设计类比起来思考后,会发现它们是那么相似,着实有趣。
水平有限,博君一笑。
原文地址:https://www.cnblogs.com/MisTariano/p/10682683.html