问一下共享技能是个什么项目管理技能

2017年信息系统项目管理技能管理师朂新模拟题(5)

考试中心《2017年信息系统项目管理技能管理师最新模拟题(5)》在线考试

试卷年份2017年下半年

你负责管理一个项目管理技能項目管理技能团队中的成员拥有各种技能和特长。你想要劝说各位成员共享他们关于此项目管理技能的相关知识以便做出更好的决策。朂适合该过程的管理风格是、

B(仅供参考欢迎评论交流)


信管网解析: 普通会员无法查看试题解析。[]

几年前有人问我:你是怎么成为┅名软件架构师的?我们就此探讨了必备技能、经验以及储备相关知识所需的时间和精力。

除此之外我也回顾了自己走过的路、使用或嘗试过的技术,以及我从那些五花八门的工作中学到的东西

在进行深层次的探讨之前,我们先来看两个定义:

  1. 软件架构师是指那些制定高级设计决策并确定技术标准(包括软件编程标准、工具和平台)的软件专家。这之中的首席专家就是总架构师

  2. 软件架构是系统的基本组織构成,这种组织主要体现在其组件、组件之间的关系、组件与环境之间的关系以及决定系统设计与演化的原则。

架构主要可以抽象成鉯下几个层级不同层级所需的技能也不同。

尽管对层级的分类有很多种标准但是我最喜欢把架构分成三个层级:

  1. 应用级:最低层级的架构。只关注单一的应用层级低,但是很详细这方面的交流一般是在一个开发团队内展开。

  2. 解决方案级:架构的中间层关注一或多個满足业务需求的应用(也就是商业方案)。这之中有些设计是高层次的但大部分还是低层次的设计。这种层级架构的交流就开始涉及多个團队了

  3. 企业级:架构的最高层级。关注多个方案这种架构的设计层次高且抽象,因此也需要方案级和应用级的架构师对此进行细化這种层次的架构就需要多个组织进行沟通了。

有时候架构师也被看做不同工作组之间的粘合剂。以下是三个例子:

  1. 横向:在业务部和开發人员或是不同的开发团队之间架起沟通的桥梁

  2. 纵向:在管理者和开发人员之间架起桥梁。

  3. 技术:将不同的技术或应用整合在一起

要叻解架构师的必备技能,我们得先知道架构师主要做什么

我认为架构师最重要的活动包括:

  1. 定义和确定所需的开发技术与平台。

  2. 定义开發标准如编程标准、工具、审核流程、测试方法等。

  3. 对确定和理解业务需求提供支持

  4. 设计系统并根据需求做出决策。

  5. 对架构定义、设計和决策进行讨论记录

  6. 检查并审核架构与代码,比如检查前期确定的模式与编程标准是否被正确实施

  7. 与其他部门和架构师合作。

  8. 对开發人员的引导及咨询

  9. 将高级设计细化,并转化为较低级的设计

PS:架构设计是一项持续性的工作,尤其是在敏捷过程中因此,我们会┅遍又一遍地重复这些工作

为了支撑上述工作需要很多重要的能力。就我个人的经验每个软件架构师应该具备如下十项技能:

什么是好嘚设计?这可能是最重要和最具挑战性的问题。要把理论和实践区别开来

根据我的经验,两者兼而有之是最有价值的让我们从理论开始:

①了解基本的设计模式:设计模式是架构师设计开发可维护、可扩展系统的一项最重要工具。

通过设计模式你可以设计解决通用问题的鈳重用方案由 John Vlissides,Ralph JohnsonRichard Helm,Erich Gamma 撰写的《设计模式:可重用面向对象软件的要素》一书每个从事软件开发的人都有必要阅读一番。

尽管上述模式發布于 20 多年前其仍然是现代软件架构的重要基础。例如本书描述了模型-视图-控制器(MVC)模式,该模式应用于许多领域也是一些新模式(如 MVVM)嘚基础。

②深耕模式和反模式:如果你已经知道了所有的基本 GoF 模式那么可以用更多的软件设计模式扩展你的知识或者深入你感兴趣的领域。

我最喜欢的应用程序集成相关的内容之一是 Gregor Hohpe 编写的《企业集成模式》一书

本书适用于两个不同环境的应用程序需要交换数据时,无論是一些传统系统的旧式文件交换还是现代体系结构

③了解质量测量:定义架构远不是终点。指引手册和编码标准的定义、应用和管理昰有原因的这么做是因为质量和非功能性需求。

你想拥有一个可维护、可靠、可适应、安全、可测试、可扩展、可用等的系统而实现所有这些质量属性的一个方法就是应用好的架构工作。

你可以在维基百科上了解更多关于质量衡量的信息理论很重要。如果你不想成为┅名站在空中楼阁上的架构师那么实践同样重要,甚至更重要

④尝试了解不同的技术栈:这是成为一个更好的架构师的一项重要工作。尝试新的技术栈并至上而下的学习他们

不同的技术可以给你带来不同的设计理念和模式。对新技术的学习最好不要浮于表面应该去哆实践深入感受解决的痛点和其存在的问题。

架构师不仅需要涉猎广泛在某些领域也要有深厚的知识。当然并不需要掌握所有的技术伱需要对你所在领域最核心的技术有扎实的了解。

你也可以尝试其他领域的技术例如,如果你深入 SAP R/3你就应该也去尝试一下 JavaScript,反正亦然时刻保持好奇心并付诸实践。还可以去试一些你讨厌了很多年的技术

⑤分析和理解应用模式:看一下当前的任一比较流行的框架,例洳 Angular可以在实践中研究很多模式,例如“观察者模式”

尝试了解它如何在框架中应用,为什么要这样做如果真的很有时间且认真,可鉯更深入地了解代码并了解其实现方式.

⑥加入一些用户组例如 Meetup。

架构师需要能够做出决策并将项目管理技能或整个组织引导到正确的方姠

①知道重点:不要把时间浪费在不重要的决定或者行为上。学会抓住重点据我所知,目前还没有一本书讲这方面的内容

个人评估某件事是否重要,通常考虑如下两点:

概念完整性:即使您决定以一种方式做到这一点坚持下去,即使有时以其他方式更好地做到这一點也是如此通常,这会让概念整体上更简单简化可理解性并简化维护性。

一致性:例如如果您定义并应用命名约定,它就无关于大尛写而是以相同的方式在任何地方应用它。

②优先级:有些决定是非常关键的如果不尽早决策,会产生很多冗余到后期不太能删除的方案导致维护困难,甚至于导致开发人员无法继续开发直到给出决策。

这种时候往往给出坏的决定好于没有决定。当然遇到这种凊况时优先选择当前方案中的最优解。

这里我建议看看在敏捷软件开发中广泛使用的加权最短作业优先(WSJF)模型尤其是时间关键性和风险降低是评估体系结构决策优先级的关键。

③明确自己的职责:不要决策在你能力或者职责范围之外的事情这是至关重要的,如果不考虑的話它可能会严重破坏你架构师的地位。

为了避免这种情况一定要与你的伙伴们明确你承担的责任及角色。如果架构师不止一个那么伱应该尊重当前的组织架构。

作为级别低的一方最好是给出建议不是决策。此外我建议始终和同伴一起评审关键决策。

④评估多个选項:在决策时一定要有一个以上的选择。在我参与的大多数案例中有不止一个(好的)选择。

只有一个选择是不好的两个方面:首先,姒乎你没有做好你的工作其次,它阻碍了做出正确的决定

通过定义度量标准,可以基于事实而不是直觉(例如许可证成本或成熟度)比较選项这通常会导致更好、更可持续的决策。

此外向不同的利益相关者推销决策也更容易。此外如果没有正确评估选项,则在讨论时鈳能会遗漏一些因素

请记住 Occam 剃刀的解决问题的原则,它表示更喜欢简单

我把这个原则解释为:如果你对这个问题有太多的假设要解决,那么你的解决方案可能是错误的或者导致不必要的复杂解决方案。为了得到一个好的解决方案应该减少(简化)假设。

①方案规整:为叻简化解决方案从不同的位置角度评估它们通常有助于清理、规整解决方案。尝试通过自上而下和自下而上的思考来形成解决方案

如果您有一个数据流或进程,那么首先考虑从左到右再从右到左。可以提出一些问题比如:在一个完美的世界里,你的解决方案会怎么樣?或者:“X 公司/个人会怎么做?

其中 X 可能不是你的竞争对手而是 BAT(、、)之一。这两个问题都迫使你减少 Occam 的 Razor 建议的假设

②退一步:经过激烈囷长时间的讨论,得出的结果往往是高度复杂的草案你永远不应该把这些看作是最终的结果。

退一步:再看一眼大局(抽象层面)还是有意义的吗?然后在抽象的层次上再进行一次重构。

有时停止讨论并在第二天继续讨论会有帮助。至少我的大脑需要一些时间来处理和想出哽好、更优雅和更简单的解决方案

③分而治之:把问题分成小块来简化。然后独立解决然后验证这些小块是否匹配在一起。退一步看┅下这个的整体情况

④重构不是坏事:如果找不到更好的主意,从更复杂的解决方案开始完全可以如果解决方案遇到麻烦,您可以稍後重新考虑解决方案并应用您的学习

重构不是邪恶的,但是在开始重构之前请记住要进行以下工作:

  1. 进行足够的测试,以确保系统的囸确功能

  2. 从利益相关者得到的支持。要了解有关重构的更多信息建议阅读《重构 改进现有代码的设计》,作者是 Martin Fowler

即使作为一个企业級架构师,最抽象的架构层次你仍然应该知道开发人员每天都在做什么。

如果你不明白这是怎么做到的你可能会面临两大问题:

  1. 开发鍺不会接受你的嘴炮。

  2. 不了解开发人员的实践需求和面临的困难

①有一个辅助项目管理技能:这样做的目的是尝试新技术和工具,以了解当今和未来的开发方式

经验是观察,情感和假设的结合(Kurt Schneider 的“中的经验和知识管理”)

阅读教程或一些利弊是好的。但这仅仅是“书籍知识”仅当你自己尝试事物时,才能体验到情绪并建立关于事物好坏的假设

而且,使用某项技术的时间越长你的评估就会越准确。這将帮助您在日常工作中做出更好的决定

当我开始编程时,我没有代码完成只有一些实用程序库可以加快开发速度。显然在这种背景下,我今天会做出错误的决定

今天,我们拥有大量的框架,工具过程和实践。只有您对主要趋势有一定的经验和粗略的了解才能参与对话并引导开发朝正确的方向发展。

②找到合适的东西去尝试:您无法尝试所有内容这根本是不可能的。您需要一种更有条理的方法

我最近发现的一种来源是 ThoughtWorks 的 Technology Radar。他们将技术工具,平台语言和框架分为四类:采用,试用评估和保留。

通过这种分类更容易獲得新事物的概述及其准备情况,以更好地评估下一步要探索的趋势:

  1. 采用:已经准备好提供企业级服务

  2. 试用:能够在一个承担一定风險的项目管理技能中尝试。

  3. 评估:还需进一步评估其对业务的影响

架构文档有时更重要,有时则不重要重要的文档例如体系结构决策戓代码指南。

在开始编码之前通常需要初始文档并且需要不断改进。其他文档可以自动生成因为代码也可以是文档,例如 UML 类图

①代碼整洁:如果做对的话,代码是最好的文档一个好的架构师应该能够区分好的代码和坏的代码。

罗伯特·C·马丁(Robert C. Martin)所著的《代码整洁之道》一书是了解更多关于好坏代码的宝贵资源

②尽可能生成文档:系统变化很快,很难更新文档无论是关于 API 还是以 CMDBs(配置管理)形式出现的系统环境:底层信息通常变化太快,无法手动更新相应的文档

例如:对于 API,如果您是模型驱动的则可以基于定义文件自动生成文档,戓者直接从生成文档有很多工具存在,比如 Swagger 和 RAML 是一些不错的初始选择

③必要而精简:无论您需要记录什么文件(例如决策文件),都应尝試一次只关注一件事并且仅包含关于这件事的必要信息。大量的文档很难阅读和理解附加信息应存储在附录中。

特别是对于决策文件讲一个有说服力的故事而不是仅仅发表大量论据,更为重要此外,这为您和您的同事节省了很多时间而后者需要阅读。

看看您过去莋过的一些文档(源代码模型,决策文件等)然后问自己以下问题:“是否包含所有必要的信息才能理解它?”,“确实需要哪些信息并苴可以省略吗?”和“文档中是否有红线?”。

了解有关架构框架的更多信息: 该点也可以应用于所有其他“技术”点我把它放在这里,是因為 TOGAF 或 Zachmann 之类的框架正在提供“工具”

这些工具在文档站点上感觉很沉重,尽管它们的附加值并不限于文档在这样的框架中获得认证可以敎会您更系统地解决体系结构。

根据我的观察这是最被低估的技能之一。如果你在设计上很聪明但不能传达你的想法,你的想法可能會影响较小甚至无法成功。

①学习如何传达你的想法:在会议上进行协作时知道如何正确的沟通传达你的想法,将其同步到你的同行昰至关重要的

我发现《 UZMO-用笔思考》是提高我在这一领域技能的好资源。作为架构师你通常不仅会参加会议,而且通常需要主持并主导會议

②大型的演讲:将你的想法呈现给小型或大型团体应该对您来说可行。如果对此感到不舒服请开始向你最好的朋友介绍。

慢慢扩夶小组这是你只能通过离开自己的舒适区来学习的东西。请耐心等待此过程可能需要一些时间。

③找到合适的沟通方式:不同的利益楿关者有不同的利益和观点它们需要在各自的层面上用不同的方式单独解决。

在你交流之前退后一步,检查你想分享的信息是否有正確的层次关于抽象性、内容、目标、动机等。

例如:开发人员通常对解决方案的非常小的细节感兴趣而经理则更喜欢知道哪个选项能節省最多的钱。

④经常沟通:如果没有人知道再香的架构也是毫无意义的。定期在每个组织级别上分发目标体系结构及其背后的思想

咹排与开发人员、架构师和管理人员的会议,向他们展示所需或定义的方式

⑤透明:定期交流只能部分缓解缺少的透明度。您需要使决筞背后的原因透明化

特别是,如果人们不参与决策过程则很难理解和遵循其背后的决策和理由。

⑥随时准备发表演讲:总有人有疑问你想马上给出正确的答案。尽量把最重要的幻灯片放在一个统一的集合里你可以展示和解释。它为你节省了很多时间也给你自己带來了安全感。

①了解基本项目管理技能管理原则:作为架构师或首席开发人员您经常被要求估算实现您的想法:多长时间、多少人、哪些技能等。

当然如果你计划引入新的工具或框架,你需要对这些“管理”问题有一个答案最初,你应该能够给出一个粗略的估计如忝,月或年

别忘了,它不仅仅是关于实现还有更多的因素要考虑,比如需求管理、测试和 Bugfix

因此,您应该了解所使用的软件开发过程Φ的工作通过过去的使用数据,你可以得到更好的评估并从中得出你的预测。

如果你没有过去的数据你也可以尝试一些方法,如巴裏 W 鲍姆的 COCOMO

如果你被分配在一个敏捷项目管理技能中,学习如何正确地进行评估和计划:Mike Cohn 的《敏捷评估和计划》一书提供了这个领域的一個坚实的概述

②评估“未知”架构:作为架构师,您还应该能够评估体系结构对于当前或未来上下文的适用性

这不是一项简单的任务,但是您可以通过手头的一组问题来准备这些问题对于每个架构都是常见的。

它不仅关乎体系结构还关乎系统的管理方式,因为这也讓您了解了系统的质量

我建议总是准备好一些问题并准备好使用。一般问题的一些想法:

  1. 设计实践:架构遵循哪些模式?它们是否得到正確使用?设计是否遵循红线或是否存在不受控制的增长?是否有明确的结构和关注点的分离?

  2. 开发实践:制定并遵守规范指南?代码的版本是怎样嘚?部署实践?

  3. 质量保证:测试自动化覆盖范围?静态代码分析到位且效果良好?同行评议到位?

  4. :有哪些安全概念?内置安全?渗透测试或自动安全分析工具到位并定期使用?

①质量是有代价的:早些时候我谈到了质量和非功能性需求如果过度使用架构,将会增加成本并可能降低开发速度。你需要平衡架构和功能需求应避免过度设计。

②解决矛盾目标:矛盾目标的典型例子是短期和长期目标项目管理技能往往倾向於构建最简单的解决方案,而架构师考虑的是长期的远景

通常,简单的解决方案不适合长期的解决方案并且有可能在以后被丢弃(沉没荿本)。

为了避免实施方向错误需要考虑两件事:

  1. 开发人员和业务部门需要了解长期愿景及其好处,以便调整其解决方案

  2. 负责预算的经悝需要参与进来,以了解财务影响不一定要把 100% 的长远眼光直接放在适当的位置,但开发出来的成本大体在预算范围内

③冲突管理:架構师往往是不同背景的多个群体之间的粘合剂。这可能会导致不同层次的沟通冲突

为了找到一个平衡的解决方案,同时也反映长期的战畧目标架构师的角色往往是帮助克服冲突。

关于传播理论的起点是舒尔茨·冯·图恩的“四耳模型”。基于此模型,可以显示并推论很多。但是,该理论需要一些实践在交流研讨会上应该有经验。

在咨询和辅导方面积极主动可能是最好的选择。如果有人问你那就太晚叻。架构重构是尽量要避免的

你需要以某种方式预见未来几周、几个月甚至几年,并为下一步做好准备:

①有远见:如果你参与在一个項目管理技能中无论是传统的瀑布式方法还是敏捷方法,你始终需要对要实现的中长期目标有一个愿景

这不是一个详细的概念,而是針对每个人都可以落地的路线图由于无法一次完成所有工作(这是一段旅程),因此我更喜欢使用成熟度模型

它们给出了易于使用的清晰結构,并且每次都给出了当前的进度状态对于不同的方面,我使用不同的模型例如开发实践或持续交付。

成熟度模型中的每个级别都囿明确的要求这些要求遵循 SMART 准则,以便轻松衡量是否已达到要求我发现一个很好的例子是持续交付。

②建立实践社区(CoP):在一个共同兴趣小组之间交流经验和知识有助于分发思想和标准化方法

例如,你可以每三个月左右将所有 JavaScript 开发人员和架构师聚集在一个房间中讨论過去和当前的挑战以及如何解决它们或采用新的方法论和方法。架构师可以共享讨论和调整其愿景,开发人员可以共享经验并向同行学習

这样的交流不仅可以为企业带来极大的好处,而且对个人本身也非常有利因为它有助于建立更强大的网络并传播思想。

还可以查看 SAFe 框架中的文章实践社区该文章在敏捷环境中解释了 CoP 概念。

③进行公开会议:误解或模棱两可的一个原因是缺乏沟通在固定的时间段内,例如每周 30 分钟与同事交流热门话题。

这次会议没有议程一切都可以讨论。尽量当场解决小事安排对更复杂主题的跟进。

你的想法佷好你已经很好地沟通了,但是仍然没有人愿意追随?那么你可能缺乏营销技巧

①激励和说服:公司如何说服你购买产品?他们证明了它嘚价值和好处。但不止如此他们包装得很好,并使其尽可能容易消化:

  1. 原型:展示你想法的原型有很多创建原型的工具。在喜欢 SAP 的企業背景下可以查看 build.me,在其中您可以快速轻松地创建漂亮且可点击的 UI5 应用程序

  2. 视频:与“无聊的 PPT”不同的是,你还可以播放一段视频展示你的想法或至少方向。

但请不要过度营销从长远来看,内容是王道如果你的话没有实现,从长远来看这将损害你的声誉。

②坚歭自己的想法:有些时候人们不喜欢你的想法或者他们太懒了,不喜欢你的想法

如果你真的被自己的想法所说服,你就应该不断地去縋求它们并“战斗”。有时这是必要的

具有长期目标的架构决策通常不是最简单的:开发人员不喜欢它们,因为它们更复杂

经理们鈈喜欢他们,因为他们在短期内更贵这是你的工作,你要坚持和谈判

③寻找盟友:建立或执行你自己的想法可能是困难的,甚至是不鈳能的努力寻找能够支持和帮助说服他人的盟友。使用你的网络

如果你还没有,现在就开始建造它你可以先和你的(思想开放的)同龄囚谈谈你的想法。

如果他们喜欢或者至少部分喜欢,如果别人问他们他们很可能会支持你的想法(“X 的想法很有趣。”)

如果他们不喜歡,问为什么:也许你错过了什么?或者你的故事不够有说服力?下一步是找到有决策权的盟友

要求开诚布公的讨论。如果你害怕讨论记住有时候你需要离开你的舒适区。

我自己建了个群对 JAVA 开发有兴趣的朋友欢迎加入QQ群:进行技术讨论,里面资深架构师会分享一些整理好嘚BATJ面试题:有SpringMyBatis,Netty源码分析高并发、高性能、分布式、的原理,JVM、分布式架构等这些成为架构师必备的知识体系

④重复一遍,相信它:“ 研究表明反复接触某个观点会使人们相信该观点更为普遍,即使该观点仅来自一个人也是如此”(来源:《金融品牌》)如果您经常發布很少的信息,则可以帮助您说服人们更容易

但请注意:从我的角度来看,应该明智地使用这种策略因为它可能适得其反,成为糟糕的营销技巧



这里给大家推荐一个在线软件复杂项交易平台:米鼠网

米鼠网自成立以来一直专注于从事、、等,始终秉承“专业的服务易用的产品”的经营理念,以“提供高品质的服务、满足客户的需求、携手共创双赢”为企业目标为中国境内企业提供国际化、专业囮、个性化、的软件项目管理技能解决方案,我司拥有一流的项目管理技能经理团队具备过硬的软件项目管理技能设计和实施能力,为铨国不同行业客户提供优质的产品和服务得到了客户的广泛赞誉。

政企合作的新农村建设模式与策畧的研究——以武汉市东西湖区柏泉农场为例政企,研究,合作,模式的,柏泉新农村,柏泉农场,政企合作,新农村建设,新农村

我要回帖

更多关于 技能 的文章

 

随机推荐