相当不错的文章,值得一看!<wbr><wbr><br><br><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em">前几天看到一篇架构师已死的文章,颇为有趣,仔细想想,架构师之所以兴盛和之所以必死,多半是因为太多的人对软件架构师的工作存在诸多误解的缘故。 而诸多媒体和原厂商出于自身利益在国内行业进行的过度吹捧,给予了架构和软件架构师太多的光芒,程序员们自然而让的就把个人的职业规划扔到了聚焦点上。</font><wbr><br><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em">写一些自己对架构设计和架构师的一些不是很成熟的看法,写到哪算那,全当口水了。</font><wbr><br></wbr></wbr></wbr></wbr>
架构的概念非常广泛,解决的问题域空间也各有差距, 不能从一而论, 此处单指企业应用的范围而已,和互联网应用等其他范畴有较大差距。<wbr><br><font size="2"><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em">1. 架构是设计出来。</font><wbr><br><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em">这是很多人对软件架构的一个最大误解。 </font><wbr><br><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em">传统的瀑布模型里,人为的划分设计和编码实现过程,也划出了设计和验证过程的鸿沟,整体设计(概要设计)的可验证性,要在项目的中后期才能得到体 现,这时候为时已晚。而为了保证设计的质量,回避中后期风险,又往往会强调加强设计粒度和评审粒度,这样一来,无形中又继续加大了设计和验证的鸿沟,拖长 了问题反馈周期,规模越大的项目,问题越为突出。</font><wbr><br><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em">据我的印象,业界中最早的最有影响的关于架构和架构师的界定其实来源于RUP.有别于传统的瀑布模型的中的概要设计,软件架构很难再说是按流水线方 式设计出来。架构设计和概要设计的最大差别在于架构设计更看重反馈和验证过程,更看重架构师在整个软件开发过程中的由始而终的参与。在rup中,项目早期 的关键迭代都和架构设计有直接关系。</font><wbr><br><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em">架构设计应该强调通过更好的反馈-沟通-验证机制, 能在项目的较早期就得到技术和业务上的验证,为整个项目打下稳定的基础。 在某些敏捷开发过程中,架构设计并不会作为一个显著的KPI提出,更多是作为一种隐喻。通过使用迭代和其他更好的反馈交流机制,让项目的架构设计在在项目 的前期以验证和演进的方式完成。可以说一个真正的架构设计,必须是可以有效验证的。</font><wbr><br><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em">而现在很多公司和组织流行的先让大拿组织做设计,设计做完再评审,然后丢给小兵去干活的架构设计流程,实际是对瀑布模型的继续,我个人认为是完全背 道而驰的。我多次参加过这样的架构设计评审,基本上可以说没有什么有真正营养的东西,只是一些流行概念的堆砌,昨天EJB,今天SSH,明天又是 OSGI,这样的架构设计作出来也有可能会大幅度修改,或者坚决不修改让下面的人痛苦不堪,所谓的评审和存档过程只是自欺欺人而已。再考虑现在各大公司流 行的CMM/CMMI,过程改进管理,这些paper的工作还可能会因为引入复杂的审批修改流程把人拖入泥潭。</font><wbr><br><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em">这种做法,在java圈子里面,因为早期sun和一些大公司对架构和模式概念的极力鼓吹,大为盛行。某些人甚至只是看完了blueprint,做了几个tutorial,就摇身一变架构师,开始了架构设计生涯。</font><wbr><br><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em">这样的架构师也往往很少编写代码(我们可以理解,一个人写完300页的设计文档以后,还有多少意愿再去写实现代码?),很少参与项目的开发工作,只 满足做一些试验性质的代码工作(对呀,现在开源东西这么多,流行的东西组装一下架构设计就算over了么,还实现什么设计)和指导工作,甚至有些 paper的架构师,完全就是靠粗读各种pattern和x宝典来做设计,设计的可行性和高风险性,可想而知,早期大量EJB的滥用导致的项目失败,其实 根本原因在于甚少有架构师以验证演进的手段来决定是否应该使用EJB,怎样合理的使用EJB,将架构设计草率的外包给各大原厂商鼓吹的概念或者各种 blueprint。而小兵们在面对架构+模式两顶大帽的时候也只会怯懦的怀疑自己的个人能力,然后坚持不懈的向架构师这一伟大位置继续奋斗。</font><wbr><br><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em">而另一方面项目管理者也往往会误以为有了正规的架构设计就可以更好的保证软件项目质量,可以将项目的重心放置在需求和非技术工作之外,可以不用再考虑一般程序员的技术能力问题, 可以大幅度的xxx,xxx, 最后一堆苦水,然后再把责任归咎于架构师不成熟。</font><wbr><br><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em">我早年经历过的几个项目就有此方面沉痛的教训,事后我个人复审设计,发现基本上整个方向都是错误的,个别项目设计者甚至连EJB的一些基本概念都没有了解,自己重头实现了一遍。过长的验证周期导致后期已经无法再做任何修改,只能咬牙吞下。</font><wbr><br></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></font><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em" size="2">真正实用的架构是以逐步严谨的方式验证出来的,即便是自称中国java NO.1的袁红岗告诉你EJB非常好,没有EJB的架构就不是真正的J2EE架构,你也要验证以后再说,在此顺便bs一下csdn。<br><br>在那篇架构师之死的小品里,boss问小兵,你如何说服大家要使用hibernate? 其实答案很简单,架构又不是设计出来的, 为什么要说服?<br><br><br></font><wbr><font size="2"><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em">2. 架构师是一个纯粹的技术工作</font><wbr><br><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em">某方面讲这是对的,但又不全对,因为技术工作只是架构师工作做的一个核心关注点而已。一个nb程序员可能在技术方面是nb的,但是在很多方面确实欠缺的,并不适合做架构师。</font><wbr><br></wbr></wbr></font><font size="2"><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em">做企业应用的,牵涉的面太广,加上行业生存环境又不是很好,企业管理普遍也不规范,所以很难象某些领域,架构师就是一个纯粹的技术工作。<br><br>首先,如何获取项目经理和管理层对你的信任和支持, 是你开始工作的起点, 这一块和技术并没有直接的关系,取决于你的表达能力和主动性,你如何展现你的实力,你做事是否足够主动,是否有意识和能力去推动项目。不能让老板感觉你就 是一个greek,这一条是很多不错的技术人员难以做到的。而实际工作中,你也绝不能把所有时间都花在技术上,你至少要拿出4分之一的时间去和pm,和老 板沟通,协商问题, 才能得到你的生存空间。</font><wbr><br></wbr></font><font size="2"><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em">其次,如何获得团队成员对你的信任和支持,是你展开工作的基础,如果你不够传奇,就需要你做一个牧师或者善于聆听的人, 通过熟悉自己的团队成员的构成和技术特点,才能充分发挥他们的所长,赢得他们的信任和支持,看起来这好像是pm的工作,但是不尽然,如1所诉,架构设计并 非是一个个体脱离团队的行为。和团队成员打交道,多半又要花掉你4分之一以上的时间。<br><br>好吧,你还要明白,为啥要叫架构师而不是高级工程师(这个已经out了), 是因为你还需要承担售前售后任务, 如何简单清晰的向不懂技术或者半懂技术的客户讲清楚技术问题,这是个学问,要做到这点,按我以前的老板说法,你必须有常识, 常识要多道可以用一些简单的故事例子把东西讲出来,所以有空要多看看电视,多和销售学学,顺便还得学点基本礼仪,上次我差点把某公司来给我们推销产品的工 程师给踢出去了,在我提了意见以后,丫居然坚持跟我说他们东西是最好用的,你敬业没错,但是好歹我才是用户吧。<br><br>如果你的公司是做项目为主的,恭喜你,你还要学会如何和客户周旋,如何回避到客户内部以及客户和其他供应商之间的矛盾里去。因为某方面,作为架构师,你就 代表了技术上的权威,你要明白一点,管理上出了问题,从来都是往技术上推是最简单的。项目之外的话,说起来一定要谨慎,再谨慎。比如如果有客户不愿意购买 设备和软件实现负载均衡,找你咨询,你随口一说,啥啥免费软件可以做,好吧,你完蛋了,你要么就是得罪了某供应商(搞不好还就是你们公司卖的),要么,就 是等着将来客户给你套口子吧。<br><br>而且,作为一个企业应用的架构师,你不可避免的要和各类厂商打交道,这里面也是大堆的学问,虚虚实实的东西大把,偶尔你甚至会受到美色或者银弹的攻击(记 住,只是偶尔,人家一般不乐意在你这个级别上下血本)你要一不小心分不出真假,很可能就做了大堆钱公司的小白鼠,搞的在客户和公司间里外不是人。</font><wbr><br></wbr></font><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em"><br><font size="2">还有,架构设计往往还需要考虑到技术的生命周期问题, 那么你对客户公司,对开发公司的状况的了解,对整个行业的发展趋势的了解,也会影响到你设计的决策,这种东西往往跟市场有关,并不取决于技术,这考核的就 是你的视野和对问题的敏感程度。 打个比方,你开发了一个很好的系统,但是到了你离职的时候,客户却发现你选择的这种技术已经淘汰了,现在很难再找到合适的人员进行维护了,这样的架构师, 算合格么?<br><br>说完了外面的东西,再说里面的。<br><br>一个成熟的企业应用的架构师,除了对行业技术应用有准确的把握和经验积累之外至少还需要有丰富的业务知识。</font></font><wbr><br><font size="2"><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em">一般来说,架构设计由几个面构成,其中一个面是技术架构,还有一个面是业务架构, 技术架构必须通过后者的验证。积累一个行业的业务知识,少则一年半载,多则3年5年,这都不是单纯看书阅读资料可以获得的。客户可不会只因为你的技术如何先进,nb 就验收项目的。</font><wbr><br></wbr></font><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em"><br><font size="2">再有, 再好的架构,也需要向程序员沟通和推广, 那么你至少也要是个合格的技术讲师吧? 兄弟们管你叫那个师,你总还得有能力教人家一点东西吧?</font></font><wbr><br><font size="2"><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em">某些项目,技术甚至可能根本就不是关注点,我曾经参与的一个项目,在我加人的时候架构设计和开发工作都已经完成,而且是基本构建在相对错误的道路 上,基于项目进度的压力,我已经没有可能重新推到再来,所以我把工作的重心转移到如何培养提高团队成员的技术能力,降低不成熟架构对他们工作的干扰,换句 话说,我干的工作就是打补丁。这些看实不够nb的工作大部分都和技术无关,和流程图,模式无关,但是有效的弥补了架构的缺陷,保证了项目的顺利进行。 </font><wbr><br></wbr></font><font size="2"><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em">既然不能选择离开,那么菜刀也是刀,对吧。<br></font><wbr><br></wbr></font><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em"><br><font size="2">最最后,你还要有点人脉,有在天涯海角到处混的兄弟,这样你搞不定问题的时候,卡住的时候,或者他们一个小小的提示就可以救你于水火之中。不会不是你的错, 解决不了问题才是你的错。<br><br>在我看来架构师的工作,是一个混合了各种知识和经验的工作,架构师更象酒店里的行政大厨,只会炒菜那是绝对不行的,很难单纯的定义为技术工作。当然,动不 动就把架构师抬举为艺术家,开口闭口XX的艺术,哪还是过了,你以为画画的都是艺术家么? 我家狗仔还能用嘘嘘画地图来着。<br><br>指望多读书,多写代码,一个人对着电脑就能迅速成长为架构师,嗯, 我觉得可能性不是很大。<br><br>3. 架构设计的好坏只取决于架构师的能力, 和开发团队无关<br><br></font></font><wbr><font size="2"><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em">经常会听到这样的抱怨,我做出的架构设计,下面的人能力不够,无法实现。这个架构是XX推荐的,为啥做下来问题会这么多? 我们的架构师只会说,其实水平不行,做出来的东西很难用等等。<br><br>其实认同我说的1的人应该已经明白,架构既然是渐进验证的,那么架构的可行性就是一个必须考虑的问题。架构师需要熟悉自己的团队成员的构成和技术特点,在此基础上对设计做权衡,再好再优秀的架构也要取决于团队成员的理解能力和执行能力,这点对很多人来说居然完全不理解。</font><wbr><br></wbr></font><font size="2"><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em">和现在的各路有志青年一样,我也曾经努力奋斗要做一个架构师,我在01年参加了sun的架构师认证考试。那时候的SCEA考试并没有什么参考资料和 贩卖答案。各路精英只能在一个国外论坛上泡着交流经验,经常看到某某高分过了的消息,又看到某某平常表现不错,又差了多少分没过云云。<br><br>我看了很多书,也颇有些项目经验,通过成绩却一般,80分左右,所以很想知道别人的设计是如何做的,什么样的设计可以得到更高的分。 经过协商,我和一个挪威人,一个德国人(有20年的开发经验)交换了通过考试的作业。让我震惊的是德国人设计的粒度,他的架构设计几乎想日本人做的详细设 计一样,只要简单的翻译工作就已经可以run,即便是对德国人的严谨细致早有所闻,我还是难以想象这是一个小项目的架构设计。 和德国人做了交流,他说他必须做得这么细,否则他的团队成员理解会产生偏差, face to face的交流也不能弥补这个问题,因为他的小伙子不是都足够聪明。<br><br>这让我第一次意识到,架构师的工作的一个中心,并不是直接面对客户,面对老板而是面对技术团队成员。其后的工作中我又多次碰到类似的问题, 同样的需求,一个架构师面对不同的团队成员的时候,很可能作出截然相反的设计。架构师必须针对团队成员的特点,认真考虑团队成员的技术能力和学习能力,有 针对性的选择和平衡,甚至是牺牲,才能保证架构的可行性。</font><wbr><br></wbr></font><font size="2"><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em">在一个理想的技术团队,架构师固然可以只关心技术,但是这样的团队现实中存在的概率有多少? 就如death to march 2nd中所说,现实的软件开发团队,大部分都要面对一个资源短缺问题,<br><br>不能说服老板给你足够的资源,那么只能选择充分使用现有的资源,菜刀也是刀,对不对。</font><wbr><br></wbr></font><font size="2"><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em">我不知道有多少项目架构师脱离开发团队能获得真正的成功,一般来说,强调架构设计的项目都是中等以上规模的项目,人数一般都会超过10个以上,对项目管理,对技术人员有着更高的要求。不少公司都乐意高薪聘请外援进行架构设计来解决问题,但是结果都不理想,原因即如此。<br><br>我非正式的咨询过2个项目,架构设计都由大堆钱的工程师完成,pm哭丧着脸跟我抱怨,我们的架构没问题,都是大堆钱做的, 国外啥啥都这么用,但是我们的程序员不行,无法很好的将架构实现。</font><wbr><br></wbr></font><font style="FONT-SIZE: x-small; LINE-HEIGHT: 1.3em" size="2">姑且不谈大堆钱为了推销自己的产品加塞的东西,单就这种丝毫不考虑团队成员构成,千人一面的拷贝设计,都已经注定成功只能是偶然了。这样的架构,又 如何说没问题?一个架构师最低限度的责任,既是将这种大众face裁剪调整到适合自己团队的面孔,交钥匙的做法是没戏的。我只能很无奈的告诉他们,这样复 杂的过度设计,如果不做裁剪,即便我给你找到合适的程序员,你也无法承担时间上的成本,何况性能始终都会是个大问题。<br><br>不少中小公司的同胞们敬仰着大堆钱公司,指望他们能解决根本的问题,殊不知,某种意义上,架构设计的工作,是没法外包的,你可以咨询,可以顾问,但是干活是另外一回事。这点和互联网应用什么的,还是挺大差别的。</font><wbr></wbr></wbr></wbr></wbr></wbr></wbr>
分享到:
相关推荐
《架构设计的事实与谬误——流行观点及培训案例的分析-温昱.ppt》是温昱老师的讲座材料,它可能探讨了一些常见的关于架构设计的误解和流行观点,并通过实际案例进行剖析。这部分内容旨在帮助学员识别和避免在设计...
软件架构师是IT行业中至关重要的角色,他们负责设计和规划软件系统的整体结构,确保系统能够高效、稳定地运行。这份“软件架构师培训资料”涵盖了软件开发过程中的多个关键环节,旨在帮助学员全面掌握架构师所需的...
【SOA设计误区详解】 SOA(Service-Oriented Architecture,面向服务的架构)是...总之,SOA设计是一门深奥的艺术,需要架构师具备广泛的知识和深入的理解,以克服潜在的误区,确保解决方案的成功实施和高投资回报率。
1.2.3 对架构师的一些常见误解 1.3 软件开发流程概览 1.3.1 软件生命周期 1.3.2 软件开发模型 1.4 小结 1.5 本章的墨菲法则 第2章 UML必要知识 2.1 uML概览 2.1.1 建模语言的出现动机和历史 2.1.2 UML的模式和使用...
架构师需要了解常见的安全威胁模型,并将安全设计融入到系统架构中。 总结来说,"架构师有话对你说——软件开发经验之谈"可能会涵盖上述的多个方面,包括但不限于架构设计原则、开发流程优化、技术选型策略以及安全...
常见的误解有小型系统无需架构设计和敏捷开发可以忽略架构,但实际上,无论系统大小,清晰的架构都能提高开发效率,而敏捷开发更需要灵活可扩展的架构来支持快速迭代。 3. 嵌入式环境下软件设计的特点 3.1 硬件密切...
常见误解包括将系统架构等同于系统设计、基础结构或硬件组合,认为好的架构仅依赖于单个架构师,或者认为架构是可以独立于软件架构之外的。实际上,架构是多方面的,涉及多个层面的决策,需要团队协作,且可以通过...
1.2.3 对架构师的一些常见误解 1.3 软件开发流程概览 1.3.1 软件生命周期 1.3.2 软件开发模型 1.4 小结 1.5 本章的墨菲法则 第2章 UML必要知识 2.1 uML概览 2.1.1 建模语言的出现动机和历史 2.1.2...
软件架构师是IT行业中至关重要的角色,他们负责构建和指导公司的技术蓝图,确保系统的稳定性和可扩展性。2022年的软件架构师岗位职责主要集中在以下几个方面: 1. **系统架构设计与研发**:架构师需要设计公司的...
在温昱老师的分享中,他深入探讨了架构设计的一些常见误解和正确的理解,这对于任何希望在IT领域,尤其是架构设计方面提升自己的人来说都是一份宝贵的资料。首先,让我们聚焦于"分层架构"这个话题。 分层架构是软件...
1.2.3 对架构师的一些常见误解 1.3 软件开发流程概览 1.3.1 软件生命周期 1.3.2 软件开发模型 1.4 小结 1.5 本章的墨菲法则 第2章 UML必要知识 2.1 uML概览 2.1.1 建模语言的出现动机和历史...
**架构的一些误解**:常见的误解包括认为架构设计是一次性的活动,或者过分强调技术细节而忽视业务需求。实际上,架构设计是一个持续的过程,需要不断地与业务需求相匹配。 **架构设计的过程模式**:通常包括迭代...
软件架构设计是指在软件开发过程中,对软件系统的整体结构、行为和属性进行规划和设计的过程。它不仅仅是技术层面的考虑,更是对软件系统组织方式、元素组合、子系统划分及架构风格等决策的体现。软件架构的核心在于...
总的来说,《架构之美》是一本全面覆盖软件架构设计各个方面的书籍,无论你是初入行业的新人,还是经验丰富的架构师,都能从中受益匪浅。通过阅读这本书,你可以提升自己的架构思维,学会如何设计出既能满足当前需求...
系统架构方法是构建大型复杂分布式系统的关键步骤,它涉及到如何有效地组织和设计软件系统的各个组成部分,以便满足功能需求、性能指标、可维护性、可扩展性等多方面的要求。本资源主要介绍了系统架构的基础方法论,...
此外,可能会涉及到高阶的数据模型、主要的算法和设计模式的选择。 6. **接口设计** 系统接口设计包括系统内部组件之间的接口和系统与外部环境的接口。这些接口应详细描述交互的协议、数据格式和调用规范,以便于...