温少的日志

我希望我所作的事情对别人有所帮助!
随笔 - 182, 文章 - 1, 评论 - 1085, 引用 - 9
数据加载中……

关于技术架构师的一些看法

很多人谈架构师,其实有两种架构师,一种是业务架构,一种是技术架构。我的经验和教训局限于技术架构,所以本文特指技术架构师。

毕业前一年,毕业后7年,大约8年的技术领域经验和教训,参加过大小项目若干,有被人传颂的成功经验,也有惨痛的失败教训。在以前一直作为技术尖子,在不同的领域逐步填充各方面的知识,最近一年开始做架构设计。以下是我的一些看法。


技术架构师要有责任心


比如说,过去经历过的一个大项目(数百开发人员,基础引擎数十人),这个大项目有一个基础模块,早期设计不良,有比较严重的性能问题,结构混乱,职责不清,很多人早期就发现了这个问题,众所周知。但是一直没改,说法是,改动的成本太大了,其他的部分要跟着改。但是,越晚改定,付出的成本就会越多。这个基础组件的在随后导致了多个严重问题,包括性能问题(占用内存多),开发效率问题(结构混乱,使用麻烦),等等。多年后,还问起这个组件时候,相关的同事都说,某某组件太烂了,没办法改啦。经常会想起这件事,想这究竟为什么会这样,怎么解决他。责任心是其中最重要的问题,当时的技术架构师没有负责任把这件事情解决了,让他拖下去。

谈到技术架构师的素质,当然要技术功底深厚,但这是基本素质,不是关键素质。我认为技术架构师的关键素质是责任心。作为架构师,你来设计这个架构,它是你的心血,你要“爱”它,为它的长久发展打好基础,甚至牺牲一些短期利益。

我们都是在成长的,经常遇到机会,做超出自己能力范围的事情,架构师在设计第一个架构时,甚至第N个架构师时,都有可能是超出自己能力了,然后在实际的工作中,把能力逐步提高。早期的设计可能是不够好的设计,同时已经应用在实现中了,但是你的能力随后提升了,认识到其中的问题了,你需要改正它,改正是需要成本的,作为架构师,要有责任心,敢于承担责任,对过错负责,把他改过来。

很多项目的顽症都是没有人敢于承担责任留下来的!而作为架构师,就一定要负责任,为万世开太平!


技术架构师要有坚持


有一次,我做了技术架构方面的一个方案,要执行它,大家(包括一些经理)都持反对态度,但是我最终一意孤行,坚决推行,最终取得非常好的效果,成为这个技术架构中最关键的技术之一。

作为技术架构师,可能你在团队中技术把握能力最好,比其他人思考的更多。如果你相信你的技术决定一定正确,那你就坚决推行它,不顾政治,不顾诸神!



遇到不擅长的问题怎么办?


作为架构师,面临的问题多方面,总会又遇到不擅长的领域,这时候,找其他同事,征求他们的决定,一起制定方案,或者干脆完全把决定权交给擅长这方面的同事。一定不要不懂装懂,外行管内行。


做错了,怎么办?

总会有做错的事情,怎么办呢?不要太顾面子,少找借口,接受批评,迅速改进。挨打要立正!别人也不会因为你一个错误而否定你全部的。根据经验,做错了事情然后改进的人,通常更受重用。原因是,错误发生了,领导们知道这个问题的难度,你解决了,就说明你解决了一个有难度的问题。


要深入了解实际情况

Ivar Jacobson最近讲到技术架构师,说执行代码比宏观架构更重要。古今中外,有一个共同的道理,就是细节决定成败。也有说法是“魔鬼总是在细节中”。架构的一些问题总是反映在实现细节中,或者使用细节中。作为技术架构师,你最好能够经常阅读使用架构的开发人员的实际使用情况,打开工程,阅读代码,然后把程序跑起来,观察执行情况。在最近作的一个技术架构中,其中多项重要的技术方案,都是观察了开发人员的代码之后总结然后做的改进方案。

技术架构师要面临的技术细节很多,例如分层细节,数据库命名规范,代码规范,spring配置文件管理,ibatis配置文件管理,日志输出规范,findbugs定期检查,作Eclipse插件把一些技术方案固化下来,经常维护wiki知识库,作code review,整理项目依赖,日构建制品输出管理,等等。每个具体项目的细节都不一样,细节处理不好,就会产生“魔鬼”。


posted on 2008-09-08 23:02 温少 阅读(5353) 评论(12)  编辑 收藏 网摘 所属分类: 推荐阅读

评论

#1楼    回复  引用  查看    

我来瞎说加几句。

其实技术功底和责任心是相辅相成的,记得《蜘蛛侠》里面有一句台词:能力越大,责任越大。

技术高了才能够对更多的事情负责,初学者是无法对整个架构负责的,有了一定能力的人才可以。

真正的高手是不会丢弃自己的孩子的。

对你说的“过去经历过的一个大项目(数百开发人员,基础引擎数十人)”这个大项目的疑惑:
1、这个“基础模块”不能改进吗?应该还有源码吧,为什么不能够通过改进内部代码(不改变“接口”定义)来提升性能呢?是内部代码写的太乱了,谁也看不懂,谁都改不了吗?
那这就是技术问题了,首先是写这个基础模块的人的技术能力,然后是改进这个基础模块的人的能力,我天真的想一下,只要能力够,还是可以改进的吧。

2、不是说三层(n层)的优势之一在于,可以替换一层的代码,而其他层的代码不受影响吗?
那么这个基础模块不行的话,整个换掉好了,为什么要牵扯很多地方呢?难道项目不是按照分层的方式来设计的吗?

也许我这是站着说话不腰疼吧,一点都不了解实际情况,在这里胡说八道呢。所以呢先向大家道歉。请大家原谅!




2008-09-09 07:58 | 金色海洋(jyk)      

#2楼    回复  引用  查看    

@金色海洋(jyk)
LZ说的正是你所问的问题
首先因为这是一个基础模块,再次这是一个很大很大的case
所以这个基础模块肯定很重要,其实我想也许改起来花的时间也就个把星期,但是谁也无法估计对整个项目带来什么影响,所以这个时候就要架构师的责任心了,然后就是架构师的坚持,最后是架构师的洞察力。
2008-09-09 08:47 | 横刀天笑      

#3楼    回复  引用  查看    

技术构架师应该是博才
2008-09-09 08:52 | xjb      

#4楼    回复  引用  查看    

--引用--------------------------------------------------
金色海洋(jyk): 对你说的“过去经历过的一个大项目(数百开发人员,基础引擎数十人)”这个大项目的疑惑:
1、这个“基础模块”不能改进吗?应该还有源码吧,为什么不能够通过改进内部代码(不改变“接口”定义)来提升性能呢?是内部代码写的太乱了,谁也看不懂,谁都改不了吗?
那这就是技术问题了,首先是写这个基础模块的人的技术能力,然后是改进这个基础模块的人的能力,我天真的想一下,只要能力够,还是可以改进的吧。
2、不是说三层(n层)的优势之一在于,可以替换一层的代码,而其他层的代码不受影响吗?
那么这个基础模块不行的话,整个换掉好了,为什么要牵扯很多地方呢?难道项目不是按照分层的方式来设计的吗?
--------------------------------------------------------
关于第一条,这个东西和能力无关,谁能保证一开始做出的东西就是完美无比的,架构这个东西要不断完善的,也许你今天觉得很好,过几个月你又发现更好的处理方法了。至于你说得能不能改,可以改,代价不小,基础模块改了以后,基于你的架构做的项目就要大改动了,不管是新项目还是旧项目都会带来很多风险和工作量,老板看不到你的工作量,只是知道你延误了工期,没有大的责任心,谁愿意去做这个事啊。
至于第二条:所谓的“代码不受影响”,那是水平很高的人分的层才做的到,现在阶段我们这些做高层开发的人还很难分出这么合理的层。
2008-09-09 09:12 | kiler      

#5楼    回复  引用  查看    

比如说,过去经历过的一个大项目(数百开发人员,基础引擎数十人),这个大项目有一个基础模块,早期设计不良,有比较严重的性能问题,结构混乱,职责不清,很多人早期就发现了这个问题,众所周知。但是一直没改,说法是,改动的成本太大了,其他的部分要跟着改
========================
这不是责任心的问题,问题在于没有测试,谁也没有信心去动这些代码,谁也不管去。如果技术架构师冒然去重构,即使你敢负责,也是比较单纯的

2008-09-09 09:53 | 紫色阴影      

#6楼    回复  引用  查看    

晕了,这都是什么呀?

这个思维逻辑好像很混乱。
2008-09-09 09:57 | 金色海洋(jyk)      

#7楼    回复  引用  查看    

我们组长就一垃圾
2008-09-09 11:58 | pythonic      

#8楼    回复  引用  查看    

楼上的,说你们组长一个垃圾,对你有什么帮助,对跟别人交流有什么帮助,多半是发发牢骚,浪费别人的事件而已。、
至于楼主的文章,通俗易懂,我个人有一个小疑问,就是责任心放在任何地方都很重要,在这个基础上,才是架构师的雄厚的技术能力。否则如果我责任心强的话,是否我也可以做架构师了?
2008-09-09 16:28 | 自由人      

#9楼    回复  引用  查看    

我的几点想法

对于已有的底层模块设计
1 功能专一 ,耦合度低 ,
2 功能与业务无关(很重要,跟业务相关就要剥离出来)
3 后期维护时
3.1 原有的接口不变
3.2 功能是扩展
4 发现3 不能实现了的话 ,重启炉灶

对于重构
我的想法是 效益决定
效益 == 就是开发人月

重构产生的节约成本 减去 重构的成本 ==效益

if 效益大于 0
干 他一票

if 效益 小于 0
死都不干





2008-09-10 11:40 | 徐文兵      

#10楼    回复  引用  查看    

要敢于承认错误,敢于请教,发现错误改正错误。
2008-09-11 10:48 | 镜涛      

#11楼    回复  引用  查看    

文章不错.受教了.以前一直不知道架构上到底是干什么的,新换了一家公司,总算是小邻教了一把,不过这个架构用起来感觉不太爽,必竟没有太OO,还没有达到我所认可的OO的程度,不过项目中还是应用了编程规范,接口形式等等,至少让我学到了一些东西,看到了以前我做的工作和现在的区别与问题.
2008-09-24 10:08 | 毁于随      

#12楼    回复  引用  查看    

说的不错!
2008-10-17 11:12 | Artech