本文引自周爱民老师[就职于南潮(Ruff),现任架构师一职]写给《程序员必读之软件架构》一书的推荐序。

编者按:软件架构师是在一个软件项目开发过程中,将客户的需求转换为规范的开发计划及文本,制定项目的总体架构,并指导开发团队完成这个计划的人员。软件架构师主导系统全局分析设计与实施和关键技术决策。所谓的架构角色,是对思维和技术上的双重挑战,也应该是所有开发者的终极目标。希望此文对想要成为、即将成为或已经成为架构师的朋友受用。

1. 要学会去看,然后忘掉

有一本书叫《观止》,写的是微软研发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 全球知名软件架构独立咨询师、讲师,创办了专门讨论软件架构问题的网站“编码架构”(http://codingthearchitecture.com)。他自称是写代码的软件架构师和明白架构的软件开发者。自2008年以来的7年时间里,Simon在全球28个国家做过有关软件架构、技术领导力及其与敏捷的平衡等主题的百余场演讲,并于2012年8月在中国举办的ArchSummit全球架构师峰会上以“郁闷的架构师”和“如何设计安全的架构”为主题发表演讲,深受与会者好评。Simon已为全球20多个国家的软件团队提供咨询和培训,他的客户既有小型技术初创企业,也不乏全球家喻户晓的品牌公司。《程序员必读之软件架构》 作者:[美]Simon Brown,译者:邓钢

目 录

推荐序一:架构师真正要学会的事情 ix

推荐序二 xii

译者序2.0 xiii

序 xvi

关于本书 xix

软件架构培训 xxii

Part Ⅰ 什么是软件架构

第 1章 什么是架构 2

第 2章 架构的种类 4

第3章 软件架构是什么 6

第4章 敏捷软件架构是什么 8

第5章 架构对上设计 11

第6章 软件架构重要吗 13

第7章 问题 15

Part Ⅱ 软件架构的角色

第8章 软件架构的角色 18

第9章 软件架构师应该编码吗 22

第 10章 软件架构师应该是建造大师 25

第 11章 从开发 者到架构师 30

第 12章 拓展T 32

第 13章 软技能 34

第 14章 软件架构不是接力运动 36

第 15章 软件架构要引入控制吗 38

第 16章 小心鸿沟 40

第 17章 未来的软件架构师在哪里 42

第 18章 每个人都是架构师,除非他们有其他身份 44

第 19章 软件架构咨询师 46

第 20章 问题 48

Part Ⅲ 设计软件

第 21章 架构驱动力 50

第 22章 质量属性(非功能需求) 52

第 23章 处理非功能需求 55

第 24章 约束 57

第 25章 原则 60

第 26章 技术不是实现细节 63

第 27章 更多分层等于更高复杂度 66

第 28章 协同设计是一把双刃剑 68

第 29章 软件架构是对话的平台 70

第30章 SharePoint项目也需要软件架构 72

第31章 问题 74

Part Ⅳ 可视化软件

第32章 沟通障碍 76

第33章 对草图的需要 78

第34章 无效的草图 81

第35章 C4:语境、容器、组件和类 91

第36章 语境图 94

第37章 容器图 98

第38章 组件图 102

第39章 是否包含技术选择 107

第40章 你会那样编码吗 110

第41章 软件架构和编码 112

第42章 你不需要UML工具 117

第43章 有效的草图 120

第44章 C4的常见问题 124

第45章 问题 126

Part Ⅴ 为软件生成文档

第46章 代码不会讲述完整的故事 128

第47章 软件文档即指南 131

第48章 语境 136

第49章 功能性概览 137

第50章 质量属性 139

第51章 约束 141

第52章 原则 143

第53章 软件架构 145

第54章 外部接口 147

第55章 代码 149

第56章 数据 151

第57章 基础设施架构 153

第58章 部署 155

第59章 运营和支持 157

第60章 决策日志 159

第61章 问题 161

Part Ⅵ 开发生命周期中的软件架构

第62章 敏捷和架构的冲突:神话还是现实 164

第63章 量化风险 167

第64章 风险风暴 169

第65章 恰如其分的预先设计 173

第66章 初识软件架构 179

第67章 问题 183

Part Ⅶ 金融风险系统

第68章 金融风险系统 186

Part Ⅷ 附录:“技术部落”的软件指南

解决方案架构师我需要懂代码吗_架构师真正要学会的事情相关推荐

  1. 解决方案架构师我需要懂代码吗_架构师不写代码,能行吗?

    原标题:架构师不写代码,能行吗? 从什么时候起,技术角色的提升就意味着脱离技术与交付?CTO 不写代码已经引起诸多争议了,架构师也不写代码,能行吗? 就目前看来这似乎没什么问题.毕竟,写代码是开发人员 ...

  2. 解决方案架构师我需要懂代码吗_“请问需要加汤吗?”火锅店背后隐藏的商业暗示,你都看懂了吗?...

    "这个天儿,真冷啊~我们去吃火锅吧!" 寒冷的冬季,火锅是我们许多人的不二选择,一口蘸着调料的毛肚下去,全身都是幸福的味道.如果能免费吃上一个月,那简直是幸福到可以原地爆炸了! 火 ...

  3. 架构师成长之路(3)--如何成为架构师(方法)

    前言: 哲学家常思考的问题:" 我是谁?"" 我从哪里来?"" 要到哪里去?不只是哲学家,我想每个人都有自己对这三个问题的认知. 如果我们要成为架构师 ...

  4. 为什么 CTO、技术总监、架构师都不写代码,还这么牛?

    作者| Mr.K   整理| Emma 来源| 技术领导力(ID:jishulingdaoli) 常常会被问到这样的问题:CTO.技术总监.架构师很少写具体代码,为什么还很牛逼的样子,拿这么高工资? ...

  5. 不认识java代码_程序员进阶:优雅的代码对于一个架构师的重要性

    lison:复旦大学工程硕士,专注技术十年,产品控.代码控,拥有丰富的项目经验,主持研发了多个成功上线的大型互联网项目.热爱互联网,热衷于各种web技术,精通JAVA.J2EE和前端开发,擅长互联网高 ...

  6. 架构师必须搞懂DNS,一篇文章就够了。

    转载自 架构师必须搞懂DNS,一篇文章就够了. 概念 DNS,全称Domain Name System,即域名系统,搞清楚,它不是DNF地下城与勇士. DNS是怎么来的,我们知道要访问一个服务器的资源 ...

  7. java的string访问某个元素_架构师必懂的——RBAC基于角色的访问权限设计

    RBAC 是基于角色的访问控制(Role-Based Access Control )在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限.这就极大地简化了权限的管理.这 ...

  8. 做好架构师,要懂微服务,汇总微服务架构落地的15种框架

    这两年,微服务这个概念火了,火到什么程度呢?2016年有一个统计说,两千家企业里,30%在使用微服务,15%在实验开发和测试微服务架构,24%在学习微服务准备转型,只有剩下的30%的企业没有使用微服务 ...

  9. 为什么CTO、总监、架构师都不写代码,还这么牛逼?

    见字如面,我是军哥! 常常会被问到这样的问题:CTO.技术总监.架构师很少写具体代码,为什么还很牛逼的样子,拿这么高工资? 其实,这个问题本身就错了.就好比问:导演.制片人为什么不懂演戏,还能指导演员 ...

最新文章

  1. 智源研究院首席科学家刘嘉:认知神经的未来发展规划是什么?
  2. 怎样隐藏“滚动条”?
  3. php网页文字居中代码怎么写,html里文字居中代码怎么写?_WEB前端开发
  4. 常用公有云接入——阿里
  5. spring pojo_使用Spring将POJO公开为JMX MBean
  6. LLVM每日谈之十二 LLVM的源码分析之Pass相关
  7. c# MEF框架(四 见证奇迹的时刻之实战应用)
  8. 酷狗音乐linux版_酷狗音乐概念版APP内测获用户好评:极简化,更高级
  9. juqery-筛选器-找前后上下
  10. 虚拟内存的配置(页面文件大小)
  11. day048 BOM和DOM
  12. itextpdf添加表格元素_基操勿6第四期:PPT表格美化
  13. Leetcode 110.平衡二叉树
  14. 我的团长我的团第二十七集
  15. GNS3中配置直连交换端口的路由器端口IP地址
  16. 游戏行业如何做防护?游戏被攻击怎么办?
  17. 以上是周末少先队活动照片,涉及到7个小队的同学参与拍照
  18. 个人日记开发最终实现
  19. 浅析互联网产品设计中的色彩心理学
  20. 啥是预乘?——Nuke中的Premult(预乘)和Unpremult(预除)

热门文章

  1. 服务器svn仓库地址修改,服务器svn仓库地址修改
  2. Java中SQL语句写模糊查询_到底Java里的模糊查询语句该怎么写
  3. 前端调试接口技巧 更好的配合后端进行接口调试
  4. Vue基础实现bilibili移动端页面
  5. 基于天鹰算法改进的DELM预测-附代码
  6. java类集(List/Set/Map/
  7. Pytorch 目标检测和数据集
  8. 视频教程-C#WinForm工业企业销售管理系统开发-C#
  9. Overleaf DropBox同步性测试和同步周期
  10. 快速上手wap网站开发