本文引自周爱民老师[就职于南潮(Ruff),现任架构师一职]写给《程序员必读之软件架构》一书的推举序。
编者按:软件架构师是在一个软件项目开拓过程中,将客户的需求转换为规范的开拓操持及文本,制订项目的总体架构,并辅导开拓团队完成这个操持的职员。软件架构师主导系统全局剖析设计与履行和关键技能决策。所谓的架构角色,是对思维和技能上的双重寻衅,也该当是所有开拓者的终极目标。希望此文对想要成为、即将成为或已经成为架构师的朋友受用。
有一本书叫《不雅观止》,写的是微软研发Windows NT 的一段故事。“不雅观止”在这里的意思是说“看到这些,就无需再看了”,由于世上之物亦无过于此。20 多年过去,如今微软在操作系统上面临着的各类寻衅与困境,实在与《不雅观止》所叙的研发方法、理念与目标有着与生俱来的血缘关系。

另一个与“看”干系的词汇是“所见即可得”(WYSIWYG)。这个词以及与此干系的WIMP(Windows, Icon, Menu and Pointer)曾经主导了全体人机交互的设计理念。也是在20 多年前,Borland 为Windows 桌面系统成功地设计了跨措辞的VCL,由此“所见即所得”成为Borland 对“如何更便捷地构建UI”的基本假想,以至于这家伟大的公司在互联网时期来临时决定“用VCL 描述界面的办法来办理‘网站设计’的问题(RadPHP)”。
然而,互联网上的网页是没有WIMP 的;移动设备上的操作系统也不再采取与Windows NT类似的办法开拓。
Borland 在几年之前将全体开拓工具产品线都卖掉了。当时盛大的一个Delphi 圈子发起了一次“思念活动”,组织者说:“爱民,你该当会为那个时期写点什么吧?”
我在那个思念网页上写下了五个字:所见即所碍。
2. 要学会去听,然后忘掉
我常日说架构是一种能力,架构角色则是哀求你在详细事务中行使某些行为,而架构师则是用来标识这些能力与行为的一个职务。
当一些人将个人发展定义为“职业发展”时,就表现为“若何成为架构师”这样的问题。
对此有三种办理方案:
第一种是印一张写着这样头衔的名片,而“是与不是”架构师并不主要;第二种是直接否定这个职务的意义,比如声称敏捷天生便是反架构的,于是“架构师”变成了要打倒的工具,以是成不成为这个将被打倒的工具也就不主要了;第三种则干脆声称“大家都是架构师”,既然大家都是了,那么“如何成为”也自然就不主要了。我们大多数人都具有架构的能力,并且也或多或少地行使某些架构角色的行为,唯一缺少的只是一个叫做“架构师”的头衔而已。问题出在我们总是期望别人通过这样的头衔来认可自己。于是我们为自己贴上这样或那样的标签,然后跟别人持有的同种标签去比对,期求涌现同等或找出某种差别。于是我们听到各类声音:某某某真的是/不是、像/不像架构师;如果是架构师,那么就要这样那样,以及若何若何;实在这个架构、这样的架构,或某种架构该当怎么做;以及架构是什么,架构师是什么,等等。回顾“三种办理方案”,仍是困在这样的认可求同之中,与之在做着各类斗争罢了。
实在不单是你的所见阻碍了你自己,你还被别人的所见阻碍着。
3. 要学会去做,然后忘掉
朋友跟我聊他家的两岁小孩:我刚把桌子整顿好,一转眼杯子碗筷什么的都全摔地上了。我问:“怎么了?”他说:“小孩子什么也不懂啊,她看到桌布以为喜好,就一把抓过去……”
小孩子没能看到桌子上还有杯子,但正由于他们的视线里没有杯子,他们的行动才大略直接,才直达需求,才迅速。而我们的眼睛里有杯子、桌子、桌布等统统,我们经年累月地掩护着个中的次序与关系直到这些东西混成一体,然后我们便日日坐守在它们的面前,而又无觉他们的存在。
正是我们自己不知不觉地设定了这些事物之间的边界,并把这些界线、层次与逻辑井然的东西称为“系统”。当我们从那些无序的事物中识别出了这样的“系统”并用一些观点、名词去定义了它们之后,我们对此的统统知识也就固化了。当这种秩序被建立起来之后,我们也就得到了对有序和无序(没有你所设定的“这种秩序”)代价的识别与肯否;当我们设定了各类代价、不雅观念、不雅观察与系统的模型观点之后,也就完成了这个别系的架构。
但这一过程,包括完成这一架构——它可以命名为“天下不雅观”——的方法以及结果,在实质上不过是让你从一个格子跳到了另一个格子而已。我们处在各类界线之中,再也无法回到两岁小孩的、统统无碍的视角:在那个视角下,根本就没有所谓的边界。你之以是时时在寻求跨界,实在是源自你假设了“存在边界”,这就犹如全栈的含义实在是“没有栈”,而当有人信心满满地要“成为全栈工程师”时,他的眼里便又有个“这个栈”的存在。
所谓跨界不是指你能力与方法上的变革,你的作为取决于你的格局,你的格局取决于你的所见。
4. 要学会超越
架构师须要超越自己与别人的所见,由于你不雅观察与架构的工具称为“系统”,你看到系统多少的原形,决定了你用若何的影像去表现它,并进而推进与实现这种影像,亦即是架构。我们既已知道的、理解的、明白的,形成了我们的知识与行为的统统,却也正是阻碍着我们提高的东西。
这些障碍正是你以为你最器重的、最不可放弃的、最鲜血淅沥体验过的那些履历与造诣。在这些所得与所碍中挣扎与决策,便是架构师的全部职责。因此作为架构师,你须要能够超越自已对系统的既有认识,看到你在光明中——显而易见之处——所未见的,这是你驱动系统架构进化的紧张动力。
以是架构中最难超越的并不是某个大师或前辈,而是你以及你为自己所作的设定。当你设定了“架构师”这个目标,便设定了这个目标所表达的某种影像(角色),你终极可能变得跟这个影像完备同等——成为所谓的“真正的架构师”,但你仍不过是困囿于对这个“角色”的一个假设/设定而已。唯一破局的方法是:超越别人对某个角色的定义,将自己做成这个角色。
至此,你是否还在这个角色之中,便是你的觉悟了。
《程序员必读之软件架构》是一本强调实践、看重实效、轻量级、面向开拓者的软件架构指南。如果你是一名想成为软件架构师的程序员,那么《程序员必读之软件架构》便是你的不二之选。
《程序员必读之软件架构》 作者:[美]Simon Brown,译者:邓钢
作者Simon Brown 环球有名软件架构独立咨询师、讲师,创办了专门谈论软件架构问题的网站“编码架构”(http://codingthearchitecture.com)。他自称是写代码的软件架构师和明白架构的软件开拓者。自2008年以来的7年韶光里,Simon在环球28个国家做过有关软件架构、技能领导力及其与敏捷的平衡等主题的百余场演讲,并于2012年8月在中国举办的ArchSummit环球架构师峰会上以“忧郁的架构师”和“如何设计安全的架构”为主题揭橥演讲,深受与会者好评。Simon已为环球20多个国家的软件团队供应咨询和培训,他的客户既有小型技能初创企业,也不乏环球家喻户晓的品牌公司。