走钢索的人---走出软件作坊:三五个人十来条枪 如何成为开发正规军(十七)

架构师是个很神圣的词。盖茨,世界首富。微软,世界最大最富有的软件公司。盖茨是微软的首席架构师。

好多程序员流口水,一听某人是架构师,就两眼发亮,比技术总监的头衔还要厉害。

一想起架构师,大家就想起那些UML设计工具、类图、时序图,想起那些水泥大楼的框架和地基,想起了那些

如百变金刚的开发平台,想起了那些让人眩目的反射、元数据、FrameWork、设计模式、面向对象、重构。

很多人想当架构师,感觉架构师是技术职业发展的最高境界,在往上走就有管理职能了,如技术总监和CTO或

研发总裁之类的头衔。

李维先生曾经有过一次演讲,讲到了一个架构师应该具备的特性:

1核心软件技术。要攻克数据库设计问题,必须深入了解数据库的工作原理,而不是会写复杂的SQL会管理个

备份会设计个表结构就算精通数据库。有人甚至把会用hibernate\structs\spring当作自己会核心软件技术



2产品特性。你学了那么多核心技术,到底要干吗?我一直在商业软件公司工作,没有在研究所工作过。我各

种技术要做到的就是帮助企业软件生产,如何更快更省力气质量更好市场竞争力更强。我总是以这个原则来

验证一项技术是否对于我的工作来说而实用。现在技术多如牛毛,在各个层次各个领域解决着各个环节的问

题。如果不以解决自己工作中的问题为圆心,很容易陷于到大量学习却越来越茫然找不到出路的境地。

3软件趋势。在企业管理软件开发领域,往往会见到这样的现象:不少开发人员精通客户业务需求,深入第一

线做客户实施。他们学习技术也是为了解决现有手头的问题。尤其企业管理软件开发领域,技术要求并不高

,而如果不了解客户需求,开发的软件实用性就不强,即使你的功能开发的又性能好又安全性好也没实用意

义。所以,不少在企业管理软件开发领域工作多年的开发人员,形成了技术轻视观,甚至有种核心技术学习

无用论的思想。但企业管理软件开发领域,经过十多年的发展,已经面临了不少挑战。但是很多人觉得那是

大环境的事情,大环境不是一个人一个公司能改变能影响的。大环境变,咱们就跟着变。大环境不变,咱也

照旧。但是,我已经经历过了很多时代,见证了很多遗憾,大环境发生改变了,自己却跟不上了。

DOS\WINDOWS时代、单机\局域网时代、互联网时代、移动增值时代。每一个时代都出了黑马,赚取的金钱突

然高出传统模式数倍,而传统模式者还是在继续走传统模式,辛苦的赚钱,而且随着价格战的加剧,越来越

辛苦,但还不思改变者并且还认为不可改变者大有人在。

4创新技巧。我们往往会遇到这样的情况:要解决手头的问题,摆在面前的有N种技术方案。选择哪个都有缺

点,综合来用又感觉牛刀杀鸡了。有时候,我们还会遇到另一种技术选择,未来的软件趋势一定是那样那样

的,但现在还没有达到,现在的技术方案都是过渡期的,所以我们还要等。否则利用现在的过渡期技术,开

发出来就被淘汰了。如果是这种以现状看技术的思路,不管技术发展到什么阶段,都有遗憾,都在向未来的

未来过渡。所以,作为一个架构师,比别人厉害就厉害在,总是能把手里这些技术巧妙的利用,以解决自己

的问题。当然,你想把你手中的技术能用活,你必然是理解这项技术的来龙去脉和这项技术的适用领域,还

要深入理解这项技术的工作原理,还要清楚的认识到你要解决的问题领域,否则,你无法把你的技术和你要

解决的问题结合在一起。

我对李维先生的这四点讲述颇为赞许。架构师总是游走在技术和业务之间,既要兼容软件历史不能割裂又要

面向未来发展,所以我老把架构师称为走钢索的人。

很多人也想成为具有这样特性的架构师,但就是不知道该怎么走这条路。我就讲讲我的经历。

我刚出道的时候,很快成为公司技术出众的程序员。有人跟踪调试了一下午也找不到错误的,找我;有人不

知道这个错误是怎么引起的,找我;有人不知道某个需求怎么实现代码方便,找我;有人要优化数据库性能

,但怎么都速度提不上去,找我;有人要修改一段超复杂的代码,怎么也理不出来,N多判断和函数嵌套,脑

袋思考不过来了,对代码的复杂度掌控不了了,找我;

我就跟一个活雷锋一样,大家也好像觉得我就是个活字典,有技术问题找我总没有错。就这样,我在研发部

有了很好的技术信任,也有了很好的人缘。

而架构师要做的工作,是许多人工作的基础。如果没有很好的技术信任,大家怎么敢把他们的工作搭建在你

的基础之上。如果没有很好的人缘,大家怎么愿意把他们的工作搭建在你的基础之上。

就是由于我解决了很多业务开发的问题,我了解了很多业务开发的现实状况,并且还能提出简洁有效的解决

方法,而且解决方法不死板不铁板一块能保持独立灵活通用性,给其他人的工作带来了很好的工作效率,所

以领导才信任我能做好这一块,并且适合做这一职位。不是随随便便一个人深刻学习了核心技术,然后申请

领导要当架构师。

其实,我开始做的也仅仅是公共代码员。但是,很快面临了一个尴尬。

简单的,虽然可能每个开发组都重复写同样类似的代码,但是由于简单,所以每个业务开发组都自己写了。

复杂的,往往业务开发组组长都认为这个功能是自己这个组的个性功能,所以还是自己写。

所以,只有人们解决不了来找我时,我才能上场。

这干坐着不是回事。我得自己想辙。

于是,我在忙“公益事务”做活雷锋之余,看到他们在扎堆开会我就主动去旁听。每次我都能提出很独到的

见解。并且能帮助他们写公共抽象代码,能帮助他们提高不少工作效率。所以他们非常愿意让我旁听,并且

听取我的意见。我也能很快写完让他们用。他们一用,发现果然好用,而且不用他们自己写代码了,功能实

现的还非常巧妙公用,性能也好稳定性也好扩展性也好。到后来,每次开会都主动叫我。这样,我的工作就

越来越多了。

随着各个业务组不同差异的需求都希望我来帮他们抽象出公共的,我就在思考我手里的这部分代码。我不能

今天他们提一个我写一个。他们倒是轻松了,但我手里就好似一盘散沙一样。于是,我不断重构我的公共代

码,架构体系框架就这样慢慢成型了。各种各样公共工具,调试工具、优化工具、动态设计工具,凡是能帮

助业务开发组人员加快效率的,我都做了工具或写了公共函数DLL。尽量简单易用,不让他们觉得麻烦或不顺

手。

过去,各个业务开发组过去是开发人员素质不齐,有人责任心强,有人随意;有人细心,有人粗心;有人理

解客户业务深刻,有人理解不深刻。所以开发出来的质量良莠不齐。自从这样做了以后,各个组写的代码少

,很多都是我写的公共代码。我的技术好,写的代码质量高,而且是公共的,有错误,一改,大家都没有问

题了。所以我们整体的软件产品的产品质量、生产速度都提高了不少。

我发现,大家越找我,各种需求交织在一起,越复杂,我就越需要更深入的学习技术,深刻理解各种技术的

差异性和适用领域,去思考各项技术的发展历史、未来趋势,并且自己做DEMO,看能不能更好的解决大家的

问题。因此,我的技术能力也越来越高。如果我不去解决这些不去第一线想也想不到的客户需求,我根本就

想像不出我某项技术还能这样用。

这就是我的螺旋上升之路。

我那天重翻上个月的《程序员》杂志,看到了我朋友周爱民写的一篇《做人、做事、做架构师-架构师能力模

型解析》,他也提到四点,技术能力、业务能力、人际关系、个人内在素质。和我的情况很类似。

有一部分所谓的架构师,技术超深厚,框架堪比Spring之类,但自己一个人闷头写框架不断优化,力竭使用

最先进的技术思想,希望把最豪华的设计模式融进去,希望把OSGi融进去,希望把AOP融进去,全无视那些想

利用框架减轻自己工作量提高自己工作效率的应用功能开发同事。这是在用公司工资玩技术呢,还是在满足

个人技术幻想呢,还是在实验呢?到底在干吗?价值在哪里?

还有的人不会推广自己的框架。不善言辞,就幻想着技术总监能够通过行政命令让大家必须用框架,能不自

己写代码就不自己写代码,能交给框架做的就交给框架做。但技术总监号召完了,大家仍然我行我素,各自

开发为政,让框架开发者很孤单。

还有的人也不会推广自己的框架,沉迷在自己的理想世界。好不容易技术总监召集大家让大家来听听框架如

何应用,但自说自话,满口自己最得意的词汇,听得业务功能开发人员云山雾罩。大家问些问题,如这样的

业务开发难题,框架怎么解决?于是,框架开发员就和业务开发员争论了起来。框架开发员觉得这根本就不

能答应客户这种变态的需求,而业务开发员说这就是现状。框架开发员说你可以这样这样,业务开发员说这

样太麻烦,框架开发员立刻还口这还麻烦?于是双方各执一词,框架也没推广成功。

我手底下有个框架开发员。他的技术渴望很强烈,为了技术难题攻克,可以不吃不睡。并且技术敏感度很强

,学习也快。所以当时我感觉他是个程序员的料,就把他拉到我的手下。

但是有个问题,他写出的框架代码,在平时开发业务功能的时候挺麻烦。大家可能需要的是一把铁锹,但是

他却给大家N根不同长度不同粗细不同材质的木棍,N个不同形状不同用途的铁锹头。大家会有N种组合。不仅

导致他写代码老超任务期,而且也让使用人感觉没多大帮助。使用起来复杂,而且还得配置这个配置哪个,

需要注意的地方太多。业务开发组的同事就不愿意用,还不如把代码自己直接写死了得了。

超期还会影响业务功能开发组的使用。本来人家是为了想加快自己的工作效率。你答应好这个星期给业务开

发组提供一个功能,但你没有拿出来。就耽误人家进度。你多次拿不出来,人家业务开发组还不如自己开发

一个呢,求人不如求己。

我最后警告他:如果你认为自己技术够牛,那么你必须证明你能很快做出来。如果你认为自己技术够牛,最

好能牛到,只提供一个函数就解决了他们的问题。别这个代理类,那个聚合类,这个唯一实例类。最好连参

数也没有,大家调用一下写一句代码就OK。甚至你做的好,大家都不用调用你的代码,你可以包含在基础框

架中,你自己去判断什么时候什么应用需要执行这个动作。如果你认为自己技术够牛,那么在业务功能需求

发生变化的时候,你能够保证接口不变的情况下还能适合变化,这才你够牛。别让业务开发组的人跟着你也

得改他们自己的代码,那样的设计就很烂了。

小伙听了我的话。进度保证,代码接口简洁。

他说,你真高。我感觉现在我的技术比过去进展飞快。看来人不逼,是不会自己创新更好更快的方法的,老

认为自己现有的方法已经不能优化了。我现在发现,很多我过去写的东西还可以做的更好,我准备在开发任

务之余优化代码,但肯定保证不影响大家,接口还跟过去一样,我要重构一下。

我对小伙的成长感到欣慰。

但是,小伙还有一个没有逾越的鸿沟。这个问题不解决,我知道,他不会成为一个真正的独立的架构师。

我复查过他的代码,由于他对业务没有深刻理解,所以考虑了N多种情况,给自己以后的修改留下了后路。但

也因此代码量大,开发周期长无法适应越来越短的客户需求响应时间,可阅读性不强,功能复杂,稳定性困

难。但我从客户行业出发,很多情况他其实都是自己假想的,而且想错了。

我指出了他的问题。他问我该怎么学习业务,他又没有机会到客户一线去实施,也不接听客户电话,客户需

求都是业务开发组的人跟他说的。

最了解客户业务的,是在一线做客户咨询、做客户实施的人员。其次是做客户定制化、客户服务支持的人员

。最不了解客户的,就是架构组的人员。但恰恰要命的是,架构组的人员做的功能是大家的工作基础,如果

基础设计错误,那传递的“牛鞭效应”破坏力就很大。所以,架构必须了解业务。

我了解业务的思路,和我了解技术是一个思路,都是来龙去脉法,研究一项事情的过去、现在、未来,以及

和这件事情关联的其他事情,研究方法也如法炮制。

你要制造的是卡车还是轿车,你得明确好。你是要造100万的轿车,还是5万块钱的轿车,也得定好。你是要

制造一辆可以自由改装的轿车呢,还是一辆只可以大致改装一些的轿车的,也得定好。这些疑问,都是和咱

们面临的客户有关。而我们能面临什么层次的客户,和咱们公司的实力、品牌、组织规模、盈利要求有关。

你如果是一个小公司,想做百万大单只能做的一蹋糊涂。你如果是个大公司,你老去竞争那些5万块的小单,

做一个赔一个。所以一个公司的出身就决定了它的竞争地位和它的目标群。我们要为这个目标群服务,所以

我们就不要做一个百变金刚的架构。公司有公司的目标,公司招了你给你付工资,就是为了让你为目标客户

群服务。如何更快更好更有质量的服务,就是公司的目标。我们就是为了帮助公司实现这个目标。

我一般都是把我们这个产业的竞争格局现状了解清楚,我们的过去现在,竞争对手的过去现在都了解清楚。然后我去研究我们的客户行业的竞争格局、层次现状。看看这个客户行业盘子,三教九流到底多大多复杂,

我们现在是占了多大,我们还能占领哪些客户群。

然后我就研究客户行业目前的挑战、机遇、困境。能解决其中一两个问题,就是咱们的竞争亮点。如果作为

软件一点都解决不了这些业务困境,我就思考如何让产品做的更易用。微软不就靠着易用发家的么?

最后我会去研究我们公司现有的研发优势和弱势、实施服务销售的优势和弱势,找到适合我们突破的地方,

具体归研发能承担能起作用的事情,我就会去动员做。脱离现实资源现实矛盾现实包袱的改良,是无法做到

改良的。

我还关心各种新的技术应用。可能这项技术很久了,但大家都没有想过还能这样用。所以,我常常在媒体上

关注这些、思考这些、在论坛上和业界交流这些。对于新的技术,要研究原理,要尝试,但不要冲动引入到

商品生产中。我们不是自己在创业在玩在实现自己的梦想。我们承担的是公司所有人都要吃饭的产品。如果

有闪失,这么多人以及他们的家庭都要受到影响。这不是闹着玩。

当我研究完业务领域的这些大的框框以后,每逢有业务同事跟我交流客户需求,我总能把这个需求和我的业

务框架联系在一起,把这个需求归好类。并且能判断出这个需求是个反趋势的需求,还是个短期眼光的需求

,还是个长远发展的需求。

很多人都在抱怨说需求老变化。其实,不是客户需求在变,而是你对客户的需求老是不同思路去理解。我心

中有业务框架,有过去,现在,未来,所以能识别出一个需求是稳定的还是临时拍脑门想出来的。有时候,

有人向我提一个需求,我会眼睛一亮,对,这个需求符合未来发展,我就会很快加入。所以,我曾经在做实

施经理的时候,老是能很容易说服客户,让客户听从我的意见,就是由于我想的比他们还要远还要周全。好

多程序员说客户非要某个功能不做不行,就说明这个程序员并没有理解客户。客户并不是那个非要和你作对

的人,他只想解决他的问题。可能你不理解他的真正根源问题而且你又提不出更好的方案,所以他要跟你急

,要让你必须实现某个功能。

只有你不断游走在业务过去现状未来与技术过去现状未来,你做的架构才是真正的实用、弹性、易用,而且

最小成本,不走弯路,不多花开发精力。

我们需要架构,不就是为了达到这个目的么。

你可能感兴趣的:(设计模式,框架,工作,配置管理,企业应用)