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

作者:高焕堂,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.png
图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.png
图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.png
图3. 设计的过程

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

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

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

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

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

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

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

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

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

七、简单造形与美感

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

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

6.png
图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 ~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 基础—— 对Context的理解与使用技巧

一、Context 基础概念 1、什么是Context 1) Context是一个抽象类&#xff0c;其通用实现在ContextImpl类中。 2) Context&#xff1a;是一个访问application环境全局信息的接口&#xff0c;通过它可以访问application的资源和相关的类&#xff0c;其主要功能如下&a…

Android 四大组件 —— 广播(广播机制解析)

在网络通信中&#xff0c;一个IP网络范围中最大的IP 地址是被保留作为广播地址来使用的。比如某个网络的IP 范围是192.168.0.XXX&#xff0c;子网掩码是255.255.255.0&#xff0c;那么这个网络的广播地址就是192.168.0.255。广播数据包会被发送到同一网络上的所有端口&#xff…

Android 基础 —— 活动的生存周期

一、返回栈 Android 中的活动是可以层叠的。我们每启动一个新的活动&#xff0c;就会覆盖在原活动之上&#xff0c;然后点击Back 键会销毁最上面的活动&#xff0c;下面的一个活动就会重新显示出来。 其实Android 是使用任务&#xff08;Task&#xff09;来管理活动的&#xff…

产品经理做市场调研和数据分析的方法

产品经理&#xff0c;你对用户的需求了解多少呢&#xff1f;你知道用户想要什么样的产品吗&#xff1f;你想知道用户将会如何看待你的产品吗&#xff1f;你想知道你设计的产品在用户中的口碑如何吗&#xff1f; 是 的。每一个产品经理都希望在产品开始立项设计前&#xff0c;得…

Android 基础 —— 活动的启动模式

活动的启动模式来说应该是个全新的概念&#xff0c;在实际项目中我们应该根据特定的需求为每个活动指定恰当的启动模式。启动模式一共有四种&#xff0c;分别是standard、singleTop、singleTask 和singleInstance &#xff0c; 可以在AndroidManifest.xml 中通过给<activity…

Android 四大组件 —— 服务

一、服务是什么 服务&#xff08;Service&#xff09;是Android 中实现程序后台运行的解决方案&#xff0c;它非常适合用于去执行那些不需要和用户交互而且还要求长期运行的任务。服务的运行不依赖于任何用户界面&#xff0c;即使当程序被切换到后台&#xff0c;或者用户打开了…

Highlighting System

Highlighting System 法线贴图漫反射着色器 Unity论坛&#xff1a;http://forum.unity3d.com/threads/143043-Highlighting-System-Released 需要条件 Requires Unity 3.5.6 or higher.This package requires Unity Pro, as it uses post-processing!Now supports Unity iOS Pr…

Android 基础 —— 模拟实现拨打电话功能

前面已经学习活动的显示跳转及隐式跳转&#xff0c;也学习 TextView 及 Button 两个控件的使用&#xff0c;下面我们来学习 EditText的使用&#xff1a; EditText 是程序用于和用户进行交互的另一个重要控件&#xff0c;它允许用户在控件里输入和编辑内容&#xff0c;并可以在程…

Android 四大组件 —— 活动(活动的隐式跳转)

上一篇我们讨论了活动的显示跳转&#xff0c;现在来学习活动的隐式跳转 相比于显式Intent&#xff0c;隐式Intent 则含蓄了许多&#xff0c;它并不明确指出我们想要启动哪一个活动&#xff0c;而是指定了一系列更为抽象的action 和category 等信息&#xff0c;然后交由系统去分…

ALAssetsLibrary-代码操作iOS相册资源

2019独角兽企业重金招聘Python工程师标准>>> 在iOS中&#xff0c;我们调用摄像头和选择相册中的资源&#xff0c;我们可以使用&#xff1a;UIImagePickerController类来完成。 当然&#xff0c;我们也可以不使用UI的形式来访问iOS设备的相册资源。 那就是使用&#…

Android 四大组件 —— 活动(使用Intent 实现活动的显示跳转)

一、什么是Intent&#xff1f;Intent的中文意思是目的。在Android中也是“目的”的意思。就是我们要去哪里&#xff0c;从这个activity要前往另一个Activity就需要用到Intent。 下面是 Intent 两个最基本的函数&#xff1a; 1、定义一个Intent [java] view plaincopy Intent in…

Android 项目在Eclipse中的目录结构

Android工程目录 如果使用Eclipse插件ADT开发应用程序&#xff0c;必须要熟悉工程的目录结构&#xff0c;清楚各个目录下面放置的是什么东西。Android工程主要的目录有&#xff1a;src、bin、gen、res等。 不同的Android平台目录结构是不同的&#xff0c;下面以Android 2.3.…

Exynos4412 Uboot 编译工具 —— 交叉工具链 arm-linux-gcc 的安装

一、什么是交叉编译&#xff1f; 在开发主机运行编译器编译内核、应用程序。内核和程序在目标机上运行&#xff0c;这个编译过程被称为交叉编译。编译器运行在开发主机&#xff08;通常是X86体系的PC机&#xff09;上&#xff0c;编译出的的代码是目标机体系结构的&#xff0c;…

Linux学习之CentOS(一)--CentOS6.4环境搭建

一、前言作为一个想从事j2ee后台开发的程序猿&#xff0c;linux系统怎能不学呢&#xff1f;所以&#xff0c;这几天自己准备学习一下linux操作系统。废话不多说&#xff0c;直奔主题。要学linux开发&#xff0c;首先得要安装linux系统吧&#xff0c;这里我在选择之前也挺迷茫&a…

内联函数 —— C 中关键字 inline 用法解析

一、什么是内联函数 在C语言中&#xff0c;如果一些函数被频繁调用&#xff0c;不断地有函数入栈&#xff0c;即函数栈&#xff0c;会造成栈空间或栈内存的大量消耗。 为了解决这个问题&#xff0c;特别的引入了inline修饰符&#xff0c;表示为内联函数。 栈空间就是指放置程式…

eclipse maven scm

http://my.oschina.net/OutOfMemory/blog/178512 1.安装eclipse的maven插件 m2e(http://wiki.eclipse.org/M2E_updatesite_and_gittags)Help->Install New Software...在work with中填入我们需要安装m2e的版本url&#xff1a;http://download.eclipse.org/technology/m2e/…

DS18B20 驱动编写

嵌入式开发平台&#xff1a;mini2440 DS18B20 所用GPIO&#xff1a;S3C2410_GPF(3) 一、DS18B20 时序分析 DS18B20的一线工作协议流程是&#xff1a;初始化→ROM操作指令→存储器操作指令→数据传输&#xff0c;其工作时序包括&#xff1a;初始化时序、写时序、读时序。 1、初…

Android 自定义View实现画背景和前景(ViewGroup篇)

2019独角兽企业重金招聘Python工程师标准>>> 在定义ListView的Selector时候&#xff0c;有个drawSelectorOnTop的属性&#xff0c;如果drawSelectorOnTop为true的话&#xff0c;Selector的效果是画在List Item的上面&#xff08;Selector是盖住了ListView的文字或者…

Linux的mmap内存映射机制解析

在讲述文件映射的概念时,不可避免的要牵涉到虚存(SVR 4的VM).实际上,文件映射是虚存的中心概念, 文件映射一方面给用户提供了一组措施,好似用户将文件映射到自己地址空间的某个部分,使用简单的内存访问指令读写文件&#xff1b;另一方面,它也可以用于内核的基本组织模式,在这种…

svn add Default@2x.png的文件含有@的文件名注意事项

为什么80%的码农都做不了架构师&#xff1f;>>> iOS的Icon里面&#xff0c;包含符号 &#xff0c;svn add Icon2x.png&#xff0c;没法加进去。 解决的办法是&#xff0c;在文件名最后加一个&#xff0c;例如 svn add Icon2x.png 或者svn add Icon\2x.png\ 转载于…