想要成为一个合格的软件架构师必须知道的事情

软件架构师是个让人羡慕的职业,在市场经济成熟的国家,其薪酬已经达到医生、律师、注册会计师、建筑设计师的水平。但是薪酬高低与职业成熟度没有直接的关系。重赏之下必有勇夫,高薪往往造成培养机制不健全的行业出现暂时的良莠不齐。目前我们还没有培养软件架构师的成熟机制,架构师大多是程序员自学成材。程序员擅长和电脑打交道,却不善于处理工作中的人际关系。然而经验表明,除了技术特长,沟通协作的技巧、领导协调的能力、统筹取舍的经验在指挥开发项目的过程中起着更重要的作用,而这些内容在计算机学院的课本里压根找不到。刚刚升任软件架构师的人,都有一段时间觉得茫然失措,因为有太多非技术问题困扰着他们。

软件架构师是IT 行业里独一无二的职业,既要精通软件开发技术,又要掌握业务知识,还要周旋于公司不同部门之间,协调各种予盾。做到这些绝非易事, 博文视点 即将翻译出版的新书《软件架构师应该知道的97 件事》(97 Things Every Software Architect Should Know )探讨的就是这个主题。

本书的编辑Richard Monson-Haefel 是畅销书《 Enterprise JavaBeans 》和《 Java 消息服务 》的作者。Richard 邀请五十多位杰出的软件架构师分享工作经验和观点,帮助读者少走弯路。其中不乏大家熟悉的名字:《 卓有成效的程序员 》的作者 Neal Ford ,《 企业集成模式 》的作者Gregor Hohpe ,Servlets 和JSP 专家组和W3C RDF 工作组技术专家Bill de hóra , 《 Web 应用程序快速开发 : 使用TurboGears 》的作者Mark Ramm ,《 Release It! 》的作者Michael Nygard ,《 软件开发沉思录 》的作者之一Rebecca Parsons 博士,活跃于Perl 社区的女架构师Allison Randal ,《 Java SOA Cookbook 》的作者 Eben Hewitt , 等等。

目前这本书已经翻译完成,博文视点正在紧张地进行后期制作,计划2010 年4 月下旬出版。以下是书中97 篇文章的主题和作者列表。我们尽可能收集了作者的博客地址或个人主页,方便大家浏览参考。本书的豆瓣页面 。

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

1.  客户需求重于个人简历 ( Nitin Borwankar )

客户需求至上。沽名钓誉,事与愿违。

2.  简化根本复杂性 ,消除偶发复杂性 ( Neal Ford )

分析问题好比拨云见月、水落石出。

3.  关键问题可能不是出在技术上 ( Mark Ramm )

团队同心,其利断金。

4.  以沟通为中心,坚持简明清晰的表达方式和开明的领导风格 ( Mark Richards )

沟通应当言简意赅、详略得当,别拖泥带水。

5.  架构决定性能 ( Randy Stafford )

种瓜得瓜,种豆得豆,架构设计也是一样道理。

6.  分析客户需求背后的意义 ( Einar Landre )

抽丝剥茧,洞见症结。不要被表面需求迷惑。

7.  起立发言 ( Udi Dahan )

起立发言效果更好。

8.  故障终究会发生 ( Michael Nygard )

应该提前设计预防措施,限制故障。

9.  我们常常忽略了自己在谈判 ( Michael Nygard )

工程师应该适时转换角色,学习谈判的技巧。

10. 量化需求 ( Keith Braithwaite )

没有规矩,不成方圆。

11. 一行代码比五百行架构说明更有价值 ( Allison Randal )

可工作的代码才是目标,设计只是达成目标手段。

12. 不存在放之四海皆准的解决方案 ( Randy Stafford )

软件世界没有***。

13. 提前关注性能问题 ( Rebecca Parsons )

尽早展开性能测试。

14. 架构设计要平衡兼顾多方需求 ( Randy Stafford )

平衡兼顾项目的技术需求和相关各方的业务需求。

15. 草率提交任务是不负责任的行为   ( Niclas Nilsson )

要设法杜绝开发人员草率提交任务的念头。

16. 不要在一棵树上吊死   ( Keith Braithwaite )

为客户提供多样化的解决方案。

17. 业务目标至上 ( Dave Muirhead )

技术决策不能脱离业务目标和现实条件的约束。

18. 先确保解决方案简单可用,再考虑通用性和复用性   ( Kevlin Henney )

19. 架构师应该亲历亲为 ( John Davies )

身先士卒才能赢得同事的信任。

20. 持续集成 ( David Bartlett )

21. 避免进度调整失误 ( Norman Carnovale )

不惜一切代价拒绝调整项目进度的要求。

22. 取舍的艺术 ( Mark Richards )

架构不可能满足所有需求。

23. 打造数据库堡垒 ( Dan Chak )

一开始就要定义好数据模型。

24. 重视不确定性 ( Kevlin Henney )

推迟决策,建设性地利用不确定性。

25. 不要轻易放过不起眼的问题 ( Dave Quick )

别忘了温水煮青蛙的故事。

26. 让大家学会复用 ( Jeremy Meyer )

重复利用已有资源,首先要改变大家的观念。

27. 架构里没有大写的“I ” ( Dave Quick )

变让自己变成自大狂。

28. 使用“ 一千英尺高” 的视图 ( Erik Doernenburg )

选择合适的架构视图。

29. 先尝试后决策 ( Erik Doernenburg )

30. 掌握业务领域知识 ( Mark Richards )

31. 程序设计是一种设计 ( Einar Landre )

软件开发也分成设计和生产两个阶段。

32. 让开发人员自己做主 ( Philip Nelson )

33. 时间改变一切 ( Philip Nelson )

选择值得投入精力的工作,别跟以前的工作过不去。

34. 设立软件架构专业为时尚早 ( Barry Hawkins )

35. 控制项目规模 ( Dave Quick )

36. 架构师不是演员,是管家 ( Barry Hawkins )

别忘了你的工作责任。

37. 软件架构的道德责任 ( Michael Nygard )

架构师的决定会影响许多人,务必慎重。

38. 摩天大厦不可伸缩 ( Michael Nygard )

但软件可以。

39. 混合开发的时代已经来临 ( Edward Garson )

40. 性能至上 (Craig Russell )

41. 留意架构图里的空白区域 ( Michael Nygard )

空白区域“充满”了各种软件和“硬件”。

42. 学习软件专业的行话 ( Mark Richards )

同行之间讲行话方便交流。

43. 具体情境决定一切 ( Edward Garson )

44. 侏儒、精灵、巫师和国王 ( Evan Cofsky )

开发团队不应该同质化。

45. 向建筑师学习 ( Keith Braithwaite )

借鉴建筑行业的经验。

46. 避免重复 ( Niclas Nilsson )

47. 欢迎来到现实世界 ( Gregor Hohpe )

现实世界比软件世界复杂。

48. 仔细观察,别试图控制一切 ( Gregor Hohpe )

49. 架构师好比两面神 ( David Bartlett )

架构师应该像两面神一样,眼观六路、耳听八方。

50. 架构师应关注边界和接口  ( Einar Landre )

寻找自然的边界,分而治之。

51. 助力开发团队 ( Timothy High )

优秀团队是成功的保障,要尽量助力开发团队。

52. 记录决策理由 ( Timothy High )

记录架构决策背后的理由,具有极高的投资回报价值。

53. 挑战假设, 尤其是你自己的 ( Timothy High   )

臆断是事情搞砸的主要根源。务必要确保软件基石坚实可靠。

54. 分享知识和经验 ( Paul W. Homer )

帮助周围的人不断改善,他们也会帮助我们发挥出全部的潜力。

55. 模式病 ( Chad La Vigne )

不要让一展设计模式功力的欲望,遮蔽了务实的真知。

56. 不要滥用架构隐喻 ( David Ing )

不要耽溺于系统隐喻之中,反让它拖了后腿。

57. 关注应用程序的支持和维护 ( Mncedisi Kasper )

应用程序的支持和维护,永远都不应该是事后才考虑的事情。

58. 有舍才有得 ( Bill de hóra )

珍惜需要权衡的时机,远胜毫无约束和限制。

59. 原则、公理和类比胜于个人意见和口味( Michael Harmer )

60. 从“ 可行走骨架” 开始开发应用 ( Clint Shank )

从“ 可行走骨架” 开始,增量培育系统成长 。

61. 数据是核心( Paul W. Homer )

从“数据是核心”这个角度去认识系统,能大大降低理解复杂度 。

62. 确保简单问题有简单的解 (Chad La Vigne )

63. 架构师首先是开发人员 (Mike Brown )

碰到麻烦时,架构师可不能只会干吹烟圈却束手无策。

64. 根据投资回报率(ROI )进行决策( George Malamidis )

65. 一切软件系统都是遗留系统( Dave Anderson )

软件很快便会过时,修改维护无可避免。

66. 起码要有两个可选解决方案( Timothy High )

67. 理解变化的影响 ( Doug Crawford )

清楚认识变化类型及其影响。

68. 你不能不了解硬件( Kamal Wickramanayake )

硬件容量规划,是和软件架构同等重要的事情。

69. 现在走捷径,将来需付息( Scot Mcphee )

及时还清技术债务。

70. 不要追求“完美”,“足够好”就行( Greg Nyberg )

避免过度设计。

71. 小心“好主意” ( Greg Nyberg )

72. 内容为王 ( Zubin Wadia )

73. 对商业方,架构师要避免愤世嫉俗( Chad La Vigne )

74. 拉伸关键维度,发现设计中的不足( Stephen Jones )

75. 架构师要以自己的编程能力为依托( Mike Brown )

76. 命名要恰如其分( Sam Gardiner )

弄清楚要做的究竟是什么。

77. 稳定的问题可以获得高质量的解决方案( Sam Gardiner )

78. 天道酬勤( Brian Hart )

真正做好那些看似简单的任务,坚守承诺。

79. 对决策负责( Yi Zhou )

80. 弃聪明,求质朴( Eben Hewitt )

81. 精心选择有效技术,绝不轻易抛弃( Chad La Vigne )

82. 客户的客户才是你的客户!( Eben Hewitt )

83. 事物发展总会出人意料 ( Peter Gillard-Moss )

设计是在不断变化的世界中持续进行探索试验的过程。

84. 选择彼此间能和谐共处的框架( Eric Hawthorne )

当心“无所不能”型的框架。

85. 着重强调项目的商业价值( Yi Zhou )

86. 不仅仅只控制代码,也要控制数据( Chad La Vigne )

87. 偿还技术债务 ( Burkhardt Hufnagel )

在速度和架构间进行权衡,保持平衡。

88. 不要急于求解( Eben Hewitt )

首先看看是否可以改变问题。

89. 打造称手的系统( Keith Braithwaite )

90. 找到并留住富有激情的问题解决者( Chad La Vigne )

91. 软件并非真实的存在 ( Chad La Vigne )

虚拟世界中的软件是柔韧可变的。

92. 学习新语言 ( Burkhardt Hufnagel )

防止沟通不畅和误解 。

93. 没有永不过时的解决方案( Richard Monson-Haefel )

94. 用户接受度问题( Norman Carnovale )

减轻用户接受度问题带来的风险。

95. 清汤的重要启示 ( Eben Hewitt )

软件架构设计需要不断的精炼浓缩。

96. 对最终用户而言,界面就是系统( Vinayak Hegde )

97. 优秀软件不是构建出来的,而是培育起来的( Bill de hóra )

时间: 2024-08-02 11:37:18

想要成为一个合格的软件架构师必须知道的事情的相关文章

我想做一个合格的工程师

我想吐槽下,在新公司经过三个月的试用期,前两天终于完成了转正答辩,其实答辩就是两个我们项目组的两个项目经理(一个项目经理马上要离任了,另外一个新来的两个月,继任前者作为项目经理.),还有一个人事的同事.连一个部门经理或者稍大点的领导都没有参与我的答辩.感觉答辩的意义都没有了,但是巨坑的是,新项目经理说“有木有打算培训班学习想法”,“对数据库的应用要学习学习”,我想这不是赤裸裸讽刺我基础太差么?其实我确实来这家公司之前,没有用过MVC,这个能力也学稍弱与这个项目经理.但是我可以讲,我的其他能力绝对

怎样成为一个合格的测试工程师

一个测试工程师应该具备的素质我想在很多介绍软件测试的书里已经都列举过了,这里就不在重复,而一个合格的测试工程师和一个测试工程师的最大区别在哪儿?不外乎就在与测试思想.合格就在于他接受到测试任务后所做的第一件事情是想而不是做.合格就在于他将他自己的想法始终贯穿于整个测试中,包括测试设计中,测试执行中,测试分析中. 许多人都会说测试思想是一个空洞的东西,而我也曾经写过或说过太多的例子用以证明它,这里只建议想做合格测试工程师的人去看一本书吧,它的名字是<think in java>,在我眼里,它并不

一个合格的前端工程师必看的书籍

以我的经验,大部分技术,熟读下列四类书籍即可. 入门,用浅显的语言和方式讲述正确的道理和方法,如head first系列 全面,巨细无遗地探讨每个细节,遇到疑难问题时往往可以在这里得到理论解答,如Definitive Guide/Programming xx系列 实践,结合实际中经常遇到的情景环境,来描述如何设计和解决问题,如cookbook系列 深入,讲解一些文化,思路,甚至于哲学上的东西,真正做到深入一种语言去编程,如unix编程艺术,程序员修炼之道等等 那么,目前为止我认为最好的书是: c

刘宇凡:论一个合格的光棍

总有一个瞬间,我写文章是即时的,是冲动的,是文不对题的.此文也不例外,至于我谈些什么,还得从那一年的春天说起. 朋友笑说:"宇凡,你是一个合格的光棍."我喝着茶,在品味自然,以及这句话的乐趣. 那是一个春天,我结识了Y,他是一个很有才华的男人,文学方面很有研究,并且喜欢喝酒,他爱喝酒就和我爱喝茶一样. Y是一个深得女孩子喜欢的男人,能言善道,很健谈,和谁都能自来熟,并且够暖,所以身边总有不少女性朋友围着转.每次我们聚会的时候,他身边总跟着一个女孩子,每一次都会不一样,至于有多少,至于她

如何做一个合格的策划

今天以我自己的角度来谈一谈“如何做一个合格的策划”,一个合格的游戏策划,必须先具备以下几个基本条件:1. 对游戏炽烈的爱.2. 责任心.3. 活跃的大脑.4. 强大学习能力.5. 强大的领悟能力.6. 良好的工作习惯 一. 对游戏炽烈的爱 为什么把“对游戏炽烈的爱”列为第一条? 如果没有爱,那就没有激情!有激情才可以激发一个人的生命潜力,有激情才可以支持这个人在未来事业上走的更久,走的更远. 游戏研发是一个枯燥的过程,整天面对的是纷繁的系统设计.数值计算.玩家心理等.作为游戏策划需要时刻保持高昂

我不是一个合格的程序员

(1 )题目解释:我不是一个合格的程序员 -- 开始我想用 "如何成为一个合格/优秀的java程序员"."我不是一个合格的java的程序员 "作为题目:但是感觉分量轻了许多,不能反讽自己目前的状况,也不符合自己现在的心情. (2 )缘由:自己的拙计经历,本科时期,自己连myeclipse如何破解都不会,tomcat配置CATALINA_HOME的原因都不晓得等等:研一的时候,自己连jeclipse中的java.timestampe的jar源代码无法查看都不知道怎么回

如何做一个合格的程序员

不知不觉做软件已经做了十年,有成功的喜悦,也有失败的痛苦,但总不敢称自己是高手,因为和我心目中真正的高手们比起来,还差的太远.世界上并没有成为高手的捷径,但一些基本原则是可以遵循的. 1. 扎实的基础.数据结构.离散数学.编译原理,这些是所有计算机科学的基础,如果不掌握他们,很难写出高水平的程序.据我的观察,学计算机专业的人比学其他专业的人更能写出高质量的软件.程序人人都会写,但当你发现写到一定程度很难再提高的时候,就应该想想是不是要回过头来学学这些最基本的理论.不要一开始就去学OOP,即使你再

资深大牛分享:一个合格的Java程序员如何成长为优秀的架构师

踽踽独行上下求索总是痛苦,如果有良师益友陪伴点拨必能事半功倍.从新手码农到高级架构师,要经过几步?要多努力,才能成为为人倚重的技术专家?本文将为你带来一张程序员发展路径图,但你需要知道的是,天下没有普适的道理,具体问题还需具体分析,实践才能出真知.资深大牛分享:一个合格的Java程序员如何成长为优秀的架构师如果大家如果在自学遇到困难,想找一个java的学习环境,可以加入我们的java学习圈,点击我加入吧,会节约很多时间,减少很多在学习中遇到的难题. 我认为,架构师的内功主要包含三部分:判断力.执

目录 如何成为一个合格的段子手

如何成为一个合格的段子手(六) http://mp.weixin.qq.com/s?__biz=MzAxNzI4MTMwMw==&mid=402013430&idx=1&sn=b5ab0781684d4a4a5a71211349061f28&3rd=MzA3MDU4NTYzMw==&scene=6#rd 如何成为一个合格的段子手(五) http://mp.weixin.qq.com/s?__biz=MzAxNzI4MTMwMw==&mid=402002325