11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

图解优秀软件设计人员的 8 个习惯

  • 2019-10-30
  • 本文字数:1603 字

    阅读完需:约 5 分钟

图解优秀软件设计人员的8个习惯

怎样才能成为一名专业的软件设计师呢?一个典型的答案是:经验和天赋,但这并不能令人满意。尽管它包含了真理的要素,但它几乎没有提供给我们任何可以学习的途径。专业设计师们显然不只是随机地处理他们的工作。恰恰相反,他们在设计工作中会有一些特定的习惯、学习实践方法以及一些要遵循的原则。


有些我们可能对它们很熟悉,而另外一些则不然。但是,一个不变的事实是:专业的软件设计人员能敏锐地意识到所有这些实践方法,并在必要情况下加以利用。


基于多年来对专业软件设计师及其工作方式的研究,我们的《软件设计解码》(Software Design Decoded)一书阐明了其中的 66 种习惯、实践和原则,下面将重点介绍其中的一些。它们已经被相应领域的工作人员反复验证过了,并且每一种都可以追溯到记录专家行为的学术文献。这本书的配套网站提供了带有注释的参考书目,该参考书目汇集了关键的基础文献,并为我们对此提出更多见解。


如今,软件不再受限于技术,而是受限于想象力。然而,将想象变为现实的软件可能会很复杂。这对软件设计师提出了非常高的要求,只有我们共同“提升”以实现可持续的卓越设计,才能满足这些要求。我们希望这些插图能起到画龙点睛的作用。


1)让用户参与


Clara Mancini 设计的狗专用开关。


专家们对用户非常了解。他们刻意让用户参与到设计过程中,研究他们、与他们交谈、让他们参与测试中间设计,甚至让他们在设计团队中发挥积极作用。


然而,专家们对用户所说的每句话并不完全相信。他们意识到了潜在的局限性,因为用户的思维常常受到当前体验的影响。专家们不仅要关注用户的需求,还要关注用户真正需要的东西。


2) 设计优雅的抽象


当所有开发人员都创建抽象时,专家将对其进行设计。一个好的抽象可以很清楚地说明什么是重要的,无论是关于它是做什么的以及它是如何实现的。通过一个单一的镜头,它传达了它想要解决的问题及它解决问题的机制。


专家们并不满足于任何抽象,他们刻意寻求优雅的抽象,通过这些抽象可以有效地引入、理解和引用复杂的结构。


3)专注于本质


每个设计问题都有一个本质及一套核心的考虑因素,这些因素在设计解决方案中必须被理解并被“钉住”,才能成功解决问题。这种本质可能是破坏性的:需要做出的外围决策会因为核心的变化而彻底改变。专家们首先会将精力集中在本质上,然后才会放到外围的设计上。


4)不断模拟


专家会通过模拟其设想的软件的各个方面以及设计的不同部分是如何支持各种场景的,来想象一个设计是如何工作的。当与他人合作时,专家们会通过逐步地讲解设计的操作来定期检查设计。当他们独处时,他们会在心中进行模拟,随着时间的推移反复练习设计。


5)环顾四周


就像建筑师在城市中穿行考察并从现有建筑物中汲取灵感一样,软件专家也会检查其他软件的设计,“看看它们是如何做到的”。他们经常这样做是为了应对他们面临的特殊挑战,但是他们还经常花时间环顾四周,只是为了发掘他们将来可能会使用到的设计解决方案。


6)重塑问题空间


专家们通常会回避已提出的问题而是更广泛地考虑问题空间,寻找理解“问题是什么”的替代方法。他们可能会通过调整问题空间来改变方向,或是在同一空间中解决不同的问题。他们会有意识地选择与原始设计问题不同的目标,因为这有助于他们洞悉真正问题所在或是找到如何克服关键障碍的方法。


7)视错误为机遇


设计经常会出错:“失误”、误解、故障、错误的开关、紧急情况等。专家们并不惧怕错误,而是将错误视为机遇。他们接受错误是设计的一个固有部分,并愿意花时间来探索失败和其上下文环境。理解所发生的事情往往会揭示出对问题或解决方案的见解,例如假设、误解、偏差及紧急特性。


8)好好考虑他们没有设计的东西


虽然关注设计必须做什么是自然而然的,但是专家们也会花时间思考设计不打算做的事情。在阐述和考虑边界时,他们会发现自己在哪些地方设计过度了、哪些地方设计不足。


原文链接:


https://thereader.mitpress.mit.edu/habits-of-expert-software-designers/


2019-10-30 13:051590

评论

发布
暂无评论
发现更多内容

Spark 3.0 关键新特性回顾

hanke

大数据 spark 开源

图灵测试已过时,AI 需要新基准测试;别了Flash,Adobe播放器正式停运

京东科技开发者

云计算 AI 量子计算机

大作业一

走走,停停……

3轮技术面+总监面+HR面轻松砍下阿里口碑Offer!

Java架构追梦

Java 面试 架构师 口碑Offer

真牛!成功跳槽百度工资从15K涨到28K,附赠课程+题库

欢喜学安卓

android 程序员 面试 移动开发

GitHub 的野心,5600 万开发者的新社区

打工人 Coco

GitHub 开源 开源社区

重学JS | 深入理解Object,必会知识点汇总

梁龙先森

大前端 编程语言

前端异常监控 Sentry 的私有化部署和使用

智联大前端

大前端 监控 异常 sentry 错误

大作业2

走走,停停……

这些面试题你会吗?为什么有人说Android开发不再吃香?最全的BAT大厂面试题整理

欢喜学安卓

android 程序员 面试 移动开发

在线教育的发展

anyRTC开发者

AI 音视频 WebRTC 在线教育

原始时代对分布式架构的探索

而立斋

创业公司用 Serverless,到底香不香?

Serverless Devs

Java Serverless 运维 云原生 大前端

Selenium高效拍档-HtmlUnit

dothetrick

Java 自动化测试 测试开发

为PostgreSQL的表自动添加分区

PostgreSQLChina

数据库 postgresql 开源

涨知识!Android面试真题解析火爆全网,搞懂这些直接来阿里入职

欢喜学安卓

android 程序员 面试 移动开发

招聘 | 腾讯云大数据,期待您的加入!

腾讯云大数据

大数据

来啦!2020 Java开源项目权威排名解读:Spring Boot排名稳定、Shiro未上榜

JavaGuide

开源 springboot springsecurity shiro

从 RxJS 到 Flink:如何处理数据流?

Apache Flink

flink 流计算

纵观 Excel 演化史,开发者如何通过“表格技术”提升企业生产力

葡萄城技术团队

Excel SpreadJS

看透Spring MVC源代码分析与实践

田维常

Java

七大关于DevOps的误解,你中了几招?

禅道项目管理

DevOps 运维 开发 自动化测试

依赖倒置原则与单一接口隔离原则

andy

中国用户规模最大教育科技独角兽作业帮再获投资机构青睐

区块链加密货币钱包系统APP开发|区块链加密货币钱包软件开发

系统开发

京东面试:说说MySQL的架构体系

田维常

MySQL

从源码层面理解ArrayList 扩容策略

geekymv

Java 扩容 ArrayList

数仓实时化改造:Hudi on Flink 在顺丰的实践应用

Apache Flink

flink 流计算

深入讲解拉链表,还怕面试官问?

大数据老哥

大数据 数据模型 数仓项目

阿里云技术专家解读:2021 年六大容器技术发展趋势

阿里巴巴云原生

云计算 阿里云 容器 云原生 k8s

图解优秀软件设计人员的8个习惯_语言 & 开发_Marian Petre_InfoQ精选文章