作者:高焕堂,misoo.tw@qq.com

首页:Back

ee                                      e

架构师未来性的基础:简单性

Apple公司创始人乔布斯(Steve Jobs)曾说到:“简单比复杂更难,你必须努力让你的想法变得清晰明了,让它变得简单。但终究是值得的,因为只要你获得其<简单性>,就能搬动大山了。


一、前言

兹回忆,于十七世纪中,牛顿提出了简单公式(即造形):F=ma;让人们能轻易理解物体运动的复杂<关系>。再如,于二十世纪初,爱因斯坦发表了简单公式:E=MC平方;让人们能理解复杂的质量、能量与光速之间的复杂关系。同样地, 在软件方面,著名专家Fred Brooks(“人月神话”一书作者)在40年前就说道:
”软件的复杂性是本质性的,并非表象而已。”
(The complexity of software is an essential property, not an accidental one.)

于是,高焕堂老师提出简单的”EIT”软件造形;则让人们能理解Android多层框架体系里的复杂关系。有了架构设计造形的<简单性>,人们就很容易理解软件的复杂关系,进而提升了掌握软件系统复杂多变的能力,唯有熟谙此道,才能创造架构和产品的<未来性>。

二、领悟与形(Form)

著名的建筑大师路康(Louis I. Kahn)说:<对事物本然的领悟,然后具像化为心内的形>(I think of form as the realization of a nature)>。事物在身外,领悟其本然而成形(即具像化),存于心内,是具像的、但没有外貌。由于形没有外貌,所以设计师设计出赝品来呈现出形的外貌。

依据路康设计哲学,我们对同一个本然领悟而成<形>,并实存于心,具像化了领悟和感受。首先的感受就是<美>,这个感受必须被<感动>。此刻,美中的惊奇触动我的心,期盼透过设计品(赝品)来做为真美的献礼。于是,让作品的欣赏者(或用户)心中充满着无限感动。(请参阅:<<高焕堂的架构师之路>>文章)

三、形与设计(Design)

被尊称为「史上最伟大的平面设计师」的保罗.兰德(Paul Rand)说道:设计是关系(Relationship),设计化解形式(Form)和内容(Content)之间的冲突;当形式和内容整合为一体时,就实现艺术了。依据保罗.兰德的设计思维,内容就是想法(Idea),或主题(Subject)。而想法就是这些事情的全部。形式就是我们如何处理想法,如何做它,如何展现它。当形式与内容结合在一起,那就是设计的实现了。兹以图示如下:


图1. 形与设计

在讨论某个主题之前,必须先定义讨论的内容。大多数时候,大家都只是谈论设计;而且有些人以为,设计就是他在领带、浴室壁纸或地毯花纹上看到的东西。这就是一般人所理解的设计,但其实不然。那是设计过程的一部分,仅只是装饰而已。苹果公司前CEO乔布斯(Steve Jobs)也说到:

”在大多数人的词汇中,设计意味着华丽的虚饰,是室内装潢,是沙发皮革的质料。但对我来说,没有什么能远离设计。设计是产品的灵魂,灵魂通过产品或服务的外观来呈现它自己。” (In most people’s vocabularies, design means veneer. It’s interior decorating. It’s the fabric of the curtains of the sofa. But to me, nothing could be further from the meaning of design. Design is the fundamental soul of a human-made creation that ends up expressing itself in successive outer layers of the product or service.)

所以我们必须用心思考问题,而不是思考设计。设计是思维的产物。问题的解决方案会在一秒钟突然浮现。但是在聚焦于解决方案之前,必须做地毯式的思考、搜索和感受。思考是设计过逞中的第一要务。

四、设计是思考(领悟)的产物

保罗.兰德推荐华勒斯(Graham Wallas)在他的<<思考的方法>>(Art of Thought, 1926)这本书里,所发明了一套思考方法。此方法的第一阶段,会先调查问题的所有面向,做出粗略或精细的的概要,然后忘了那个问题,把它抛到脑后。这是思考过程的第一阶段,称为准备期(Preparation)。

接着,第二阶段是酝酿期(Incubation)。把问题忘掉,让它蕴酿。让它在我们心中慢慢熬煮,隔一个礼拜或隔个一天再回来想,然后就会有些念头出现。这个蕴酿期非常重要,给它充分的时间,就能做出好的决定。

第三阶段是豁朗期(Illumination),问题整个浮现出来。逐渐地,全部设想完毕,解决方法自己浮现了;然后就要仔细观察,进行评估。评估它可不可行? 大家会不会接受? 或你满不满意? 这就是设计的过程,或称为创造性的过程。这是设计师一直要做的事。兹以图示如下:


图2. 设计的过程

其中,酝酿期需要投入许多热情。乔布斯(Steve Jobs)曾说到:
“要把某些东西设计好,你就必须熟悉它、真正了解它到底是什么? 这必须投入很大热情才能彻底地明白它。这需要反复地咀嚼回味,不能急就章。”(To design something really well, you have to get it. You have to really grok what it’s all about. It takes a passionate commitment to really thoroughly understand something, chew it up, not just quickly swallow it.)

那么,这个蕴酿过程,由没有什么蜘丝马迹可循呢? 还是像一条在夜里摸黑航行的船(A ship passing in the night)呢?

五、暗室里抓(黑)猫的线索:从愿景到现实的<连线>

保罗.兰德(Paul Rand)说道,设计是一种关系系统。这里所谓的关系,涵盖了一个问题的所有面向,包括设计元素之间的关系,例如颜色是黑或白,线条或色块等。只要顺着<关系>这个角度想下去,而且这类关系是无止境的,所以设计很难到达完美的。乔布斯(Steve Jobs)曾说到:
“创造无非就是把事物联系起来”。
(Creativity is just connecting things.)

从自己生活经验中点点滴滴的联系中,将相关的事物,以某种形式(form)串联起来。他又提到:
“你不可能在眺望未来时把生活中的点点滴滴连接起来,只有回顾时才能连点成线。你必须相信,你今日所做的点点滴滴将会连结到(影响)你的未来。”(You can’t connect the dots looking forward; you can only connect them looking backwards. So you have to trust that the dots will somehow connect in your future.)

人们对未来事物或情境的期待,就是人的愿景(Vision)。从未来愿景回顾现在的事实,有助于找到从愿景到现实之间的<连线>(即关系)。这通称为:“Mapping from the vision to reality”。愿景是对未来的期待,有助于引导反思我们心中长期以来不自觉的假设(Assumption);调整心中假设,能调整到更好的视角(View),以便扩大视野,让原来躲在屏幕后面的关系浮现出来。一旦关系充分浮现、全部设想完毕;接着要仔细观察,进行评估验证。检验它是否满足各层面的限制(Constraint),包括可不可行? 大家会不会接受? 或我们自己满不满意? 等等。如下图所示:


图3. 设计的过程

就像谷歌(Google)公司的基本法则是:
「创意与限制心心相印。」(Creativity loves constraint.)

限制检验创意,创意满足限制,创意突破限制,实现完美设计。设计师不断寻觅和检验多条行得通的途径(连线),然后选择一条<较具有未来性>的途径给开发团队施工。由于是一条具有未来性的途径,其意味着继续走下去,遇到阻力时,会有足够的转圜空间。所谓阻力,就包括各方既得利益者的阻碍。因之,架构师会持续不断地寻找<无异走廊(Corridors of indifference)>;经由这走廊,开发团队可以迈向(主人的)目标,但避免伤害伙伴(如客户)或别人的私利而招惹阻力。

六、面对复杂<关系>,只能简单<造形>

保罗.兰德提到,设计就是要顺着<关系>这个角度想下去。这类关系是无止境的。这正是设计很难到达完美的原因之一。因为其中的每一项动作,都有无穷无尽的犯错可能。设计是化复杂为简单的过程。复杂的部分充满了各式各样可怕的问题。要试着去评估所有的问题,然后把它们变简单,这是非常不容易的事情。

有许多复杂的关系是本质性的(Essential),人们无法删除它。于是想办法提升人们管理复杂的能力。试想,当我们去观察太阳星系时,如果在脑海里没有阿基米得(Archimedes)几何学的简单”椭圆”造形,你会觉得各星体运行的轨迹非常复杂。这个复杂性是本质的,无法删除,怎么办呢? 等到你学了几何,脑海里有了”椭圆”造形之后,再去看太阳系,就会发现只不过是9个椭圆形轨道而已,非常简单。此时,并没有去删除你身外星球的复杂关系;但却简化了脑海里的想象,提升了内心面对复杂事物的能力。所以说,没有简单,我们就无法理解复杂;亦即,面对复杂,只能简单。

前面说过了,软件的复杂性是本质性的,并非表象而已。我们也需要借助于简单造形,来理解软件的复杂关系。此时,高焕堂老师提出的简单”EIT”软件造形;则让人们能理解Android多层框架体系里的复杂关系。如下图所示:


图4. 面对软件框架的复杂,只有简单EIT造形

这种软件的复杂性是本质的,无法删除;然而当我们心怀简单EIT造形时,就会发现只不过是一堆EIT造形的有机(Organic)组合而已,非常简单。例如,在 <HTML5 + Android平台>的架构里,就是两层EIT造形的简单组合而已,如下图所示:


图4. 复杂外貌来自于EIT造形的简单组合

七、简单造形与美感

当我们心怀阿基米得几合学的椭圆造形去看待太阳系星球的运行时,就会发现其单一造形所创造出来的整体之美。同样地,当我们心怀枫叶单纯造形去看待枫叶树林时,也立即会发现其单一造形所创造出来的整体之美。以此类推,当我们心怀EIT单纯造形去看待Android系统框架时,也会发现其单一造形所创造出来的整体之美。

这项美感来自于自然造物法则。自然界的造形主要来自「信息的有限性」( Information Limitations)。由于这项限制,一个生物形体的造成,是出自一个概括性的计划:「单纯的造形」。随着生物的成长、与环境的交互信息愈多,逐渐在细节上修修补补,就发展出「不同的内涵」。然后,基于单纯的造形,不断进行「重复地组合」。例如,漂亮的枫叶林,就是合乎「单纯造形、不同内涵、重复组合」三项特性。许多造形相同(且不同细节)的枫叶,组合出一遍美丽的树林。如下图:


图5. 造形的簡單組合创造出整体之美

八、简单造形与<未来性>

造形概念有两层作用:1)规范<小>元素组合规律,让人们容易组合出<中>间模块。2)规范中间模块组合规律;让人们容易组合出<大>系统。例如,玫瑰花就是一个造形,规范了花瓣、花蕊、花衬叶等有限<小>元素的组合规律。同时它无限重复也大大影响(和简化)了整体<大>树系统的组合规律。这项造物法则,提升了掌握自然界复杂多变的能力,唯有熟谙此道,才能创造架构和产品的未来性。

于是,树是一个单一造形,含叶、枝、干、根等共同元素种类,也有元素之间的简单组合规律。然后依循将树这种造形依循简单规律,无限重复和组合就成为林。再从太阳系有九大行星的运行轨迹而观之,其单一造形就是椭圆形。每个造形都含有两个元素:太阳和行星。如果太阳系本身不是一位出色的几何学家,那么一定有一位杰出的几何学家创造了太阳系。

在软件上也是把复杂多变的内涵封装于一个简单的造形里。例如,面向对象的类别(Class),其内部只有两个元素:函数(Function)和数据项(Data Item)。基于这简单造形,人们掌握能力增强了,不再畏惧了,就敢大胆去尝试各项组合,成为形形色色的应用软件(Application)。一般而言,造形的组成元素种类,大多为2或3种,并且有简单的元素组成规律。例如:

◆ 太阳系的行星运行轨迹,呈现单纯的椭圆造形。每个造形都只含有两种元素:太阳和行星。
◆ 政府架构,其造形也只有三种元素:行政、立法和司法。
◆ 软件的类别,其造形也只有两种元素:函数和数据项。
◆ 软件XML的造形也只有两种元素:Tag和Content。
◆ 物理的原子,其造形只有三种元素:质子、中子和电子。
◆ 等等。

同样地,EIT造形也是基于固定而有限的元素种类(如引擎、接口、轮胎三种元素),加上简单的组合规律(如引擎透过接口来呼叫轮胎),也形成了「单纯造形」。虽然造形的轮廓相同,组成元素种类也相同,然而其内部元素,以及元素的不同组合,覆予各个造形不同的内涵。在物理学上的原子造形也是如此,氢原子(H)和氧原子(O)两者的都是原子造形。这两个造形轮廓相同(都是原子造形),但是内涵不同。从EIT 造形与原子造形的对比,很容易理解到造形内部元素之间,有其组合与互动的韵律(或规律)。基于固定而有限的元素种类(如质子、中子、电子三种元素),加上简单的组合规律(如电子围绕质子和中子),形成所谓的「单纯造形」。同样地,EIT造形也是基于固定而有限的元素种类(如引擎、接口、轮胎三种元素),加上简单的组合规律(如引擎透过接口来呼叫轮胎),也形成了「单纯的造形」。

九、结语

画家毕加索曾说过,绘画是减法的过程(process of elimination)。画出的作品具有<简单性>,引领人们去领悟具<复杂性>的真实。他说道:“艺术不是真实,它是一种谎言,让我们去领悟真实。”(Art is not truth. Art is a lie that makes us realize truth.)
  设计师保罗.兰德也说,我们会从最复杂的部分开始着手,最后的成品却具有<简单性>。这个减法过程本身是复杂的,然而一旦达到简单了,就能发挥杠杆作用,让人们能面对变化、掌握复杂。乔布斯(Steve Jobs)也曾说到:“简单比复杂更难,你必须努力让你的想法变得清晰明了,让它变得简单。但终究是值得的,因为只要你获得其<简单性>,就能搬动大山了。”(Simple can be harder than complex:you have to work hard to get your thinking clean to make it simple. But it’s worth it in the end because once you get there, you can move mountains.)

设计,就是把一件复杂的事简单化,在把简单化出的形式(Form),用事实(reality)和逻辑(logic)加以检验( verify),最后,再以直觉把形与复杂本质结合在一起。就像爱因斯坦所设计的公式”E=MC平方”具有<简单性>,让人们能掌握复杂的质、能与光速的关系。同样地,架构设计造形(如EIT造形)的<简单性>,提升了人们擁有面對软件复杂多变的能力;唯有熟谙此道,才能创造架构和产品的<未来性>,才能掌握未來意想不到的機會。

相关文章:

1.高焕堂提倡的4项假设性思维

2.架构师未来性的基础:简单性

3.介绍溯因推理、减法设计与未来性

4.高焕堂的架构未来性7原则

5.认识EIT造形与减法设计

6.傑出的造形:太極

7.架构师的未来性思维地图

~ end ~

架构师未来性的基础:简单性相关推荐

  1. 最新JavaEE系统架构师学习路线之基础篇

    大纲: 第1阶段(Java程序员) - Java语言基础 第2阶段(Java初级软件工程师) - JSP.Servlet.HTML.CSS.JS.Bootstrap.XML.AJAX.MySQL.SQ ...

  2. JavaEE系统架构师学习路线之基础篇

    大纲: 第1阶段(Java程序员) - Java语言基础 第2阶段(Java初级软件工程师) - JSP.Servlet.HTML.CSS.JS.Bootstrap.XML.AJAX.MySQL.SQ ...

  3. 2019最新《JavaEE系统架构师学习路线之基础篇》

    下载地址:百度网盘 大纲: 第1阶段(Java程序员) - Java语言基础 第2阶段(Java初级软件工程师) - JSP.Servlet.HTML.CSS.JS.Bootstrap.XML.AJA ...

  4. 软考笔记(一)高级系统架构师/分析师:计算机系统基础

    目录 软考官网 报名通道 软考架构师笔记(一):计算机系统基础 软考架构师笔记(二):计算机网络基础与信息安全 软考架构师笔记(三):操作系统基础 软考架构师笔记(四):企业信息化与系统规划 软考架构 ...

  5. 软考笔记(二)高级系统架构师/分析师:计算机网络基础与信息安全

    目录 软考官网 报名通道 软考架构师笔记(一):计算机系统基础 软考架构师笔记(二):计算机网络基础与信息安全 软考架构师笔记(三):操作系统基础 软考架构师笔记(四):企业信息化与系统规划 软考架构 ...

  6. 【架构师】【数据库基础】【笔记 01】快速了解数据库系统的重要概念01

    1 数据库的架构组成: 下图为数据库的基本的架构图,这个图显然是从数据库的基本的功能块的划分逻辑来做的. 我们想象的数据库系统,包括软件和使用者,硬件和软件各个方面的角度.对于认为数据库到底是什么的定 ...

  7. 系统架构师(软考)----数据库基础

    数据库系统结构 三级模式 外模式:有多少个用户就有多少个 外部视图 用户看到的或使用到的那部分数据 概念模式:全局只有一个 全体数据的逻辑结构 内模式:内部视图 存储记录的类型.存储域 两级映像: 外 ...

  8. 阿里深资架构师整理的Java 基础知识小抄 赶紧收藏

    本篇算是 Java 的基础知识小抄吧,之所以说小抄是因为觉得涵盖不是很细很全,但是基本的内容都有,当然后头还会继续完善,只是不会再用笔记录了!按照现在的习惯,先附上一张思维导图: 1. 安装与环境配置 ...

  9. 系统架构师学习笔记-信息系统基础知识

    目录 信息与信息系统 信息化基础 信息与信息系统 信息的概念:信息是客观事物状态和运动特征的一种普遍形式,客观世界中大量地存在.产生和传递着以这些方式表示出来的各种各样的信息. 信息系统:一种以处理信 ...

最新文章

  1. 把Excel文件中的数据读入到DataGrid中
  2. 【PP操作手册】工程变更创建的创建
  3. 前端技巧-JS元编程ES6 symbol公开符号
  4. 【Servlet】解决org.apache.tomcat.util.modeler.BaseModelMBean.invoke Exception invoking method……
  5. 虚拟机以前能上网,突然上不了网
  6. 粘包问题以及解决方法
  7. C语言和设计模式(备忘录模式)
  8. 粘性定位(HTML、CSS)
  9. C#实现在图片上斜着写字
  10. 存储过程实现创建修改表及其数据
  11. 2021年3月PHP免费自学最全教程来了
  12. c++最近公共祖先LCA(倍增算法和tarjan)
  13. 常见随身WiFi设备总结
  14. R语言入门——数据快速读取与查看(含实例代码和参数讲解)
  15. PhotonServer中日志的配置
  16. 部署 redis 和基本操作
  17. Training generative adversarial networks with limited data.
  18. Sublime Text 3中文包安装
  19. 阿里格灵深瞳计算机视觉岗实习面经
  20. python能不能互动执行_细思恐极,插上U盘就开始执行Python代码

热门文章

  1. oracle传date参数十二小时,Oracle数据库中 to_date()与24小时制表示法及mm分钟的显示...
  2. I/O多路转接之poll 函数
  3. 信号的基本概念以及信号的产生
  4. java web开发环境搭建
  5. 1062. Talent and Virtue (25)
  6. 【Leetocde | 24 】152. 乘积最大子序列
  7. reverse函数:反转容器内容
  8. 腾讯,字节等大厂面试真题汇总,进阶学习资料!
  9. linux文件系统只有几k,关于Linux文件系统的的简单理解和认识
  10. php 方法参数传递,在PHP中将实例方法作为参数传递