架构师之我见

普通网友 普通网友     2023-01-25     308

关键词:

以下内容即将发表在8月份的InfoQ中文站电子刊物《架构师》中,主要谈到了我对架构师这个角色的一些理解与认识,有兴趣的朋友也可以留言,我们共同探讨这个话题。

 

架构师之我见

                                   

                                                2009-08-06

架构师是一个项目组的灵魂人物,他决定着整个系统的技术选型、整体架构以及模块划分,同时还可能担当与领导层的沟通角色,从某种意义上来说,架构师在很大程度上决定着项目的成败与否,正所谓火车跑得快,全靠车头带。
 
很多优秀的架构师都是从一个优秀的开发人员转变过来的,但优秀的开发人员未见得都能成为合格的架构师。与架构师相比,开发人员所需担当的任务相对狭隘的多,其最大的目标就是编写出精良的代码、做好充分的测试以及撰写高质量的文档等;而架构师所要面对的则相对宽泛得多,除了过硬的技术之外,还需要有良好的表达能力,同时还要有宏观的驾驭整个系统的能力。
 
有人曾说过,20几岁的编程天才好找,但30多岁的优秀架构师难寻。架构师何其难?除了敏锐的洞察力之外,我认为一个好的架构师必须具备如下几方面的素质:
 
A. 过硬的技术能力。有人说架构师就不需要编写代码,只需设计整体架构就行了。但我认为这是很片面的,试想一个人如果长时间不写代码,他还能具备持续的技术敏感度么?当然了,这里所说的写代码并非一般开发人员的行为,而是让自己保持住对代码的感觉。还有人说架构师不一定是技术高手,这一点我很同意,但他一定是个优秀的开发者。
B. 良好的沟通能力。这一点尤为重要,因为架构师需要与项目组的开发人员以及领导层不断交换意见,向对方传递自己的设计意图与思想,没有良好的表达与沟通能力是很容易出现问题的。这一点在沟通方式并非母语的企业中尤为明显。
C. 良好的软件工程素质。虽说架构师不是项目经理,但我认为他需要对软件开发过程有清晰明确的认识,这里的开发过程是个泛指,也许是RUP,也许是XP,是什么无所谓,但这种工程素质是每个优秀架构师必备的品格之一。
D. 宽广的知识领域。架构师的眼界一定要开阔,绝对不能局限于眼前的小范围事务,否则极易出现“鼠目寸光”的后果。这就需要架构师不断学习,这里的学习既包括技术上的,同时也包括业务上的以及沟通上的。
E.  领域知识。架构师务必对自己所从事的业务领域有深刻的认识,他未必要成为业务专家,但他一定要对业务知识有深刻的理解。很难想象经常从事金融领域项目的架构师能轻松设计好电信领域的项目架构。知识需要积累,业务也是这样的。
F.  处理系统非功能性需求的本领。架构师尤其需要对系统的性能、容错、并发等非功能性需求方面有独到的认识与解决办法。一个项目到了后期,往往都是这些问题成为整个项目的瓶颈,这时架构师就要发挥其优势了。
 
架构师之路是崎岖的,充满了荆棘与挑战,但这却是无数开发者的梦想。架构师是多项技能与素质的综合体,每一位以此为目标的开发者都需要在平日的工作中不断提升自己,在这里我衷心的祝愿架构师这个梦想能照进每一位有心人的现实。

项目研发流程及管理之我见

...的数据字典及框架设计。再到负责整个系统的需求评审及架构设计。这一路见证着程序猿的成长。但当我们逐步成为一名架构师,或是一名项目管理人员时,会发现一个项目的成功,会牵扯到各式各样的问题及风险。无论是系统... 查看详情

编译原理之我见

...编译原理其实就是像塑造一个翻译师一样,赋予它翻译的架构即可,但是经过调查后,结果却不是我所想,编译原理就是将高级语言翻译成计算机语言(即计算机所能识别的二进制代码)所遵守的规律,让电脑可以懂得高级语言... 查看详情

『编程思维』之我见

...c;一个小的桌面应用;大到一个行业产品,庞大的架构,众多微服务组成࿱ 查看详情

领域驱动(ddd)之我见,基于golang实现

...框架。一、一些概念  DDD经典分层:   分层架构的一个重要原则是:每层只能与位于其下方 查看详情

过拟合之我见

    查看详情

闭包之我见

一、闭包是什么?  · 闭包就是可以使得函数外部的对象能够获取函数内部的信息。  ·闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。... 查看详情

前端之我见(代码片段)

1.HTML介绍1.1服务器本质1importsocket234sk=socket.socket()56sk.bind(("127.0.0.1",8080))7sk.listen(5)8910whileTrue:11conn,addr=sk.accept()12data=conn.recv(8096)13conn.send(b"HTTP/1.1200OK\\r\\n\\r\\n")14conn.s 查看详情

httphelper之我见

    前几月一直用一个Http的访问类去调用WebApi,说句实话最开始没觉有什么,一是技术老,二是觉得比较简单,但是最近我一直关注云开发和AI这块儿微软技术,看到云平台调用API大多类似,所以回想这个早年的调... 查看详情

我之我见:ftp共享

目录1.ftp服务概述...11.1简介...11.2复合TCP连接...11.3数据连接模式...11.3.1主动模式...11.3.2被动模式...11.4数据传输模式...11.5ftp类型...12.部署ftp.22.1安装ftp.22.2ftp功能划分...22.2.1ftp访问控制...22.2.2ftp连接及传输控制...22.2.3ftp上传文件默... 查看详情

关于元素居中之我见(干货)

不使用定位    水平居中:text-align=center;(可继承)    竖直居中:margin:0auto;(块级元素)    其他居中:1.文字居中:父元素设置高子元素设置高  line-height=height(父元素)          2.图片居中: ... 查看详情

fec之我见一

顾名思义,FEC前向纠错,根据收到的包进行计算获取丢掉的包,而和大神沟通的结果就是纠错神髓:收到的媒体包+冗余包>=原始媒体包数据   直到满足 收到的媒体包+ 冗余包>=原始媒体包数据   ... 查看详情

关于堆栈和block之我见

临时变量存在栈里对象存在堆里关于blockc与oc最大的区别在于一个是静态语言一个是动态语言先看看c的写法voidtestFunc(){printf("helloworld");}voidtestFuncPoint(void){void(*x)(void)=testFunc;x();}  c语言没有block一说,叫做函数指针,其实现... 查看详情

classpathxmlapplicationcontext源代码阅读之我见

由于本人的能力有限,只能说出自己的见解,如有错漏什么的,请大家批评指出。由于代码封装太多,这里只列出了我认为的部分最重要的代码,一些简单的封装代码,不在下面列出。由于代码太过于复杂,在本次博客中,只列... 查看详情

jquery中的callbacks之我见

callbacks是jquery的核心之一。语法如下:jQuery.Callbacks(flags)  flags 类型: String 一个用空格标记分隔的标志可选列表,用来改变回调列表中的行为。once:确保这个回调列表只执行(.fire())一次(像一个递延Deferred).memory:... 查看详情

join()方法之我见

JavaScriptjoin()方法定义和用法join()方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。语法arrayObject.join(separator)参数描述separator可选。指定要使用的分隔符。如果省略该参数,则使用逗号作为分... 查看详情

我之我见:samba共享

目录1.Samba概述11.1Samba简介11.2SMB/CIFS协议11.3Samba服务基础11.3.1主要软件包11.3.2系统服务脚本11.4共享账号控制11.4.1共享访问控制11.4.2共享账号管理22.配置Samba服务器22.1服务器端操作32.1.1安装samba服务器端程序32.1.2建立samba认证用户nic... 查看详情

fec之我见三

继续上文讲解:3)标准的RTP头结构如下所示:其中第一个字节中的x标志位是否扩展了RTP头,RTP协议允许用户自定义的扩展,扩展的字段紧挨上述RTP固定头。RTP扩展投中承载如下信息:1).当前包所在的Group组序号,码流由连续的Gr... 查看详情

依赖倒置之我见

  .net程序员对面向对象设计原则以及设计模式的重视似乎不如Java,包括许多有经验.net的程序员,也并没有将面向对象的思想渗透进项目中。我本身就是这样一个例子。C#和Java都是面向对象的语言,设计模式对两者是通用的,... 查看详情