- 浏览: 402846 次
- 性别:
- 来自: 长春
文章分类
最新评论
-
milkyTea_:
...
学习:二维码、QR码、J4L-QRCode、java -
xunke515:
请问如何更换其他用户,注销了从新登录的时候选择么?
Hadoop启动时出现Unrecognized option: -jvm 和 Could not create the Java virtual machine -
_copythat:
学习:二维码、QR码、J4L-QRCode、java -
小fi(FD):
楼主,你好,关于你发表的《基于动态表单的Java不确定字段数报 ...
基于动态表单的Java不确定字段数报表项目实现 -
rmn190:
受用了。多谢分享!
SD2见闻--参加PPT制作秘笈沙龙
《怎样成为优秀的软件架构师》解析 (好文转载)
软件, 架构, 解析近来读了一篇《怎样成为优秀的软件模型设计者》的文章,感触颇深。仔细对比分析,发现原来我自己和周围的软件开发人员平常的一些自认为对的做法,有很多是有问题的。
1.人远比技术重要
你开发软件是为了供别人使用,没有人使用的软件只是没有意义的数据的集合而已。许多在软件方面很有成就的行家在他们事业的初期却表现平平,因为他们那时候将主要精力都集中在技术上。显然,构件(components),EJB(EnterpriseJavaBeans)和代理(agent)是很有趣的东西。但是对于用户来说,如果你设计的软件很难使用或者不能满足他们的需求,后台用再好的技术也于事无补。多花点时间到软件需求和设计一个使用户能很容易理解的界面上。从微软操作系统和OFFICE套件在市场上的成功可以得到对这个问题的最佳解释。
2.理解你要实现的东西
好的软件设计人员把大多数时间花费在建立系统模型上,偶尔写一些源代码,但那只不过是为了验证设计过程中所遇到的问题。这将使他们的设计方案更加可行。有效的系统分析和架构是减少后期错误或复杂实现的必要保证。
3.谦虚是必须的品格
你不可能知道一切,你甚至要很努力才能获得足够用的知识。软件开发是一项复杂而艰巨的工作,因为软件开发所用到的工具和技术是在不断更新的。而且,一个人也不可能了解软件开发的所有过程。在日常生活中你每天接触到的新鲜事物可能不会太多。但是对于从事软件开发的人来说,每天可以学习很多新东西(如果愿意的话)。目空一切、自满自足的人是不可能成为一个优秀的软件架构师的。
4.需求就是需求
如果你没有任何需求,你就不要动手开发任何软件。成功的软件取决于时间(在用户要求的时间内完成)、预算和是否满足用户的需求。如果你不能确切知道用户需要的是什么,或者软件的需求定义,那么你的工程注定会失败。我们进行的很多需求分析,实际上是想当然的认为用户的需求和自己认为的应该是一样的。
5.需求其实很少改变,改变的是你对需求的理解
需求分析需要一丝不苟、精确的完成,而设计的时候反而可以发挥创造力和想象力。
如果需求经常改动,很可能是你没有作好需求分析,并不是需求真的改变了。
你可以抱怨用户不能告诉你他们想得到什么,但是不要忘记,收集需求信息是你的工作。
需求真正改变的情况很少,但是没有做好需求分析工作的理由却很多。
6.经常阅读
在这个每日都在发生变化的产业中,你不可能在已取得的成就上陶醉太久。
每个月至少读2、3本专业杂志或者1本专业书籍。保持不落伍需要付出很多的时间和金钱,但会使你成为一个很有实力的竞争者。这一条在我周围能够真正实现的人很少。
7.降低软件模块间的耦合度
高耦合度的系统是很难维护的。一处的修改引起另一处甚至更多处的变动。
你可以通过以下方法降低程序的耦合度:隐藏实现细节,强制构件接口定义,不使用公用数据结构,不让应用程序直接操作数据库。
耦合度低的软件可以很容易被重用、维护和扩充。
8.提高软件的内聚性
如果一个软件的模块只实现一个功能,那么该模块具有高内聚性。高内聚性的软件更容易维护和改进。
判断一个模块是否有高的内聚性,看一看你是否能够用一个简单的句子描述它的功能就行了。如果你用了一段话或者你需要使用类似“和”、“或”等连词,则说明你需要将该模块细化。
只有高内聚性的模块才可能被重用。
9.考虑软件的移植性
移植是软件开发中一项具体而又实际的工作,不要相信某些软件工具的广告宣传。
即使仅仅对软件进行常规升级,也要把这看得和向另一个操作系统或数据库移植一样重要。
当你使用了某个操作系统的特性,如它的进程间通信(IPC)策略,或用某数据库专有语言写了存储过程。你的软件和那个特定的产品结合度就已经很高了。
好的软件设计者把那些特有的实现细节打包隐藏起来,所以,当那些特性该变的时候,你仅仅需要更新那个包就可以了。这些说到容易做到很难,没有扎实的基本功是很难成功的。
10.接受变化
这是一句老话了:唯一不变的只有变化。
通过在建模期间考虑这些假设的情况,你就有可能开发出足够强壮且容易维护的软件。设计强壮的软件是你最基本的目标。
11.不要低估对软件规模的需求
Internet带给我们的最大的教训是你必须在软件开发的最初阶段就考虑软件规模的可扩充性。
今天只有100人的部门使用的应用程序,明天可能会被有好几万人的组织使用,下月,通过因特网可能会有几百万人使用它。
在软件设计的初期,根据在用例模型中定义的必须支持的基本事务处理,确定软件的基本功能。然后,在建造系统的时候再逐步加入比较常用的功能。
在设计的开始考虑软件的规模需求,避免在用户群突然增大的情况下,重写软件。同时也不能只因为考虑未知的用户量而花费太大的成本。需求分析是平衡控制的依据。
12.性能仅仅是很多设计因素之一
关注软件设计中的一个重要因素--性能,这好象也是用户最关心的事情。一个性能不佳的软件将不可避免被重写。
但是你的设计还必须具有可靠性,可用性,便携性和可扩展性。你应该在工程开始就应该定义并区分好这些因素,以便在工作中恰当使用。性能可以是,也可以不是优先级最高的因素,我的观点是,给每个设计因素应有的考虑。花哨的、运行快速但是不能解决用户问题的系统,是不会得到用户的满意的。
13.管理接口
应该在开发阶段的早期就定义软件模块之间的接口。这有助于开发人员全面理解软件的设计结构并取得一致意见,让各模块开发小组相对独立的工作。一旦模块的接口确定之后模块怎样实现就不是很重要了。
从根本上说,如果你不能够定义你的模块“从外部看上去会是什么样子”,你肯定也不清楚模块内要实现什么。
14.走近路需要更长的时间
在软件开发中没有捷径可以走。
缩短你的在需求分析上花的时间,结果只能是开发出来的软件不能满足用户的需求,必须被重写。
在软件建模上每节省一周,在将来的编码阶段可能会多花几周时间,因为你在全面思考之前就动手写程序。
你为了节省一天的测试时间而漏掉了一个bug,在将来的维护阶段,可能需要花几周甚至几个月的时间去修复。与其如此,还不如重新安排一下项目计划。
避免走捷径,只做一次但要做对。
15.证明你的设计在实践中可行
在设计的时候应当先建立一个技术原型,或者称为“端到端”原型。以证明你的设计是能够工作的。
你应该在开发工作的早期做这些事情,因为,如果软件的设计方案是不可行的,在编码实现阶段无论采取什么措施都于事无补。技术原型将证明你的设计的可行性,从而,你的设计将更容易获得支持。
16.应用已知的模式
目前,我们有大量现成的分析和设计模式以及问题的解决方案可以使用。
一般来说,好的模型设计和开发人员,都会避免重新设计已经成熟的并被广泛应用的东西。
17.研究每个模型的长处和弱点
目前有很多种类的模型可以使用,如下图所示。用例捕获的是系统行为需求,数据模型则描述支持一个系统运行所需要的数据构成。你可能会试图在用例中加入实际数据描述,但是,这对开发者不是非常有用。同样,数据模型对描述软件需求来说是无用的。每个模型在你建模过程中有其相应的位置,但是,你需要明白在什么地方,什么时候使用它们。
18.在现有任务中应用多个模型
当你收集需求的时候,考虑使用样例模型,用户界面模型和领域级的类模型。
当你设计软件的时候,应该考虑制作类模型,顺序图、状态图、协作图和最终的软件实际物理模型。
程序设计人员应该慢慢意识到,仅仅使用一个模型而实现的软件要么不能够很好地满足用户的需求,要么很难扩展。
19.带工具的傻瓜还是傻瓜
使用一个很优秀的CASE工具并不能使你成为一个建模专家,只能使你成为一个优秀CASE工具的使用者。成为一个优秀的建模专家需要多年的积累,不会是一周针对某个价值几千美元工具的培训。一个优秀的CASE工具是很重要,但你必须学习使用它,并能够使用它设计它支持的模型。现在的编程工具越来越容易上手,有不少的人已经不去加强对基础知识的学习,这是很危险的。
20.理解完整的过程
好的设计人员应该理解整个软件过程,尽管他们可能不是精通全部实现细节。
软件开发是一个很复杂的过程,除了编程、建模、测试等你擅长工作外,还有很多工作要做。好的设计者需要考虑全局。必须从长远考虑如何使软件满足用户需要,如何提供维护和技术支持等。
21.常做测试,早做测试
如果测试对你的软件来说是无所谓的,那么你的软件多半也没什么必要被开发出来。建立一个技术原型供技术评审使用,以检验你的软件模型。在软件生命周期中,越晚发现的错误越难修改,修改成本越昂贵。尽可能早的做测试是很值得的。测试工作一贯是得不到重视的,即便你天天挂在嘴上,但是请看看你的行动。黑盒测试将压力给了测试人员,实际上很多的无用测试的根源应该从白盒测试中查找,这是软件开发人员的问题。
22.把你的工作归档
不值得归档的工作往往也不值得做。归档你的设想,以及根据设想做出的决定;归档软件模型中很重要但不很明显的部分。给每个模型一些概要描述以使别人很快明白模型所表达的内容。
23.技术会变,基本原理不会
如果有人说“使用某种开发语言、某个工具或某某技术,我们就不需要再做需求分析,建模,编码或测试”。不要相信,这只说明他还缺乏经验。抛开技术和人的因素,实际上软件开发的基本原理自20世纪70年代以来就没有改变过。你必须还定义需求,建模,编码,测试,配置,面对风险,发布产品,管理工作人员等等。
软件建模技术是需要多年的实际工作才能完全掌握的。好在我们可以从以上的建议开始,完善自己的软件开发经验。
要想成为优秀的软件架构师或软件开发人员,必须要有一个端正的态度,如果只是想依靠这个所谓的名份做幌子、混日子。我劝你还是不要踏入这个行业,以免误人误己。
作者简介:晏高明,中原油田地质录井处信息管理中心工作,2006年获国家级“系统分析员”认证资格证书。原文地址:http://www.zylj.com/Article_Show.asp?ArticleID=1184
发表评论
-
使用 JMeter 完成常用的压力测试
2011-07-14 00:04 1040讲到测试,人们脑海中首先浮现的就是针对软件正确性的测试,即 ... -
解密淘宝网的开源架构
2010-10-22 22:10 956淘宝网,是一个在线商品数量突破一亿,日均成交额超过两亿元人 ... -
Google(谷歌)正在构造可怕的帝国
2010-06-22 21:24 974今天看到新浪转载《中国企业家》的一篇文章“百度VS谷歌:优 ... -
百度VS谷歌:优秀与伟大之别
2010-06-22 21:15 781《中国企业家》杂志 百度与Google之间的 ... -
分析称企业IT部门重要性降低:从业人员应转型
2010-06-22 20:59 791导读:美国IT网站Computerworld今天撰文称,随 ... -
火车站信号自动语音播报系统的设计
2010-06-19 19:33 2076在现代工业控制过程中,广泛应用了工作状态和故障状态报警装置,通 ... -
Ping总是丢包的原因,故障排除思路,解决方法
2010-05-27 21:09 3080ping 丢包现象的发生非 ... -
Google:平台化努力
2010-05-26 20:19 846作为门的 Google 从斯坦福 2 位大学生的宿舍作品 ... -
2010年谷歌创新项目盘点
2010-05-25 12:53 9561、Chrome在线应用商店 Chrome Web Stor ... -
想创业的朋友可以看看这几句话。
2010-05-22 14:52 799一个领导人要: 生命取向要高 生命体 ... -
WebSphere Message Broker RouteToLabel
2010-05-20 13:53 840http://publib.boulder.ibm.com/i ... -
李开复:移动互联网在未来的市场和需求
2010-04-05 01:33 837今天我讲一下移动互联 ... -
分享一个壁纸网站,给我这些程序员哥们的眼睛放松放松。
2010-03-19 07:28 2008http://www.vistaback.com/ -
百度产品经理探秘:需求把握和正确决策
2010-01-13 13:22 793编者按:国内互联网公司里,百度的产品一向为人称道。尤其是其搜索 ... -
性能测试项目总结之内存泄露和内存溢出
2009-12-27 03:16 1385性能测试项目总结之内 ... -
如何搭建完整的网站架构并设计出一个好站
2009-12-25 12:23 849如何搭建完整的网站架构并设计出一个好站 http://www ... -
IE浏览器下同一网页多图片显示的瓶颈与优化
2009-12-24 21:36 868Internet Explorer 浏览器在同一时刻只能从同一 ... -
一个项目经理眼中的《2012》
2009-12-16 21:46 722《2012》放映有些时间了,它引起了人们对人性本身的思索。作为 ... -
Design IT. (8),一匹“更快的马”
2009-12-05 21:56 865Design IT. (8),一匹“更快的马” 这是《D ... -
应用程序架构指南 第一部分 第一章 应用程序架构基础
2009-11-09 20:51 1067软件架构基本概念 软件架构通常被描述为组织或系统的结构, ...
相关推荐
软件架构师作为一个专业领域的高级职位,其核心职能...《软件架构师应该知道的97件事》这本书通过多位专家的经验分享,提供了一个关于如何成为优秀软件架构师的丰富知识库,对于提升软件架构师的专业能力具有重要价值。
软件架构师是IT行业中至关重要的角色,他们负责设计和规划软件系统的整体结构,确保系统能够高效、稳定地运行。...通过深入学习,学员可以提升自己的架构设计能力和项目管理能力,成为一名优秀的软件架构师。
成为一名优秀的架构师,意味着你需要在“个人特性”和“技术技能”两方面下足功夫。在这个能力模型中,架构师的能力被分为“技术专业能力”、“人际关系能力”和“业务能力”三大核心。 首先,技术专业能力是架构师...
软件架构师,这一职业在IT行业中扮演着至关重要的角色,它是连接技术和业务的桥梁,是软件开发过程中的领航者。...通过深入学习和实践,你可以逐步成为一名优秀的软件架构师,引领技术创新,驱动业务成功。
综上所述,成为一名优秀的软件架构师需要不断地学习和积累经验。不仅要掌握广泛的技术知识,还需要具备良好的沟通能力和解决问题的能力。在互联网行业中,尤其需要注意网络、硬件和软件方面的优化,以及分布式计算等...
这份"中国优秀软件架构师感悟录"集合了多位杰出架构师的心得体会,旨在为正在学习和成长的IT人士提供宝贵的指导。以下是基于这个主题的详细知识点解析: 1. **软件架构**:软件架构是软件开发的基础,它定义了系统...
这份讲义旨在提升架构师的设计能力,帮助他们更好地理解和实施复杂的软件项目。 首先,讲义从“架构师与设计师”的角色区分开始,探讨了架构师在软件开发团队中的定位和职责,以及他们如何区别于传统的设计师。架构...
本书结合案例分析和实战演练,让读者更好地理解和应用所学知识,为成为优秀的软件架构师打下坚实的基础。 在技术知识方面,软件架构师需要具备丰富的计算机科学基础,包括编程语言、操作系统、数据结构等。编程语言...
通过阅读“做一回软件架构师.pdf”,你可以深入了解这些知识,并学习如何在实际项目中应用它们,逐步成长为一名优秀的软件架构师。记住,成为一名出色的架构师不仅需要技术知识,更需要对业务的理解、团队合作的能力...
《软件架构师考试资料》是一份综合性的学习资源,涵盖了软件架构师所需的重要知识点和实践经验。这份资料集合了多种文档,旨在帮助考生深入理解和掌握软件架构设计的核心技能,以通过相关的资格认证考试,如中国的...
《软件架构师教程》是一份全面且深入的学习资源,旨在帮助程序员逐步成长为专业的软件架构师。这份教程涵盖了软件架构设计的各个方面,对于那些希望在IT领域提升自我、迈向更高层次的专业人士来说,无疑是一份宝贵的...
.NET 软件架构师职业要求 .NET 软件架构师职业要求概述: .NET 软件架构师是一种高级的技术职位,需要具备深入的技术知识和丰富的开发经验。该职业要求掌握.NET 平台和相关技术,并具有丰富的系统分析和设计经验。...
【软考架构师2009-2022年真题附答案】是一份集中的资源,涵盖了从2009年至2022年间的软件设计师资格考试(架构师级别)的实际试题及对应的答案。这个压缩包是备考者宝贵的复习资料,尤其对于那些希望在软件架构领域...
非常棒的一部内部讲义,强烈推荐高级软件架构师 目录: 00 架构师与设计师 01 软件流程实施方案选择 02 软件架构文档设计 03 软件架构风险管理 04 如何描述和评估软件架构质量 05 设计模式与软件架构设计 06 AOP开发...
【软件架构师入门教程,成功架构你的软件】 作为软件开发领域的关键角色,软件架构师承担着设计和指导软件系统整体结构的重要职责。本教程旨在帮助初级软件工程师掌握软件架构的基础知识,逐步提升到架构师的水平。...
中科院高级软件架构师培训教材,适合有一定软件理论基础的程序员学习
《CMMI软件架构师培训资料》是一份深入探讨软件架构设计与实践的宝贵资源,专为有志于成为出色软件架构师的学习者提供。这份资料涵盖了软件架构的基础理论、核心概念以及CMMI(Capability Maturity Model ...
《2023系统架构师历年论文真题解析及精选范文实战汇编》是一本针对系统架构领域的专业参考资料,旨在帮助读者深入理解并掌握系统架构的设计原则、技术和应用。本书涵盖了2021年和2020年的部分论文主题,涉及到面向...