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

2014-06-27  来源:本站原创  分类:编程  人气:7 

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

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

软件架构师是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

相关文章
  • 软件架构师应该知道的97件事 2014-06-27

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

  • 转-软件架构师应该知道的97件事 2011-08-08

    http://www.360doc.com/content/11/0508/18/5256932_115277457.shtml 架构师的行为准则(一) 最近看了一本书<软件架构师应该知道的97件事>,本来并没对它抱有太多期望和兴趣,毕竟这种讲大道理的书不可能带来什么实际收获,但看的过程中被里面中肯实在的建议给吸引,对于我这种在走向架构师这条路上常常迷失方向的人,实在是雪中送炭.读完后,决定选择其中对我有触动的条目,加上实际工作中的感悟,形成一套自认为正确的架构师行为准则,以此来矫正自己的行为

  • 程序员需要知道的97件事 2015-02-21

    继架构师需要知道的97件事之后,该系列来到了本期:程序员需要知道的97件事.这些内容都是通过wiki搜集的,我们欢迎大家群策群力,请说出你的想法. 在本文撰写之际,该wiki上已经有88个条目了,现摘取一些条目列举如下: Peter Sommerlad:只有代码才能做到实事求是 Uncle Bob:速度是万恶之源 Michael Feathers:API设计的黄金法则 Heinz Kabutz:掌控所用的IDE Gerard Meszaros:针对人编写测试 InfoQ有幸采访到了程序员需要知道

  • 程序员需要知道的97件事,你知道几件? 2014-02-10

    有一次Kevlin Henney在检查代码中的疏漏,发现自己不知不觉地在嘀咕"该死的,这是每个程序员都需要知道的事情!"(当然了,一开始的感觉是非常强烈的),这就是Kevlin Henney发起"每个程序员都需要知道"的活动的灵感."程序员需要知道的97件事"是由众人群策群力并发布到wiki上,大家可以对其进行编辑,然后从中选取97个条目做出图书出版. 这97条每条都是对作为软件开发程序员的必修知识,就算你不是非常了解这97条里每条包含的具体知识

  • 做一个优秀程序员应该知道的15件事 2013-11-30

    这篇文章主要介绍了做一个优秀程序员应该知道的15件事,写的很好,需要的朋友可以参考下 1. 懂得分享.尽可能使用开源,并且当你有能力的时候,要对其有所贡献.聚全社会之智慧,胜过某些"大"公司之短视. 2. 公平竞争.尝试其他技术.框架.方法和观点.不要总以为只有你的选择才是可行的.别的选择也有可能比你的要强得多.要以开放的心态,来检验其他人的选择. 3. 不要攻击他人.像第2条所说的,不要仅仅因为别人恰巧使用.Net.Java或PHP就去攻击他们(我在这方面有一次教训).有时,它们或许

  • 分享下网站开发人员应该知道的61件事 2014-11-13

    有人在Stack Overflow上发问,动手开发网站之前,需要知道哪些事情,这里简单为大家整理下,方便需要的朋友 不出意料地,他得到了一大堆回答. 通常情况下,你需要把所有人的发言从头到尾读一遍.但是,Stack Overflow有一个很贴心的设计,它允许在问题下方开设一个wiki区,让所有人共同编辑一个最佳答案.于是,就有了下面这篇文章,一共总结出六个方面共计61条"网站开发须知". 我发现,这种概述性的问题,最适合这种集合群智.头脑风暴式的回答方式了.这也是我第一次觉得,Stac

  • 大规模运行MongoDB应该知道的10件事 2014-06-30

    MongoDB的首席解决方案架构师Asya Kamsky最近发表了一篇文章,概括了大规模运行MongoDB需要知道的10件事. MongoDB也需要DevOps.MongoDB是一个数据库.和任何其他的数据存储一样,它也需要容量计划.调整.监控和维护.不要因为它很容易安装.入门,同时与关系型数据库相比能够更加自然地满足开发人员的范例就认为MongoDB不需要适当的照顾和喂养.开发时它能在小样本数据集上超快地运行并不意味着你就不需要良好的模式.索引策略以及产品环境所需要的正确的硬件资源了.但是如果

  • Flash开发者需要知道的10件事 2014-10-12

    此前,我们发布的新闻谈到了每个Flex开发者需要知道的10件事,本文将继续这个主题,谈谈每个Flash开发者需要知道的10件事. 近日John Lindquist谈到了在为Roundarch公司招聘Flash/Flex开发人员时的一些感受.他认为最难的地方在于问什么问题才能最好地了解到应聘者的Flash/Flex开发技能.因此,他给出了一个列表并说到:"根据我的经验,通过这个列表能更好地判断面试者的技术水平和经验". 本文就将概要地介绍Flash开发者需要知道的10件事并给出进一步阅读

  • Flex开发者需要知道的10件事 2015-02-11

    不久前,Michael Portuesi发表了一篇博文,谈到了Flex开发者需要知道的10件事.文章介绍了每个进入Flex领域的开发者都需要掌握的基本知识与技能. Michael Portuesi给出的10个条目中,有些是开发者需要了解的简单细节信息:有些则揭示了Flash/ActionScript/Flex与其他开发环境之间的差别. 如果你了解HTML/CSS并熟悉JavaScript,但却对ActionScript或Flex一无所知的话,那么应该花些时间学习一下面向对象编程,因为Action

  • 程序员最应该知道的20件事 2015-03-22

    我最近看了一本叫做<the 97 Things a Programmer Should Know>的书.书是一本好书.不过,下面我将我认为最值得我们了解的20件事情列举给大家: 1.应用函数式编程原则 引用透明性是一个非常可取的特性.这意味着,不论何时调用它,对于同一组参数它永远给出同样的结果,这使它跟那些与其他系统相互交织的东西比起来更易于使用. 2.从用户的角度看问题 你不是用户.不要把你的想法强加到用户头上,每个人的想法都不尽相同.花一个小时去观察用户的行为比你花上一天的时间去猜测他们想

  • 从iphone转到Android:你需要知道的10件事 2014-11-24

    你换机了,或许是因为 AT&T ,或许是因为霸道的 Apple 的程序商店.不管是什么原因,你奔向 Android 了:这片自由之地,运营商不叫 AT&T ,背后站着伟大的 Google .以下是你需要了解的. 一切都在 Google 麾下 Android 手机不和你的电脑同步,因为它们不需要:你的联系人,日程表和邮件都保存在伟大的 Google 体系里.遗憾的是,虽然 Google 联系人管理在逐渐改善优化,但仍不尽如人意. 如果你用的是苹果系统,联系人保持同步可就容易多了--只需要设置

  • 程序员应知道的12件事 2014-04-03

    导读:在当今竞争日益激烈的环境下,程序员们的工作环境与工作状态并不理想.作者Robert Diana就此话题写了一篇文章<12 Things A Programmer Really Needs To Know>,他分享了自己做程序员的12个经验心得,更好的帮助程序员认清自身环境,并更加有效的提升自身价值和解决项目开发过程中的难题.现CSDN对原文进行编译,内容如下: "怎样才能成为一名优秀的程序员呢?"我曾为此写过一篇博文,文中强调了优秀程序员应该关注的开发语言及要了解的算

  • 英语四六级考场上该知道的8件事 2014-12-10

    考中提示: 1.开考前去一次洗手间,不要再喝过多的水. 2.进入考场,醒自己作到"四心" 一是保持"静心",二是增强"信心",三是做题"专心",四是考试"细心".如果自己还是觉得很紧张,捏紧你的拳头,再放松,找到那种感觉. 3.发答题卡,仔细填好个人资料,姓名.准考证号.A卷或B卷这三点要反复核查是否填写正确. 4.考试中涂卡,仔细看好题号,边做题边涂卡,做完一部分,再核对一下题号是否正确,如果不对,也只需

  • 考研前一定要知道的18件事 2015-03-16

    1. 想明白你为什么要考研 这个是个首要的问题,答案主要分为:为了知识,为了爱情,为了文凭.第一种人最少,但最伟大,现在已经很少有人去追求自己喜欢的知识,研究自己喜欢的东西了.第二种也很多,多半是分居两地的情侣,爱情的力量往往很巨大.第三种最普遍,主要是为了拿那个文凭好就业,在如今就业困难的大环境下,这也无可厚非.但你必须知道自己的出发点,这样才可以给自己不断补充动力. 2. 准确定位考研读什么专业 近多半的学生是选择了自己本科学的专业,但现在一大趋势就是跨专业考试,多是理科考文科的.这样难度较

  • Windows 7现在该知道的10件事 2015-03-23

    1 许可协议 图(1) 随着Vista的失败,Windows 7将以六大版本发布.Windows 7将重新采用软件保障计划(Software Assurance).拥有微软软件保障的企业用户,在Windows 7发布时就可以自动获得部署Windows 7企业版.批量激活的最低限度时5台电脑,Windows 7 旗舰版的目标为零售终端客户,批量激活方法不适用于 Windows 7 旗舰版. 2 程序兼容性 图(2) Windows 7即将发布,微软势必要解决类似于Vista的程序兼容性问题.Win

  • 关于 Win 8 RT 你应该知道的 15 件事 2012-08-23

    这次的Win 8直接来了一个Win 8 RT, Win 8 Pro兄弟版.很多用户只知道Win 8 RT为 ARM 硬体而设,比 Win 8 Pro价格便宜,比 Win 8 Pro 薄一些,但并不明白两者的本质区别.而下面我们将用15个问题来让你了解什么是Win 8 RT. 1. Win 8 RT 代表什么? Win NT代表"Win New Technology",但是微软从来没有官方解释过Win 8 RT代表什么. 2. 什么时候可以得到Win 8 RT? Win 8 RT 硬件在

  • 开发第一个Android应用前你必须知道的5件事 2014-03-08

    我最近刚刚阅读了Praneeth VT发表在Reddit上的一个帖子,是关于他如何开发自己第一款Android手机应用--一个GPA计算器的.可以看出来他在这个编程世界还是新手,所以我想深入探讨一下他是如何做到的,以便于大家学习和借鉴. 在此之前,我想先介绍一下Praneeth VT. 毕业于计算机工程专业 实际上,他才总共学了为期6个月的编程课 在上了两门CS课程导论之后,他又学了Java语言 暑假期间,他决定学以致用,自己开发一个Android应用 我和Praneeth VT进行了一次关于如

  • XP升级Windows 7必知的5件事 2014-02-02

    据国外媒体报道,过去的近3年时间中,由于Vista的性能拙劣导致全球近3/4的用户固守老旧的Windows XP操作系统.近日,微软终于发布了用户期待已久的Windows 7,而这也标志着众多的XP用户从此可以体验到新鲜的操作系统. 用户在执行操作系统升级或切换的过程中往往会遇到一些问题,XP至Windows 7的升级当然也不例外.而为了使得用户的升级过程变得更加简易,微软发布了一系列的解决方案工具,以下是用户从Windows XP至Windows 7升级过程中必知的5件事: #1.不可以执行"

  • 有理想的程序员必须知道的15件事 2013-11-27

    作为程序员,要取得非凡成就需要记住的15件事. 1.走一条不一样的路 在有利于自己的市场中竞争,如果你满足于"泯然众人矣",那恐怕就得跟那些低工资国家的程序员们同场竞技了. 2.了解自己的公司 以我在医院.咨询公司.物流企业以及大技术公司工作的经验来看,这一点所言不虚. 不同公司的运营模式差异极大.如果你理解企业的运营模式,那你就不一样了!在这家公司中(或者对客户而言),你是参与业务运营的资产,你的工作能直接产生效益! 3.与最优秀的人为伍 很早以前,我喜欢打篮球,被分配到一个水平比较

  • 每一位想有所成就的程序员都必须知道的15件事 2015-03-21

    我刚看完Chad Fowler的Passionate Programmer(中文版<我编程,我快乐:程序员职业规划之道>),这本书讲的是如何在软件开发行业中取得非凡的成就. 以下是根据这本书总结的,作为程序员,要取得非凡成就需要记住的15件事. 1.走一条不一样的路 在有利于自己的市场中竞争,如果你满足于"泯然众人矣",那恐怕就得跟那些低工资国家的程序员们同场竞技了. 2.了解自己的公司 以我在医院.咨询公司.物流企业以及大技术公司工作的经验来看,这一点所言不虚. 不同公司