??xml version="1.0" encoding="utf-8" standalone="yes"?> ?Hudson ?/span> Hudson 是一U革命性的开放源?CI 服务器,它从以前?CI 服务器吸取了许多l验教训。Hudson 最吸引人的Ҏ之一是它很容易配|:很难扑ֈ更容易设|的 CI 服务器,也很难找到开即用特性如此丰富的 CI 服务器。Hudson Ҏ使用的第二个原因是它h强大的插件框Ӟ所以很ҎdҎ。例如,一?Hudson 插g可以随时间的推移跟踪 FindBugs 和代码覆盖。它q可以报告测试结果的势Q来?JUnit ?TestNGQ以及构建结果和对应的执行时间? Hudson 需要运?Java 5。如果需要?Hudson 附带的嵌入式容器QWinstoneQ之外的其他容器Q那么只需使用一U?Servlet 2.4 容器。对于大多数情况QWinstone p够了?br />
?Hudson使用 CI q程的最后一个方面是 CI 服务器本w。CI 服务器在整个开发过E中的主要作用是控制者:当服务器在代码存储库中探到修改Ӟ它将q行构徏的Q务委托给构徏q程本n。如果构建失败了Q那?CI 服务器将通知相关斚wQ然后l监视存储库。它的角色看h是被动的Q但是,它是快速反映问题的关键?/span> 使用 Hudson 的主要好处之一是它的设|很单。在最单的情况下,Hudson 只需要两个步骤: q样可以了。因Z载的是一?WAR 文gQ所以如果愿意,可以它部v?Tomcat ?JBoss {容器中。这完全由您自己军_。当ӞHudson 假设在安装它的机器上q行着 Java 5Q而且如果定义? 在安装ƈq行 Hudson 之后Q将 WAR 文g部v?servlet 容器或从命o行执?
太开攑֒灉|会导致比较高的学习曲U,那样别hq不如直接用原生的工具呢Q太闭对公司虽然更安全(比如有些公司的组件只有二q制代码和用说?Q但是对开发h员的前途是不利的,如果人员留不住,最l也会拖慢公司的竞争能力?br />
3) 不断U篏和持l过E才是正?br />
我们l新手培训时很强调用一个框架虽然站在别人的肩膀上了Q但是这q是一个v点而不是终点!一个框架最初用时Q肯定会发现有好多客戯的功能框架不能提供。那通过目逐步U篏lg吧,千万不要老是拯_脓搞开发。让每个开发者都有机会成为框架和lg库的贡献者,那这L文化氛围才是别的公司不能一下走学走的?br />
llano的三个版本集成如下:
llano for java
ExtJS/Spring/Hibernate/SiteMesh/Freemaarker/log4j/JUnit
llano for .net 2.0
ExtJS/NHibernate/log4net/NUunit
llano for .net 3.5
ExtJS/LINQ/log4net
alex 7-10
]]>持箋集成的核心概?/span>
CI q程会经常构Y件组Ӟ在许多情况下Q每当源代码存储库(比如 Subversion ?ClearCaseQ中的代码发生变化时Q都要构Y件组件。CI 的好处是Q经常构Y件可以确保尽早遇到问题(比如代码~陷Q,避免问题在Y件开发周期晚期变复杂时才被发现?/span>
工具与过E?/span>
管 CI 实际上是一个过E,但是持箋集成 q个词常怸一个或多个工具相关联。在本教E中Q讲解如何安装、配|和使用 Hudson 作ؓ CI 服务器,但是要记住,CI q不只是个工兗实际上Q用的工具可能?CI 比较ơ要的方面,因ؓ CI 工具所做的仅仅是在代码存储库中探测CҎq行构徏。构E本w比用来q行它的工具重要得多?/span>
开始?CI
开始?CI 需要三个组Ӟ
我们来详l讨些组件?/span>
自动的构?/span>
CI q程会经帔R成YӞq需要通过构徏来完成。在 Java 环境中,Ant 是常用的构徏q_。可以?Ant 可靠地自动执行编译、测试等dQ甚臛_以执行Y件检查和部v。在掌握?CI 的所有组件之后,您会发现构徏{略是成功的 CI q程最重要的方面。如果缺适当的构E,CI 难以发挥作用?/span>
源代码管?/span>
Z?CI 正确地发挥作用,需要一个源代码理QSCMQ系l或存储库,比如 Subversion ?CVS。CI 服务器向 SCM 存储库查询代码修攏V在扑ֈ修改ӞCI 服务器执行签出(x新本地沙)q执行构建。除了执行得更频J之外,构徏q程与在本地环境中执行的构徏相同?
CI 服务?/span>
对于成功?CI q程Q需要用一个自动的q程监视 SCM 存储库ƈ在探到修改时运行构建,q也非常重要。对?Java q_Q有许多可用?CI 服务器,包括开放源码Y件和商业产品。它们的基本配置都很怼Q适合监视特定?SCM q在探测CҎq行构徏。所?CI 服务器都有自q优缺炏VHudson 其让h感兴,因ؓ它容易配|而且h强大的插Ӟq些插g可以昄试l果势{信息?br />
java -jar hudson.war
?JAVA_HOME
环境变量QHudson ׃使用它。(正如前面提到的,Hudson 需?Java 5。)java -jar hudson.war
Q,启动览器ƈ讉K默认安装位置。如果通过命o行运?Hudson 而且您在本地机器上,那么可以讉K http://localhost:8080/
?/span>
如果讉K Hudson 主页的本地实例ƈ单击左上角的 Manage Hudson 链接Q应该会看到?3 所C的可配|选项列表?/strong>
?3. 配置 Hudson 非常Ҏ参数说明:
system.message 填写一些说明信?br />
Quiet period:hudson定时构徏工程的时?U?
:讄hudson登陆的规?默认为匿名登?
TCP port for JNLP slave agents:不了解JNLP不敢胡写M是三种方式:固定(fixed) 随机(Radom) 不?disabled),使用固定时可以填入JNLP信息
q可以配|服务器的其他几个方面,比如?Hudson 提供一个电子邮件服务器的位|,以便在构建失败时接收电子邮g。根据您的组l设|电子邮件的方式Q可能需要让pȝ理员帮助设|这个特性。设|电子邮件ƈ不是必需的;Hudson q支持以 RSS 作ؓ通知机制Q对于某些h来说Q这U方式比电子邮g更好。究竟选择哪些通知机制完全取决于您。(注意Q这里说的是 “哪些”Q也是_可以同时使用多种通知机制Q)
既然 Hudson 已经能够?SCM 存储库通信了,p配置目了。这个示例所用的目UCؓ solar-ci
。在 Hudson 主页上单d上角?New Job 链接。这时会看到?5 所C的屏幕Q?/strong>
该页面可以我们通过hudson来管?/span>cvs里的一个对应的工程
Project name:工程名称
Description:描述信息
Discard build:如果选择此项可以讄build记录保存的天?/span>,或?/span>build记录保存的数?/span>,或者只保存最新的build记录,一般不需填写
Advance project options:可以讄hudson定时?/span>cvs工程的时间间?/span>,q可以指?/span>cvs工程check out到本地的工程路径,一般不需要填?/span>
Source code management:我们选择cvs出C下参?/span>:
Cvsroot:写cvs登陆字符?/span>,格式(:protocol:user:password@host:path),例如: :pserver:cvsadmin:1@127.0.0.1:2401:/CVSNT/Repository,使用cvs必填Modules:填写cvs仓库下的具体工程?span lang="EN-US">, 使用cvs必填
选择subversion可以q行相应?span lang="EN-US">subversion讄
Build trigger可以讄hudson自动执行的一些动?span lang="EN-US">,build after others projects are built指定hudson构徏完成后需要l构建的工程?span lang="EN-US">
Build periodically Ҏhudson定义的语法规则来讑֮自动构徏工程的时间间?span lang="EN-US">
讄一些构建完成后的动?span lang="EN-US">,如放邮g,打包,产生试报告,产生java doc {?span lang="EN-US">.
点击ok保存讄
成功的大型企业需要其 IT 部门通过跟上技术发展来保持高水准的竞争力。这通常需要代价很高的l常性投资以l护当前?IT 投资和增L的投资。然而,中小型企业通常只有有限的预来设法C化其 IT 基础设施和资产。通常可以注意刎ͼ中小型企业只有在充分利用当前 IT 投资以后才会考虑重大的升U。他们每隔几q进行一ơ较大规模的C化投资,而不是连l地q行投资?
“中小型企?#8221;Qsmall and medium businessQSMBQ这个术语非怸观ƈ取决于若q因素,例如q度营业额、员工数量、业务的地理分布{等。就本文而言Q我们的虚构公司 Mod Communications , Inc.Q以下也UCؓ“该公?#8221;Q是一家ؓ中西部若q个城区的家庭客户和当地企业提供高?Internet 接入、有U电视、本地和镉K电话以及无UK信服务的电信服务提供商。该公司是需要现代化?IT pȝ的中型企业的代表。该公司拥有 200 名员工,已有 20 q的l营历史Q分支机构不过 10 个,q拥有大U?75 ?IT 人员l护其当前的 IT 解决Ҏ?/p>
面对新的竞争Q他们感觉到了ؓ当前客户l持较高服务U别的压力。该公司希望着手进行遗留系l{换活动。该公司准备{换活动做出重大投资,q正在寻求现代化路线图规划方面的帮助。本文是?IT N、架构师和解x案开发h员准备的Qƈ解释了如何分析该公司的当前现状、组l动力和挑战Qƈ提供了一l?IT 转换zd。本文还演示了一些可在该解决Ҏ开发过E中提供帮助?IBM 产品和服务?/p>
Mod Communications Inc. 的大多数应用E序都是客户信息控制pȝQCustomer Information Control SystemQCICS®Q应用程序,q些应用E序使用 COBOL ~写q运行在 IBM System z™ pd中的 IBM 中端大型机系l上。虽然这些应用程序l尽最大可能地提供核心业务服务Q但是它们非常庞大、独立ƈ且难于修攏V替换或从头重新构徏q些应用E序会对当前业务程产生破坏性的影响Qƈ需要收集在q去 15 q里加入到系l中的业务智能和规则。采用某个基于面向服务的体系l构原则的渐q式遗留pȝ转换q程Q是有选择地替换该公司的应用程序组合的更加l济合算和风险更低的Ҏ。此Ҏ的一个示例是使用 Java EE (Java™ Enterprise Edition) 来开发将在诸?IBM 推出?Websphere® Application Server {应用程序服务器上运行的应用E序。新的应用程序将在可能和适当的Q何场合重用现有的功能。在构徏和部|新lgӞ其用范围超出目前应用程序的部分lg公开为服务,以便在以后的开发工作中重用?/p>
下面几个部分解?IT 架构师或N如何执行数据攉、分析和zdQƈ遗留系l{换过E告知公司的重要高层理人员。下面将从数据收集期间的各个步骤、分析阶D得出的各种输出、所定的徏议备选解x案和针对转换规划的指C等斚w对相x动进行描q?/p>
数据攉的重点在于获得关于业务活动、所使用?IT 技术和 IT 投资{事的当前状态的信息。然后可以分析该数据以确定{换机会。以下步骤将准备q执行有效的数据攉工作Q?/p>
务必要了解公司的l织l构图,以便定重要的团队成员和权力人物。Mod Communications, Inc. 的组l结构图表明Q总裁和首席运营官QChief Operating OfficerQCOOQ以及执行副总裁QExecutive Vice President Q将负责监督重要的业务和技术活动以及投资。对于日常职能和zdQ该l织拥有诸如“操作l?#8221;?#8220;业务服务l?#8221;?#8220;财务服务l?#8221;?#8220;通用开发组”{小l。其中每个小l都h业务和技术h员。这些小l的负责人将向执行副总裁报告Qƈ且是主要的业务和技术相兛_{的权力人物?/p>
此步骤将为准备用于数据收集的详细问题集奠定基。v初,可以从与高人员q行的讨Z获得有关公司l营的粗略概c在非正式的气氛中提出有兛_司背景、公司发展、公司所属行业、优ѝ弱炏V新Z、察觉到的竞争威胁、所获奖以及类g题的诱导性问题?/p>
?Mod Communications, Inc. q行的有兌{换活动的M目标的讨E中Q一名高U员工提到该公司作ؓ中小型企业区D中的最佛_工工作场所之一而感到自豪。大多数员工都已lؓ该公司工作了 15 q以上。另一位高层管理h员提到实现面向服务的体系l构在公司日E上处于优先位置。该信息可以在分析阶D中提供重要的输入,以评估关于组l更改和准备情况的可能徏议所h的媄响?/p>
此类问卷上的问题应该跨越q泛的主题,例如业务目标、当前流E评估、应用程序组合评估、企业数据体pȝ构、基设施和操作体pȝ构、面向服务的体系l构Q以及治理。以下问题类g一个样本集?/p>
来自 Mod Communications, Inc. 的高Uh员群{群力,一起合作回{上q问题?/p>
步骤 D. 计划安排与重要客L团队成员的后l访?/span>
从问L案中Q确定进一步的信息需求领域,q计划安排与重要人员的后l访谈。用组l结构图来确定要访谈的其他h员。完成后l访谈时Q数据收集阶D差不多完成了。随后的解释说明可以通过电子邮g或电话来获得?/p>
对于 Mod Communications, Inc.Q将准备一个关于访谈成果的报告。该报告提供了公?IT 环境和基设施、IT l织、主要角色和职责的当前状态摘要、应用程序组合概q、系l和功能摘要Q以及当前治理、未来三至五q的业务q景和目标的要概q。这可用作将来的所有工作的参考?/p>
在数据分析过E中Q研I收集到的相兌料和文档信息Q以分析各种备选解x案,从而提供徏议。按以下几个斚w对信息进行组l:
对于 Mod Communications, Inc.Q以下是重要的业务远景和目标Q?/p>
Z与团队成员进行的有关该公怋用的当前程和实늚详细讨论Q以下是重要的难点和问题场景Q?/p>
对于 Mod Communications, Inc.Q解x案徏议需要考虑的各U约束如下:
该公司的应用E序l合分析提供了以下信息:
该公怸直?IBM Host Access Transformation Services (HATS) 来将某些应用E序从已有基于字W的屏幕界面转换?Web 用户界面。这使该公司可以快速将现有的基于字W的屏幕界面转换为网和表单Q从而将 Web 通道用于光留应用程序。该公司应该通过创徏Z最l用戯入、易用性、导航和上下文内容呈现的新用L面来Ҏq行改进?/p>
下一步是为客户交付一l解x案徏议?/p>
Z对信息的分析Qؓ重要?Mod Communications, Inc. 高层理人员准备一个解x案徏议,以从资金和项目决{方面说明后l步骤?/p>
核心是让公司在保留其当前遗留应用E序l合的h值的同时Q逐渐地迁Ud可促q松散耦合的体pȝ构的新技术。一个徏议是采用 Java Enterprise Edition (Java EE) 作ؓq行遗留pȝ转换的合适应用程序技术。Java EE Ҏ使公司可以开发能够提供出色的囑Ş和多通道用户界面的应用程序,同时qؓ面向服务的体pȝ构做好定位。这D对各U方法进行分析以实现 Java EE 环境。这些方法如下:
a) 替换Q?/strong>诸如服务订单管理、问题报告和理及计费系l等当前核心应用E序替换为商业化现成Qcommercial off-the-shelfQCOTSQ应用程序。然后自定义和配|该应用E序和界面。这是实现{换的快速方法,但它在客h受、对现有业务程和功能的影响、组l变更和培训需求方面引入了风险?/p>
b) 重新~写Q?/strong>使用 Java EE Ҏ重新~写应用E序。优先重新编写将l历转换的应用程序。对q些应用E序执行ZҎ的完整Y件生命周期开发,包括需求分析、设计以及开发和试。已知当前应用程序的数据库层l构非常良好和高效。在可能的情况下Q新lg可以重用数据库层的功能? c) 大规模{换然后客户化定制Q?/strong>q是选项 b) 的一U变化Ş式。在此情况下Q将使用自动化的工具执行所有应用程序到 Java EE lg的大规模转换。然后修Ҏ得到的组件以适合需求? d) 渐进地{换到目标q_lgQ?/strong>使用Z Java EE 的体pȝ构来构徏q渡环境。从当前遗留pȝ中公开?#8220;q后”模块提供实现。渐q地在目标^C~写代码以取代对遗留模块的依赖? e) 使用W?4 代语aQ?th Generation LanguageQ?GLQ方法渐q地转换Q?/strong>在此情况下,用某U?4GL 语言来定义应用程序。用工具将 4GL l构自动转换?Jave EE lgQ然后将后者部|在目标q_上。例如,此方法可以?IBM 企业生成语言QEnterprise Generation LanguageQEGLQ来实现Qƈ且很适合于非常精通诸?COBOL {程序语a的程序员Q他们将不必学习诸如 Java {面向对象的语言?/p>
从诸如成本、工作量、时间和复杂性等斚w分析上述Q然后按照下面图 1 所C的方式对这些徏议进行归c:每个参数都具有一个优先名称—?#8220;?(H)”?#8220;?(M)”?#8220;?(L)”?/p>
下面是一些补充徏议: 提供一l在C化期间优化内部操作的Q以便ؓ当前人员提供更多参与Z。这些徏议包括: h意,q些会因情况而异Qƈ且应该基于与某个情Ş有关的相关信息。上q案例研I只是一个用作指导原则的CZ?/p>
Z所选的Qؓ执行团队草拟l的转换计划。这包括短期Q一至两q_、中期(两至三年Q和长期Q五q_的项目计划。创建活动(目Q、活动的业务价倹{持l时间、大致成本和资源需求的摘要。这有助于推动资金分配决{和成果?/p>
转换规划期间的重要考虑事项之一涉及到硬件或遗留q_的现代化。在q一点上Q评估重用可能性也是最有利的。例如,客户拥有一?System z pd中的 IBM 中端大型机系l。该pȝ的功能之一是能够在q行 AIX® ?WebSphere Application Server 的单独分Zq行 Java 工作负蝲。该pȝ的此功能可用于实现重用,q且是确定投资需求时的一个重要考虑事项。请参见参考资?/a>部分以获得指向更多信息的链接?/p>
本文提供了深入的见解Q说明了如何Z型企业的主要高层管理h员提供遗留系l{换和C化活动的和指对{本文介l了如何通过执行数据攉、分析和步骤Qƈ提供转换规划信息以支持资金分配决{,从而有条不紊地完成该Q务?/p>
?1. 对各U备选解x案方法徏议的分析
l常会听到这L抱怨,我做出的架构设计Q下面的力不够,无法实现。这个架构是XX推荐的,为啥做下来问题会q么多? 我们的架构师只会_其实水^不行Q做出来的东西很隄{等?br />
其实认同我说?的h应该已经明白Q架构既然是渐进验证的,那么架构的可行性就是一个必考虑的问题。架构师需要熟悉自q团队成员的构成和技术特点,在此基础上对设计做权衡,再好再优U的架构也要取决于团队成员的理解能力和执行能力Q这点对很多人来说居然完全不理解?/p>
和现在的各\有志青年一P我也曄努力奋斗要做一个架构师Q我?1q参加了sun的架构师认证考试。那时候的SCEA考试q没有什么参考资料和贩卖{案。各路精英只能在一个国外论坛上泡着交流l验Q经常看到某某高分过了的消息Q又看到某某q_表现不错Q又差了多少分没q云云?br />
我看了很多书Q也颇有些项目经验,通过成W却一般,80分左叻I所以很想知道别人的设计是如何做的,什么样的设计可以得到更高的分?l过协商Q我和一个挪威hQ一个d国hQ有20q的开发经验)交换了通过考试的作业。让我震惊的是d国h设计的粒度,他的架构设计几乎x本h做的详细设计一P只要单的译工作已l可以runQ即便是对d国h的严谨细致早有所闻,我还是难以想象这是一个小目的架构设计?和d国h做了交流Q他说他必须做得q么l,否则他的团队成员理解会生偏差, face to face的交也不能弥补q个问题Q因Z的小伙子不是都够聪明?br />
q让我第一ơ意识到Q架构师的工作的一个中心,q不是直接面对客P面对老板而是面对技术团队成员。其后的工作中我又多ơ碰到类似的问题Q?同样的需求,一个架构师面对不同的团队成员的时候,很可能作出截然相反的设计。架构师必须针对团队成员的特点,认真考虑团队成员的技术能力和学习能力Q有针对性的选择和^衡,甚至是牺Ԍ才能保证架构的可行性?/p>
在一个理想的技术团队,架构师固然可以只兛_技术,但是q样的团队现实中存在的概率有多少Q?如death to march 2nd中所_现实的Y件开发团队,大部分都要面对一个资源短~问题,
不能说服老板l你_的资源,那么只能选择充分使用现有的资源,菜刀也是刀Q对不对?/p>
我不知道有多项目架构师q开发团队能获得真正的成功,一般来_架构设计的项目都是中{以上规模的目QhC般都会超q?0个以上,寚w目管理,Ҏ术h员有着更高的要求。不公叔R乐意高薪聘请外援q行架构设计来解决问题,但是l果都不理想Q原因即如此?br />
我非正式的咨询过2个项目,架构设计都由大堆q工程师完成,pm哭着脸跟我抱怨,我们的架构没问题Q都是大堆钱做的, 国外啥啥都这么用Q但是我们的E序员不行,无法很好的将架构实现?/p>
姑且不谈大堆׃ؓ了推销自己的品加塞的东西Q单pU丝毫不考虑团队成员构成Q千Z面的拯设计Q都已经注定成功只能是偶然了。这L架构Q又如何说没问题Q一个架构师最低限度的责QQ既是将q种大众face裁剪调整到适合自己团队的面孔,交钥匙的做法是没戏的。我只能很无奈的告诉他们Q这样复杂的q度设计Q如果不做裁剪,即便我给你找到合适的E序员,你也无法承担旉上的成本Q何冉|能始终都会是个大问题?br />
不少中小公司的同胞们敬Ԓ着大堆钱公司,指望他们能解x本的问题Q殊不知Q某U意义上Q架构设计的工作Q是没法外包的,你可以咨询,可以NQ但是干zL另外一回事。这点和互联|应用什么的Q还是挺大差别的?/p>
某方面讲q是对的Q但又不全对Q因为技术工作只是架构师工作做的一个核心关注点而已。一个nb程序员可能在技术方面是nb的,但是在很多方面确实欠~的Qƈ不适合做架构师?/p>
做企业应用的Q牵涉的面太q,加上行业生存环境又不是很好,企业理普遍也不规范Q所以很难象某些领域Q架构师是一个纯_的技术工作?br />
首先Q如何获取项目经理和理层对你的信Q和支持, 是你开始工作的LQ?q一块和技术ƈ没有直接的关p,取决于你的表达能力和d性,你如何展C的实力,你做事是否够主动,是否有意识和能力L动项目。不能让老板感觉你就是一个greekQ这一条是很多不错的技术h员难以做到的。而实际工作中Q你也绝不能把所有时间都花在技术上Q你臛_要拿?分之一的时间去和pmQ和老板沟通,协商问题Q?才能得到你的生存I间?/p>
其次Q如何获得团队成员对你的信Q和支持,是你展开工作的基Q如果你不够传奇Q就需要你做一个牧师或者善于聆听的人, 通过熟悉自己的团队成员的构成和技术特点,才能充分发挥他们的所长,赢得他们的信d支持Q看hq好像是pm的工作,但是不尽Ӟ?所诉,架构设计q是一个个体脱d队的行ؓ。和团队成员打交道,多半又要花掉?分之一以上的时间?br />
好吧Q你q要明白Qؓ啥要叫架构师而不是高U工E师Q这个已lout了)Q?是因Zq需要承担售前售后Q务, 如何单清晰的向不懂技术或者半懂技术的客户讲清楚技术问题,q是个学问,要做到这点,按我以前的老板说法Q你必须有常识, 常识要多道可以用一些简单的故事例子把东西讲出来Q所以有I多看看电视,多和销售学学,Zq得学点基本CgAQ上ơ我差点把某公司来给我们推销产品的工E师l踢出去了,在我提了意见以后Q丫居然坚持跟我说他们东西是最好用的,你敬业没错,但是好歹我才是用户吧?br />
如果你的公司是做目Z的,恭喜你,你还要学会如何和客户周旋Q如何回避到客户内部以及客户和其他供应商之间的矛N厅R因为某斚wQ作为架构师Q你׃表了技术上的权威,你要明白一点,理上出了问题,从来都是往技术上推是最单的。项目之外的话,说v来一定要谨慎Q再谨慎。比如如果有客户不愿意购买设备和软g实现负蝲均衡Q找你咨询,你随口一_啥啥免费软g可以做,好吧Q你完蛋了,你要么就是得|了某供应商Q搞不好q就是你们公司卖的)Q要么,是{着来客户l你套口子吧?br />
而且Q作Z个企业应用的架构师,你不可避免的要和各类厂商打交道,q里面也是大堆的学问Q虚虚实实的东西大把Q偶你甚至会受到美色或者银弹的dQ记住,只是偶尔Qh家一般不乐意在你q个U别上下血本)你要一不小心分不出真假Q很可能做了大堆钱公司的小白鼠Q搞的在客户和公叔R里外不是人?/p>
q有Q架构设计往往q需要考虑到技术的生命周期问题Q?那么你对客户公司Q对开发公司的状况的了解,Ҏ个行业的发展势的了解,也会影响C设计的决{,q种东西往往跟市场有养Iq不取决于技术,q考核的就是你的视野和寚w题的敏感E度?打个比方Q你开发了一个很好的pȝQ但是到了你职的时候,客户却发C选择的这U技术已l淘CQ现在很隑ֆ扑ֈ合适的人员q行l护了,q样的架构师Q算合格么?
说完了外面的东西Q再说里面的?br />
一个成熟的企业应用的架构师Q除了对行业技术应用有准确的把握和l验U篏之外臛_q需要有丰富的业务知识?/p>
一般来_架构设计由几个面构成Q其中一个面是技术架构,q有一个面是业务架构, 技术架构必通过后者的验证。积累一个行业的业务知识Q少则一q半载,多则3q?q_q都不是单纯看书阅读资料可以获得的。客户可不会只因Z的技术如何先q,nb 验攉目的?/p>
再有Q?再好的架构,也需要向E序员沟通和推广Q?那么你至也要是个合格的技术讲师吧Q?兄弟们管你叫那个师,你总还得有能力教h家一点东西吧Q?/p>
某些目Q技术甚臛_能根本就不是x点,我曾l参与的一个项目,在我加h的时候架构设计和开发工作都已经完成Q而且是基本构建在相对错误的道路上Q基于项目进度的压力Q我已经没有可能重新推到再来Q所以我把工作的重心转移到如何培L高团队成员的技术能力,降低不成熟架构对他们工作的干扎ͼ换句话说Q我q的工作是打补丁。这些看实不够nb的工作大部分都和技术无养I和流E图Q模式无养I但是有效的I补了架构的缺P保证了项目的利q行?
既然不能选择dQ那么菜刀也是刀Q对吧?br />
最最后,你还要有点h脉,有在天Ӌ到处L兄弟Q这样你搞不定问题的时候,卡住的时候,或者他们一个小的提示可以救你于水火之中。不会不是你的错Q?解决不了问题才是你的错?br />
在我看来架构师的工作Q是一个合了各种知识和经验的工作Q架构师更象酒店里的行政大厨Q只会炒菜那是绝对不行的Q很隑֍U的定义为技术工作。当Ӟ动不动就把架构师抬D术家Q开口闭口XX的艺术,哪还是过了,你以为画ȝ都是艺术家么Q?我家狗仔q能用嘘嘘画地图来着?br />
指望多读书,多写代码Q一个h对着电脑pq速成长ؓ架构师,嗯, 我觉得可能性不是很大?br />
前几天看C架构师已死的文章,颇ؓ有趣Q仔l想惻I架构师之所以兴盛和之所以必死,多半是因为太多的人对软g架构师的工作存在诸多误解的缘故。而诸多媒体和原厂商出于自w利益在国内行业q行的过度吹捧,l予了架构和软g架构师太多的光芒Q程序员们自然而让的就把个人的职业规划扔到了聚焦点上?/p>
写一些自己对架构设计和架构师的一些不是很成熟的看法,写到哪算那,全当口水了?/p>
架构的概念非常广泛,解决的问题域I间也各有差距, 不能从一而论Q?此处单指企业应用的范围而已Q和互联|应用等其他范畴有较大差距?/p>
1. 架构是设计出来?/p>
q是很多人对软g架构的一个最大误解?
传统的瀑布模型里,Zؓ的划分设计和~码实现q程Q也划出了设计和验证q程的`沟,整体设计Q概要设计)的可验证性,要在目的中后期才能得到体现Q这时候ؓ时已晚。而ؓ了保证设计的质量Q回避中后期风险Q又往往会强调加计粒度和评审_度Q这样一来,无Ş中又l箋加大了设计和验证的`沟,拖长了问题反馈周期,规模大的项目,问题ؓH出?/p>
据我的印象,业界中最早的最有媄响的关于架构和架构师的界定其实来源于RUP.有别于传l的瀑布模型的中的概要设计,软g架构很难再说是按水U方式设计出来。架构设计和概要设计的最大差别在于架构设计更看重反馈和验证过E,更看重架构师在整个Y件开发过E中的由始而终的参与。在rup中,目早期的关键P代都和架构设计有直接关系?/p>
架构设计应该通过更好的反?沟?验证机制Q?能在目的较早期得到技术和业务上的验证Qؓ整个目打下E_的基?在某些敏捷开发过E中Q架构设计ƈ不会作ؓ一个显著的KPI提出Q更多是作ؓ一U隐喅R通过使用q代和其他更好的反馈交流机制Q让目的架构设计在在项目的前期以验证和演进的方式完成。可以说一个真正的架构设计Q必L可以有效验证的?/p>
而现在很多公司和l织行的先让大拿组l做设计Q设计做完再评审Q然后丢l小兵去q活的架构设计流E,实际是对瀑布模型的l,我个为是完全背道而驰的。我多次参加q这L架构设计评审Q基本上可以说没有什么有真正营养的东西,只是一些流行概늚堆砌Q昨天EJB,今天SSHQ明天又是OSGIQ这L架构设计作出来也有可能会大幅度修改,或者坚决不修改让下面的人痛苦不堪,所谓的评审和存档过E只是自ƺ欺已。再考虑现在各大公司行的CMM/CMMIQ过E改q管理,q些paper的工作还可能会因为引入复杂的审批修改程把h拖入泥潭?/p>
q种做法Q在java圈子里面Q因为早期sun和一些大公司Ҏ构和模式概念的极力鼓吹,大ؓ盛行。某些h甚至只是看完了blueprintQ做了几个tutorialQ就摇n一变架构师Q开始了架构设计生?/p>
q样的架构师也往往很少~写代码Q我们可以理解,一个h写完300늚设计文档以后Q还有多意愿再d实现代码Q)Q很参与项目的开发工作,只满_一些试验性质的代码工作(对呀Q现在开源东西这么多Q流行的东西l装一下架构设计就over了么Q还实现什么设计)和指导工作,甚至有些paper的架构师Q完全就是靠_读各种pattern和x宝典来做设计Q设计的可行性和高风险性,可想而知Q早期大量EJB的滥用导致的目p|Q其实根本原因在于甚有架构师以验证演进的手D|军_是否应该使用EJBQ怎样合理的用EJBQ将架构设计草率的外包给各大原厂商鼓吹的概念或者各Ublueprint。而小兵们在面Ҏ?模式两顶大帽的时候也只会怯懦的怀疑自q个h能力Q然后坚持不懈的向架构师q一伟大位置l箋奋斗?/p>
而另一斚w目理者也往往会误以ؓ有了正规的架构设计就可以更好的保证Y仉目质量,可以项目的重心攄在需求和非技术工作之外,可以不用再考虑一般程序员的技术能力问题, 可以大幅度的xxxQxxxQ?最后一堆苦_然后再把责Q归咎于架构师不成熟?/p>
我早q经历过的几个项目就有此斚w沉痛的教训,事后我个人复审设计,发现基本上整个方向都是错误的Q个别项目设计者甚臌EJB的一些基本概念都没有了解Q自己重头实C一遍。过长的验证周期D后期已经无法再做M修改Q只能咬牙吞下?/p>
真正实用的架构是以逐步严}的方式验证出来的Q即便是自称中国java NO.1的袁U岗告诉你EJB非常好,没有EJB的架构就不是真正的J2EE架构Q你也要验证以后再说Q在此顺便bs一下csdn?br />
在那架构师之死的小品里Qboss问小兵,你如何说服大家要使用hibernateQ?其实{案很简单,架构又不是设计出来的Q?Z么要说服Q?br />
AQ?br />
软g工程里面有个著名的brook定理Q大意就是向一个进度落后的目加hQ只会让q个目更加落后Q引甛_来就是应该避免在目的中后期大幅度加人?q里面的主要的原因有几点?br />
1. Ch加入团队以后需要获取团队成员的信Q和尊重,q需要比较多的沟通和交流成本QY件开发说到底是一U群体活动?br />
2. Ch要理解,认同团队的文化,也需要很大的成本
3. Ch需要对目q行学习和了解,q程会拖累其他开发h?br />
4. Ch太多Q有可能会彻底摧毁原来团队已l徏立的ql构Q比如团队文化, 团队间的角色定位?br />
5. 理者会因此大幅度的增加理成本Q另外,理者很可能q未做好理q样团队的准备,有可能会因ؓ不合适的行ؓ和决定导致团队崩?br />
6. 人员增加以后Q彼此之间的交流沟通成本会大幅度增加,出一般h的想象?br />
因此一般正的做法是避免在目中后期加人,虽然q么昄单的道理大部分老板都不怿?br />
所以表面上看,逐步圈地的做法是q反brook定理的。但实际情况Q恰恰因为结对工作在很大E度上克服了上述的问题,所以你要是理解了结对的收益Q就可以明白Z么结对可以保?#8220;队伍h非常一致的目标和想法,保证团结”
1. l对可以让新Z间加快了解过E,快的融入团队, 不用结对的方式Q一个新人可能需?Q?周才能和团队相处融洽Q?使用l对的方式以后,1Q?天就可以很熟悉?br />
2.l对降低了新人的学习成本Q在l对q程中,原团队的成员采取人盯人的方式快的将技能和团队文化传递给ChQ而新Z开始就可以上手工作Q即便是菜鸟Q在l对q程中也可以通过质疑和提问对老h提供帮助和监督,而出于维护个人的自尊Q团队成员一般都会急于向新人推销Q证明自?img alt="" src="http://www.hi-pda.com/forum/images/smilies/lol.gif" border="0" smilieid="9" />Q,更有成就感和归宿感。对团队也就更容易认同?br />
3. l对是分而治之的Q有助于避免Ch因ؓ陌生环境产生分离感,建立自己的帮z?有助于强制性的向新人灌输团队的目标Q保证团队的团结。习惯了l对的工作模式以后,E序员之间必d制性的q行沟通和交流Q也可以避免产生帮派和内耗?br />
4.作ؓboss更关心的一点就是,通过l对q种方式Q可以获得够的backupQ可以避免因Zh员流动给目带来毁灭性的风险。因此可以大q度的降低管理成本。我们项目中期流׃q三分之一的hQ进度没有受CQ何媄响,所以前期boss极力反对做ppQ后期大力支持。我们自己有q一个大致统计,正常情况下离职一个hQ要损失臛_半年的h工?br />
通过l对q种方式Q互怹间徏立了沟通和信Q机制Q再划分如果有目的的团队,比较自Ӟ另外在不同的团队之间交换结对伙伴也可以做激励和监督作用。而一ơ性投入的新团队,到的问题会更多?br />
q个目其实p|的一个地方就是中期迫于h员流动而放弃了l对Q最后导致帮z֒内耗,U正q来化了血本,否则q能做的更好。h员流失有一部分是因Z人当时管理经验不I寚w题的解决Ơ妥Q还有一个原因是原材料不合适,老板在团队组Z初盲目的招来了一些ƈ不适合的hQ后来碰C个老板Q居然跟我提?0?的理论,OrzQ,也ؓ后来的内耗埋下了隐患。这也算是一个经验,团队成员的选择leader一定要q问Q对于那些性格比较偏激Q难以控制的人应该尽量回避,l不可以因ؓ资源紧迫充数?/p>
按:pp的工作方式,对团队成员性格有一定要求?br />
QQ?br />
M团队的组l划分,一定不是用技术最好的人来做leader。对技术好的h要进行压制。不有多出Ԍ都要力扶持听话的h?br />
找技术好的h是对的,但是他技术好Q你技术不好,面临挑战了。何冉|术好Q不听话的,到哪里都是干zȝ命,没有Z重视他们的?br />
AQ?br />
你老外说话也不真见外,按你q样, 几天大家造反了?br />
软g团队和一般的团队区别非常大, 对Y件团队来_最好的理模式是不管理, 让大家自己发挥,做好_的引导工作就好。小团队leaderw先士卒起个带头C左右Q大团队Q?leader要躲在后面做好后援当保姆?技术好的h的做leader是非常自然的Q不懂技术的人做负责人倒是比较Ҏ引v问题Q技术h员都比较骄傲Q除非是个美女mm带头Q那q可以忍忍?不是说不懂技术的人做不好pmQ但是没有技术背景的人天然就和技术h员有鸿沟Q技术h员背后搞的小九九Q花样那个多Q所以没有技术背景,理成本会比较高?
有个老外专门写了本书为啥技术好的hp做leaderQ?你可以找扄?/p>