工业设计十诫在软件开发观点上的理解

转自我的个人博客

这两天上设计课,最精华的收获就是这十条了

  1. Good design is innovative. 好的设计是创新的
  2. Good design makes a product useful. 好的设计是实用的
  3. Good design is aesthetic. 好的设计是唯美的
  4. Good design makes a product understandable. 好的设计让产品易于理解
  5. Good design is unobtrusive. 好的设计不引入注目
  6. Good design is honest. 好的设计是诚实的
  7. Good design is long-lasting. 好的设计经久耐用
  8. Good design is thorough to the last details. 好的设计细致入微
  9. Good design is concerned with the environment. 好的设计对环境友好
  10. 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

时间: 2024-11-08 21:01:28

工业设计十诫在软件开发观点上的理解的相关文章

SaaS系列介绍之十四: SaaS软件开发分析

1 引言 真正的问题,不是电脑是否具备思考能力,而是人类是否具备这种能力                     ________B.F.Skinner<计算机科学> SaaS模式不同于传统软件不仅仅体现在运营的服务上,同时在软件开发的方式和技术上也有很大的不同. 如何开发SaaS软件,开发SaaS软件将用到哪些技术这都是我们要研究的主要内容. 2 实现SaaS软件的关键技术 l SOA技术 SOA与SaaS被被称作挛生姐妹确实并不为过,SOA与SaaS是现代软件服务领域的二架马车,它们奔蹄狂

如何在华为云软件开发云上搭建JavaWeb,Maven项目

本文将使用华为云软件开发云向大家演示如何搭建JavaWeb,Maven项目. 一.相关信息 1.华为云软件开发云简介 华为云软件开发云(DevCloud)是集华为近30年研发实践,前沿研发理念,先进研发工具为一体的一站式云端DevOps平台,面向开发者提供包括项目管理,代码托管,流水线,代码检查,编译构建,测试管理,移动应用测试,部署,发布,CloudIDE,研发协同等基础功能的研发工具服务.覆盖软件开发全生命周期,支持多种主流研发场景,让软件开发更高效. 官网入口:https://www.hu

定论——软件开发的方法论探讨

http://www.jianshu.com/p/9593bd7b28d9 一.消除隐喻 1.隐喻 软件开发这件事情,出现得很晚.距今只有几十年的时间,关于它的定义,我们可以简单地说:"就是把软件做出来." 这基本上等于什么都没有说.而软件开发究竟是怎么回事,大家也没有搞明白,于是隐喻就派上用场了.当你要向一个完全没有概念的朋友,解释什么是软件开发的时候,你无法向解释建筑工程那样把他带到现场去看--案件开发的现场,你的朋友会以为软件开发就是一群人坐在电脑前面打键盘--你只能打比方:它就

软件开发大爆炸,被诺基亚错过的Qt正迎来黄金时代

软件开发工具Qt的第一个公众预览版于1995年面世,之后在2008年被诺基亚收购:2011年到2012年,在诺基亚全面转向微软系后,将Qt软件业务出售给了芬兰IT服务公司Digia:2016年Qt公司从Digita独立出来后,在芬兰上市:2017年获得1500万欧元投资:2018年在坚持了20多年后,Qt终于迎来了物联网特别是智能汽车.智能制造业等风口. 作为一个完整的.跨平台的C++图形用户界面应用程序开发框架,Qt不仅有着悠久的历史,也有着其独特的价值.C++是全球前十大受欢迎的编程语言,迄

10分钟了解软件开发全过程

现如今软件行业需求量仍然相当大,加上很多其他专业的就业率低,许多非计算机专业的人士通过简单培训或自学,然后挤身加入软件开发大军之中,包括我自己也是这么过来的.我相信很多从事软件开发工作的同胞们对软件开发的全过程并不熟悉,基本只会根据概要设计来实现程序.我本人也是工作后才通过系统的学习计算机专业方面的知识来提升自己.当然,如果你只是为了眼前吃饭问题,那么你只需要知道如何根据概要设计来编写程序也就够了.如果你想要在这个行业长远发展(长远发展不一定是非要写代码),那你就必须得把计算机专业基础知识学扎实

软件开发的“三重门”(转载)

转载自陈皓的coolshell. 自从上次写了“程序员技术练级攻略” 以来,就觉得似乎还有很多东西没有谈到,但当时没有继续思考了.而春节前有人问我,是做底层技术,还是做业务.这问题让我思考了很多,不由自主地回顾了一 下我这十多年的软件开发经历,并顺着整理分类了一下自己解决过的若干问题,还发散想了很多,经过了一个春节假期的发酵,产生了下面这篇文章. 前言 这篇文章必然是通过我的个人经历来写的.所以,我先说说个人经历吧.我的经历基本分成三个阶段. 第一阶段:我 刚毕业时在家乡的某银行工作,做些银行的

软件测试员的要求比软件开发员的要求低吗?

首先,表面上是这样的,但是本质上并不是,想知道原因,我用一篇文章告诉你看到的都是表象.很多小公司对于测试的流程和要求并不是很高,就更加显得测试比开发的要求低. 即使说经过这几年的发展,测试行业已经比以前成熟和正规许多,但是你拦不住很多公司并不在乎什么流程,什么计划.因为对于很多小公司来说,开发人员是他们的命脉,可能有10个开发,但是只有1个测试.在这些老板的主观认为,开发解决的是有无的问题,而测试是解决好坏的问题.在缺乏长远目光.追求眼前利益的情况下,对于产品的态度也就是只求"过的去"

敏捷软件开发VS传统软件工程

敏捷软件开发:又称敏捷开发,是一种从1990年代开始逐渐引起广泛关注的一些新兴软件开发方法,是一种应对快速变化的需求的一种软件开发能力. 与传统软件工程相比,它们的具体名称.理念.过程.术语都不尽相同,相对于"非敏捷",更强调程序员团队与业务专家之间的紧密协作.面对面的沟通(认为比书面的文档更有效).频繁交付新的软件版本.紧凑而自我组织型的团队.能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发中"人"的作用. 本文将介绍敏捷软件开发的历史背景与发展,

软件开发的艺术

相对于那些不善运用隐喻的人,那些使用隐喻来照亮自己的软件开发过程的人,他们对于编程的理解会更好,并且能够更快地写出更好的代码. 有专家说,软件开发是一门科学,是艺术,是一个过程,是在驾驶汽车等等. 文字写作隐喻软件开发,暗示其过程是一种代价昂贵的试错过程,而非仔细的规划和设计. 有人将软件开发比作耕作,“每次做一点”,最后添加到整个系统.实际上,应该对系统计划施肥,对细节设计蔬果,并通过有效的管理土地来增加代码的产量,最终取得代码的大丰收. 不如用系统生长来做隐喻,相近的词如“增量的”.“迭代的