`
liyiye
  • 浏览: 423981 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

软件架构师:走钢索的人

阅读更多

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

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

      一想起架构师,大家就想起那些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万块的小单,做一个赔一个。所以一个公司的出身就决定了它的竞争地位和它的目标群。我们要为这个目标群服务,所以我们就不要做一个百变金刚的架构。公司有公司的目标,公司招了你给你付工资,就是为了让你为目标客户群服务。如何更快更好更有质量的服务,就是公司的目标。我们就是为了帮助公司实现这个目标。

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

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

      然后我就研究客户行业目前的挑战、机遇、困境。能解决其中一两个问题,就是咱们的竞争亮点。如果作为软件一点都解决不了这些业务困境,我就思考如何让产品做的更易用。微软不就靠着易用发家的么?

     最后我会去研究我们公司现有的研发优势和弱势、实施服务销售的优势和弱势,找到适合我们突破的地方,具体归研发能承担能起作用的事情,我就会去动员做。脱离现实资源现实矛盾现实包袱的改良,是无法做到改良的。

      我还关心各种新的技术应用。可能这项技术很久了,但大家都没有想过还能这样用。所以,我常常在媒体上关注这些、思考这些、在论坛上和业界交流这些。对于新的技术,要研究原理,要尝试,但不要冲动引入到商品生产中。我们不是自己在创业在玩在实现自己的梦想。我们承担的是公司所有人都要吃饭的产品。如果有闪失,这么多人以及他们的家庭都要受到影响。这不是闹着玩。

      当我研究完业务领域的这些大的框框以后,每逢有业务同事跟我交流客户需求,我总能把这个需求和我的业务框架联系在一起,把这个需求归好类。并且能判断出这个需求是个反趋势的需求,还是个短期眼光的需求,还是个长远发展的需求。

      很多人都在抱怨说需求老变化。其实,不是客户需求在变,而是你对客户的需求老是不同思路去理解。我心中有业务框架,有过去,现在,未来,所以能识别出一个需求是稳定的还是临时拍脑门想出来的。有时候,有人向我提一个需求,我会眼睛一亮,对,这个需求符合未来发展,我就会很快加入。所以,我曾经在做实施经理的时候,老是能很容易说服客户,让客户听从我的意见,就是由于我想的比他们还要远还要周全。好多程序员说客户非要某个功能不做不行,就说明这个程序员并没有理解客户。客户并不是那个非要和你作对的人,他只想解决他的问题。可能你不理解他的真正根源问题而且你又提不出更好的方案,所以他要跟你急,要让你必须实现某个功能。

      只有你不断游走在业务过去现状未来与技术过去现状未来,你做的架构才是真正的实用、弹性、易用,而且最小成本,不走弯路,不多花开发精力。

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

分享到:
评论

相关推荐

    云原生Kubernetes全栈架构师:基于世界500强的k8s实战课程

    分享课程——【2022】云原生Kubernetes全栈架构师:基于世界500强的k8s实战课程,2022年最新版,基于V1.23版本,完整版提供文档和软件下载! 课程适合人群: 1、准备学习k8s的运维、开发、测试、架构师; 2、k8s...

    软件架构设计:程序员向架构师转型必备(alin书签).pdf

    《软件架构设计:程序员向架构师转型必备》是一本旨在帮助程序员提升技能,迈向更高层次——架构师的著作。在IT行业中,架构师的角色至关重要,他们不仅需要掌握编程技术,还需要具备系统设计、项目管理以及业务理解...

    软件架构师教程,系统架构师讲义

    《软件架构师教程》是一本全面且深入的指南,旨在帮助读者掌握软件架构设计的核心概念、原则和实践。作为系统架构师考试的重要参考资料,这本书涵盖了高级软件架构师所需的知识点,同时也是系统分析师提升专业能力的...

    软件架构师教程 软件架构

    0_架构师与设计师.pdf 01_软件流程实施方案选择.pdf 02_软件架构文档设计.pdf 03_软件架构风险管理.pdf 04_如何描述和评估软件架构...因附件大于16M被分成了两个包上传,请下载软件架构师教程1.rar 软件架构师教程2.rar

    软件架构师应该知道的97件事.pdf

    软件架构师作为一个专业领域的高级职位,其核心职能包括确保软件系统的稳定性、可扩展性和安全性等。根据提供的文件内容,软件架构师应该了解的知识和技能是多维度的。以下是对文件内容中提到的关键知识点的详细阐述...

    软件架构师培训资料,软件架构师培训资料,软件架构师培训资料

    软件架构师是IT行业中至关重要的角色,他们负责设计和规划软件系统的整体结构,确保系统能够高效、稳定地运行。这份“软件架构师培训资料”涵盖了软件开发过程中的多个关键环节,旨在帮助学员全面掌握架构师所需的...

    软件架构师入门教程,成功架构你的软件

    - 安全架构:设计防止攻击的安全架构,如DDoS防护、防火墙策略等。 7. **测试与评估** - 性能测试:通过模拟用户负载来验证架构的性能表现。 - 可维护性评估:确保代码易于理解和修改,降低维护成本。 8. **...

    软件架构师职业解读

    在"软件架构师职业导读"这份资料中,可能会涵盖这些方面的基础知识和实践技巧,帮助初学者或有意从事这一职业的人更好地理解软件架构师的角色和职责,提供明确的职业发展指导。通过深入学习和实践,你可以逐步成为一...

    管理架构师:如何构建企业管理体系.docx

    本文旨在帮助企业了解如何构建高效的管理体系,并阐述管理架构师在这一过程中的重要作用。 管理架构师的角色定义 管理架构师是企业管理领域中的重要角色,他们负责构建和维护企业的管理体系,确保企业能够在日益...

    测试架构师修炼之道:从测试工程师到测试架构师1

    【测试架构师修炼之道:从测试工程师到测试架构师1】这本书主要探讨了软件测试工程师如何进行职业规划,以及如何成长为一名优秀的测试架构师。书中通过两个面试故事引入了核心议题,即测试的核心并不仅限于业务知识...

    高级软件架构师培训讲义

    高级软件架构师培训讲义,共分24章: 00_架构师与设计师 01_软件流程实施方案选择 02_软件架构文档设计 03_软件架构风险管理 04_如何描述和评估软件架构质量 05_设计模式与软件架构设计 06_AOP开发实践 07_软件架构...

    软件架构和架构师

    ### 软件架构与架构师的关键知识点 #### 1. 软件架构的重要性及其定义 - **背景**: 随着软件系统的规模日益扩大,复杂性也随之增加,传统的“算法+数据结构=程序”设计模式已无法满足当前的需求。软件架构作为一种...

    软件架构师必修课

    软件架构师是IT行业中至关重要的角色,他们负责创建软件系统的整体结构和组织方式,确保软件项目的成功实施。作为软件架构师,需要具备广泛的知识体系,包括但不限于以下几点: 1. IT行业的人才结构与软件构架师的...

    软件架构师视频2018年(百度网盘)

    根据提供的文件标题、描述、标签及部分内容链接,我们可以推断出该资料主要涉及软件架构师相关的学习内容。接下来,我们将对各个章节所涵盖的关键知识点进行详细的解析。 ### 一、考试简介 本章节主要介绍了软件...

    软件架构师培训课程全套讲义

    《软件架构师培训课程全套讲义》是一份深入且全面的教育资源,专为那些渴望提升自身在软件架构设计领域技能的人士所准备。这个讲义涵盖了软件架构的各个方面,旨在帮助学习者理解并掌握作为软件架构师所需的关键知识...

    软件金领架构师

    软件金领架构师是软件工程领域中的核心职位,它不仅要求架构师拥有深厚的技术功底,还需要其具备全面的项目管理能力和卓越的沟通协调技巧。在本文中,我们将深入探讨软件架构和架构师的相关知识点。 首先,软件架构...

    如何成为软件架构师

    ### 如何成为软件架构师:综合能力与实践经验 #### 技术能力与开发经验 成为一名优秀的软件架构师,首先必须具备丰富的开发经验和技术主管的角色。这意味着不仅需要了解各种技术细节,还需要能够评估技术的可行性...

    软件系统架构师(电子书)

    《软件系统架构师》这本书是为那些希望深入理解软件架构设计和实践的读者精心准备的。作为一本电子读物,它涵盖了软件架构的基础知识、关键概念以及实际应用,旨在帮助读者提升在软件开发领域的专业素养。 软件系统...

    软件架构师的12项修炼.docx

    软件架构师的12项修炼 软件架构师是软件开发领域中非常重要的职业之一,他们负责设计和规划技术方案,确保软件系统的可用性、可维护性和可扩展性。为了成为优秀的软件架构师,需要具备深厚的软件工程知识、技术经验...

Global site tag (gtag.js) - Google Analytics