探寻软件的永恒之道 ——评介《建筑的永恒之道》

linux服务器下磁盘IO瓶颈测试 在做维护时,总会遇到类似于IO特别高,但不能判定是IO瓶颈还是软件参数设置不当导致热盘的问题.这时候通常希望能知磁盘的读写速度,来进行下一步的决策. 下面是两种测试方法: (1)使用hdparm命令 这是一个是用来获取ATA/IDE硬盘的参数的命令,是由早期Linux IDE驱动的开发和维护人员 Mark Lord开发编写的( hdparm has been written by Ma 阅读详情
 


从模式说起

“模式”这个词进入中国软件开发者的视野,是从《设计模式》[2]一书开始的。2000年9月,中国的软件开发图书市场还远不如今天繁荣,相信这本书给绝大多数人的都是一种耳目一新的感觉。突然之间看到如此之多精致优雅的解决方案,足以令长期苦苦探索设计之路的开发者们“漫卷诗书喜欲狂”了。

在那个时候,我也是模式的痴迷者之一。还记得2001年,我和朋友的通信中多次表现出这样的痴迷。下面是我2001年10月给朋友Windy的一封信:

对“面向模式的设计”的开悟,在十三陵。

站在长陵的绫恩殿,宏大的建筑,给我一种鹈鹕灌顶的感悟。那天John Vlissides说,Christopher Alexander曾经说中国的建筑给了他很多灵感。今天,我想我抓到了一点大师的感触。

繁复的构造,精巧的设计,却能天衣无缝的组成如此完美的建筑。无疑这是设计的成功。仔细观察之下,发现对于各种各样的建筑,其组成元件——棂椽梁柱——却都是毫无二致。这是多么高的复用程度!这体现了多么成熟的设计体系!

……

在公路边,一些建筑工人在建造一组仿古的房屋。朝代更替,光阴流逝,但工人们仍然能够完美的仿造四百年前的建筑。因为他们一代代流传着精确而形象的模式语言。

尽管我看Shalloway的Design Patterns Explained已经有一段时间,在今天,我终于知道为什么他如此钟情于Alexander的建筑模式了。


可惜,由于缺乏一种文化的积淀,《设计模式》的读者们(包括我在内)都患上了消化不良。我大胆估计,《设计模式》在中国软件业造成的负面效果绝不少于其正面效果。Alan Shalloway曾经说,“模式”并不仅仅限于“设计”,甚至“设计”二字正是导致最多误会的根源[3];John Vlissides在他的Pattern Hatching中列举了对模式的“十大误解”,其中提到“模式并不仅仅是一种解决方案”[4]。但是,有多少人知道,为什么?

正是因为缺乏必要的背景知识,中国开发者对模式的了解往往是片面的甚至是错误的。如果把模式仅仅视为一种解决方案、或者一种反复出现的情况的总结,那么它顶多只对软件开发有一定的帮助或者指导意义;如果只把模式作为预先(up-front)设计的方案,它甚至会导致过分工程(over-engineering)。总而言之,模式顶多只能算一种“好东西”,至于“永恒之道”这种溢美之词,即使最钟情于模式如我,也是不敢出口的。

建筑的永恒之道

在面对一门有数十年思想基础和十余年发展历史的学科时,我们必须承认自己的浅薄,我们必须不断学习。同时,我们必须有自己的思想。苏格拉底说:“我们无知,所以我们有智慧。” 为了真正理解GoF的思想,为了真正理解模式的思想,我们有必要先深入其思想基础。于是,我翻开了手上的书。于是,我看到了与我以往的理解完全不同的知识,我看到了一个崭新的世界。

记得上面的一个问题吗?“模式并不仅仅是一个解决方案”。这句话是什么意思?请看下面这段话:

……模式系统形成了一种语言。

从数学观点看,最简单的语言是一个包括两个系列的系统:

1. 一系列要素或符号。

2. 组合这些符号的一系列规则。

然而,……模式既是要素,也是规则,所以规则和要素不可分。模式就是要素。每一模式也是一个规则,它描述了本身也是其他模式的要素的可能的排列。[5]

于是豁然开朗。从最初的定义开始,模式就不仅仅是解决方案,而是一种完整的语言。作为解决方案,模式构成了语言的要素;而作为语言规则时,模式的意义同样重要,甚至更加重要。而这个方面常常被《设计模式》的读者们忽略了。

仅从书名就可以看出,作者把模式当成“建筑的永恒之道”——这种说法是否有点太不谦虚了?请看作者的解释:

有人已告诉我们,优秀的建筑与低劣的建筑,优秀的城市与低劣的城市之间没有客观的差别。

其实,建筑、城市的好坏之别是一个客观的问题……不过易于理解,为什么人们如此坚信好劣建筑之别没有单一坚实的基础。 这是因为产生这种差别的独特的中心特质无法命名。

(为什么这种特质无法命名?)

把(这种)无名特质想象为一点,我们试的每个词作为一个椭圆。每个椭圆包括这点,但每个椭圆也包括许多远离此点的其他的意义。

因为每个词总是像这样的一个椭圆,所以每个词对于作为点的特质来说,总是太空泛,太不明确,范围太大。没有一个词可以表达无名特质,因为特质太特殊,词太广泛了。但是,它是存在于任何人、任何东西之中的最重要的特质。[6]

很明显,这里所说的“好”的建筑和“差”的建筑,都不包含结构有缺陷的“豆腐渣工程”。在结构工程学能够保证结构的稳固、健壮之后,建筑师们想到的便是如何让建筑真正满足人的需要。在书中,作者多次表示,尽管现代建筑有极其优秀的结构,却缺乏优秀的设计,导致大量的建筑违背人的本性。

我们已经说到了“人的本性”。那么,建筑中“人的本性”在哪里?它就在数千年流传的模式语言中。一个特定的模式,在特定的场景下,辅以特定的相关模式,它就是符合人的本性的,因为模式是“允许其自身内力自我疏解”的,而模式语言又是有活力、能够自我发展的。所以,基于模式设计、设计反向影响模式语言,这样的过程正是“建筑的永恒之道”。

在此有些个人见解:我们已经太习惯于IT图书那种填鸭式的教学方法了,我们已经太习惯于“一本入门应用、一本进阶原理、一本参考资料”的读书方式了。再说一次,当我们面对Christopher Alexander这些人文气息浓厚的技术书籍时,我们必须承认自己的浅薄和无知,我们必须用自己的智慧来思考。中国人最擅长逻辑思维,是以中国人也最容易被一些似乎有意义的词汇蒙蔽双眼而陷入逻辑先验不能自拔。当《建筑的永恒之道》在一开始就告诉你“这种中心特质”无法命名的时候,你是不是很不能习惯?继续读下去,让你快要生锈的大脑运转起来吧。 回到我们的模式

我这里所说的“我们的模式”,是指“软件开发中的模式”。介绍了这么多建筑学中的模式,对于软件开发者有什么意义吗?或者说得更直白一些,模式会是“软件的永恒之道”吗?对此,我没有答案,只有讨论。不过我相信,没有人能够知道真理,有讨论、有思考,我们就能离真理更近一些。

由于此书成于1979年,作者又是一位建筑学家,书中自然也无法给出关于软件开发的答案,仍然只能靠读者自己去思考。读完两遍之后,我的心得大约有以下几点:

----和建筑结构一样,软件中亦有诸多的“内力”。和建筑设计一样,软件设计也应该努力疏解系统中的内力,使系统趋于稳定、有生气。一切的软件设计都应该由此出发。 ----任何系统都需要有变化,任何系统都会走向死亡。作为设计者,应该拥抱变化、利用变化,而不是逃避变化。

----好的软件只能“产生”而不能“创造”,我们所能做的只是用一个相对好的过程,尽量使软件朝向好的方向发展。从这个角度来说,开发的迭代周期越短越好。

----软件的工业化使软件僵死、失去“无名特质”、谬误百出、脱离现实。通过规程、制度来控制,只会使系统内力无从疏解,最终走向崩溃。

----……

我好象没有提到模式?因为整本书讲的都是模式。至于如何在软件的领域中看待模式,那需要你自己去思考、去体会了。

模式到底是不是软件的永恒之道?最终,我还是无法给出一个答案。但是,我相信,充分理解模式语言,充分理解模式语言和设计的关系,会帮助我们提高设计能力,也会帮助我们丰富模式语言。

未完的结尾

本文即将结束。作为对一本书的介绍,我并没有介绍它的著、译质量。不是疏忽,实在是不必说。作者Christopher Alexander用了14年的时间来撰写此书,译者赵冰用了数年的时间来翻译此书——我们所看的IT图书,翻译周期极少有达到一年的。还需要怀疑这本书的质量吗?

在读完第一遍以后,我写过一篇名为《“软件蓝领”批判》[7]的读书心得,引起了许多争论。可惜,参与争论的网友,绝大多数并没有理解我写那篇文章的背景知识,所以大半的讨论都没有意义。在此,我挑选最有意义的一个回复来回答,权当为此文作结,也希望张岩先生能看到这篇文章。

张岩对我说:

Alexander是个建筑师,建筑师关心的是建筑如何能符合人的需要,也就是建筑的“软”质量。至于建筑的“硬”质量,是由结构工程师来确保的,建筑师既没有能力,也没有责任对建筑的“硬”质量负责。因此建筑师的地位类似于软件工程中的总体设计师或曰架构设计师(现在不是也叫Architect了么?),在这一族群里当然没有所谓蓝领的容身之地。但软件就没有“硬”质量的要求了么?当然是有的,所谓编码强度是也。不死机、不溢出、不误操作等等。这些是由程序员来保证的,Architect同样也管不到这一段。因此通常意义上的Software Enginner或者Programmer相当于建筑中的结构工程师的角色。这些人的思维方式应该是内聚的,不能具有发散性,否则“硬”质量无从保证。而模块也是在这一层次上才开始引入的。

要知道,在建筑开发过程中,建筑师是最不受工程化方法约束的人。因此如果讨论工程化方法,是不应该用建筑师的思维方式去类比的。建筑史上有段“佳话”:悉尼歌剧院,建筑师的发散性思维害苦了结构师,结果整个建筑超预算超了一个数量级!但建筑落成之后的收益却比原先预计的高了一个数量级。因此创造性是“建筑师的武器、结构师的噩梦”。建筑与结构是贯穿建筑界始终的一对矛盾,在软件设计中同样存在类似的问题。因此仅仅以建筑学的视角看问题,我个人以为是有点偏颇的。


我在此回答:

你的回复告诉了我很多以前不知道的知识。带着这些知识,我又读了一遍《建筑的永恒之道》。并且,我想我找到了答案。

建筑师不受工程化方法约束,但任何人都受自己的模式语言约束,而模式语言本身是受工程化方法约束的。悉尼歌剧院的例子,是在扩充模式语言,这是非常罕见的。当模式语言扩充之后,再利用这些模式语言来建筑,就能得到“质量提升了一个数量级”的建筑,成本却不会再“超一个数量级”。不知道你最近去过大运村那边没有?Philip Cox在那边设计了一个名叫“锦秋知春”的小区,采用了很多悉尼歌剧院中曾经采用过的元素(或者叫模式),相信它的成本是不会超过预算一个数量级的,对吧?之所以在悉尼歌剧院的例子中出现这样的窘境,我相信是因为结构工程的滞后——人的思想总是超前的,我们应该让滞后、僵硬的物理去适应超前的、有生气的思想,而不是相反,对吗?
 
【Linux】Linux测试磁盘 IO 性能 1.美图 2 hdparm 命令 hdparm 命令提供了一个命令行的接口用于读取和设置IDE或SCSI硬盘参数,注意该命令只能测试磁盘的读取速率。 例如,测试 sda 磁盘的读取速率: [root@server-68.2.stage.polex.io var ]$ hdparm -Tt /dev/polex_pv/varvol /dev/polex_pv/varvol: Timing ca... 阅读详情

相关推荐

建筑永恒(没有代码的Java经典之作)

作者:亚历山大(美)著名建筑学家 内容简介:一本介绍建筑学的经典之作, 中间包含了许多关于建筑理论的阐述,不仅仅 对建筑学产生了深远影响,对软件工程等等学科也影响深远,被称之为没有代码的Java经典之作

建筑软件中模式之异同

<br />        CSDN的透明特别推崇《建筑永恒 》,认为从中探寻软件永恒,并就"设计模式"写了专门文章《探 寻软件永恒 》,其中很多观点我看了很受启发,以前我也将"设计模式" 看成一个简单的解决方案,没有从一种高度来看待"设计模式"在软件中地位,下面是我自己的一些想法:<br />建筑软件某些地方是可以来比喻的<br />特别是中国传统建筑,那是很讲模式的,这些都是传统文化使然,比如京剧 一招一式都有套路;中国画

You will never walk alone 526

建筑永恒.pdf

很好的一本书。对于从设计模式来看这本书的程序员来说,这是一本很好的建筑的书,这本书的写作方式很好,观点很深,深受东方文化影响

探寻软件永恒

 探寻软件永恒——评介建筑永恒》撰文/透明从模式说起“模式”这个词进入中国软件开发者的视野,是从《设计模式》[2]一书开始的。2000年9月,中国的软件开发图书市场还远不如今天繁荣,相信这本书给绝大多数人的都是一种耳目一新的感觉。突然之间看到如此之多精致优雅的解决方案,足以令长期苦苦探索设计之路的开发者们“漫卷诗书喜欲狂”了。在那个时候,我也是模式的痴迷者之一。还记得2001年,我和

[布袋]的布袋 1739

软件永恒-引子

昨天,在地铁上,实在无聊便又拿起&lt;人件&gt;一书来看了, 看到有一章节提到&lt;建筑永恒&gt;一书, 忽然有些感触, 这本书在7年前便计划去阅读的, 到现在还没有看, 真是惭愧不已. 从事软件开发行业7年了,俗话说夫妻有七年之痒, 但软件对我来说, 七年之后不仅不痒,反而更加喜欢了,只不过,一直以来, 天天只知工作,为了工作而软件,而没有认认真真的去思考软件是什么. 幸好她无怨...

黄平华的博客 252

软件永恒-1

建筑永恒》一书还是没有借到,因为上一个读者还没有还。不过这不能阻碍对软件永恒的思考,也许没有参考,更不会限制自己的思想。 先说说“永恒”二字,这两个字实在有些大,因为世间没有什么是永恒的:一个人只能或100岁左右;或者最久的动物乌龟也最多活1000岁;人类从产生到现在也顶多数百万年;地球也只产生46亿年;甚至整个宇宙,也在不断的变化中。。。所以说,真的没有什么是永恒的,特别是IT行业,...

黄平华的博客 231

建筑永恒 (C·亚历山大 著)

永恒  建筑或城市只有踏上了永恒,才会生机勃勃. 第1章 永恒  它是一个唯有我们自己才能带秩序的过程,它不可能被求取,但只要我们顺应它,它便会自然而然地出现. 质  为了探求永恒,我们首先必须认识无名特质. 第2章 无名特质  存在着一个极为重要的特质,它是人,城市,建筑或荒野的生命与精神的根本准则.这种特质客观明确,但却无法命名. 第3章 生机勃勃  在我们自己的生活中...

weixin_34019929的博客 672

Linux如何查看与测试磁盘IO性能

Linux如何查看与测试磁盘IO性能 1. 查看磁盘 IO 性能 1.1 top 命令 top 命令通过查看 CPU 的 wa% 值来判断当前磁盘 IO 性能,如果这个数值过大,很可能是磁盘 IO 太高了,当然也可能是其他原因,例如网络 IO 过高等。 top命令的其他参数代表的含义详见top命令详解 1.2 sar 命令 sar ...

MaueiceWei999的博客 1万+

Linux磁盘io测试

linux磁盘io测试

谢可爱在学习的博客 657

linux系统如何测试磁盘IO性能(读写速度)

之前一直知用dd(device to device)命令可以简单测试磁盘的IO读写速度,但没有深究。 但这次做性能测试的关系,需要得到一个相对精确的值(之前的测试吃过这方面的亏,插个题外话,性能测试一定要首先确认好测试环境。) 网上常见的方法是使用hdparm和dd命令来测试,但实际的使用起来都有问题,而且测试结果总感觉有偏差,心里没底。 于是还是安心研究了下这两个命令,也做了一些测试和分析,简...

灬紫荆灬 5378

设计模式学习必看--建筑永恒

这本书是一本理论介绍性的书籍,从建筑的设计可以演变到软件的设计,它给出了设计模式的宗旨

建筑永恒-软件工程参考

【作者简介】 C·亚历山大,美国建筑师协会颁发的最高研究勋章的获得者,是一位有实践检验的建筑师和营造师,加州大学伯克利分校建筑学教授,环境结构中心的负责人。 《建筑永恒》是全面阐述建筑与规划新观点的系列丛书的第一卷。这套丛书意在提供一套完整有效的方法,来替代我们目前对于建筑、建造和规划的看法,我们希望,它将逐步取代当前的思想和实践。 【内容提要】 《建筑永恒》提出了一个关于建筑设计、建筑和规划的新的理论,该理论的核心是社会成员按照他们自己的存在状态设定他们生活的世界秩序,这一古老方式从根本上构成了新的后工业时代建筑的基础,这些建筑由人们创造……

建筑永恒 The Timeless Way of Building

建筑永恒 The+Timeless+Way+of+Building

Linux 测试 IO 性能(磁盘读写速度)

Linux 测试 IO 性能(磁盘读写速度) 这几天做MySQL性能测试,偌大一个公司,找几台性能测试机器都很纠结,终于协调到两台,IO的性能如何还不知。 数据库属于IO密集型的应用,所以还是先评估下Server的IO性能,看看是否能和线上的机器匹配上。 之前一直知用dd(device to device)命令可以简单测试磁盘的IO读写速度,但没有深究。 但这次做性能测试的

凉城凉心凉忆悲 3万+

linux怎样测试磁盘连接,详解三种Linux测试磁盘IO性能的方法总结,值得收藏,

详解三种Linux测试磁盘IO性能的方法总结,值得收藏,概述在磁盘测试中我们一般最关心的几个指标分别为:iops(每秒执行的IO次数)、bw(带宽,每秒的吞吐量)、lat(每次IO操作的延迟)。当每次IO操作的block较小时,如512bytes/4k/8k等,测试的主要是iops。当每次IO操作的block较大时,如256k/512k/1M等,测试的主要是bw。一、dd命令dd是linux自带的...

weixin_34464974的博客 657

Linux查看与测试磁盘IO性能

await 值的大小一般取决与 svctm 的值和 I/O 队列长度以 及I/O 请求模式,如果 svctm 的值与 await 很接近,表示几乎没有 I/O 等待,磁盘性能很好,如果 await 的值远高于 svctm 的值,则表示 I/O 队列等待太长,系统上运行的应用程序将变慢,此时可以通过更换更快的硬盘来解决问题。%util 项的值也是衡量磁盘 I/O 的一个重要指标,如果 %util 接近 100% ,表示磁盘产生的 I/O 请求太多,I/O 系统已经满负荷的在工作,该磁盘可能存在瓶颈。

神棍之路 4627

linux 磁盘IO测试工具:FIO 和dd工具测试

linux 磁盘IO测试工具:FIO (同时简要介绍dd工具测试) 来源:cnblogs  作者:xuyaowen  时间:2019/4/12 8:59:14  对本文有异议 FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证。磁盘IO是检查磁盘性能的重要指标,可以按照负载情况分成照顺序读写,随机读写两大类。 目前主流的第三方IO测试工具有fio、iometer和 Orion,这三种工具各有千秋,在linux 下也可以使用dd 进行简单的磁盘(文件系统)测试(文末补充)。 fio在L.

qq_41800205的博客 2755

linux进程io速率,linux下测试磁盘的读写IO速度-简易方法

参考资料:https://blog.csdn.net/zqtsx/article/details/25487185一:使用hdparm命令这是一个是用来获取ATA/IDE硬盘的参数的命令,是由早期Linux IDE驱动的开发和维护人员 Mark Lord开发编写的( hdparm has been written by Mark Lord , the primary developer and m...

weixin_28726671的博客 405
上一篇: 什么是P2P软件
下一篇: SMIL应用教程
nilong
博客等级 码龄24年 2粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值