最近刚到的一本书Fundamentals of Software Architecture,中译《软件架构基础》(东南大学出版社)。在豆瓣上被称为和DDIA(Designing Data-Intensive Applications)等同级别的书籍,作为修炼内功的经典书目。
初读之下,逻辑流畅、论述充分,非常好读。被追捧为经典的技术书籍一般会对每个概念都介绍的很清楚,即便碰到陌生的概念总有一张恰到好处的图,并配有详细解释文字出现。只要能耐下心子读,一定能读懂(有内味儿了)。
关于作者
作者是Mark Richard和Neal Ford,资料不是很多。Mark Ricards据介绍在应用开发、集成、企业级架构有35年的经历,Neal Ford是IT咨询师在Thoughtworks教软件架构的的课程。
Mark Richards有开办专门引导程序开发人员向架构师转变的网站。里面有很多书籍和课程的可以作为软件架构师的材料参考。
软件架构(Software Architecture)
作为一个本科和研究生均为软件工程专业的毕业生,初学软件架构非常吃力,光是里面的概念、术语就很难理解。什么是SOA?《Software Architecture in Practice 》里为什么要介绍性能、可扩展性、可测试性等各类属性?
除了概念、术语外,最为重要的还是思维的转换,学生时代的思维总是努力去寻找一个标准答案,比如什么软件就是什么架构,如果出现架构上的变化就会很困惑,甚至是非常抵触的情绪。非常赞同作者关于软件架构的第一定律:
There are not right or wrong answers in architecture - only trade-offs.
做工程的往往没有理想当中完美的环境,很多时候都是各类因素的权衡,软件架构师是一个需要根据实际情况得出决策的角色。
回想起来可能在学生阶段初学软件架构需要具备:
1、良好的计算机知识,网络、操作系统、数据库等等,比如不理解数据库中事务的概念就很难将其推广到分布式系统事务中,从而很难理解分布式系统实现中引入的一些设计。
2、学习软件工程,了解软件工程过程和各个方面,软件架构往往会在软件过程中不断演进(evlove)。
3、掌握软件设计的基础,比如面向对象编程OOP、UML图、设计模式,这些都是和其他人员沟通架构设计的工具。
4、大量的软件实现分析,当然这种理解实现分析不是深入到模块的具体实现,而是了解软件包含哪些部分,相互之间是通过什么方式交互的。学生阶段和初级开发者更聚焦的是具体业务功能、算法的实现,往往忽视了模块、组件、系统层次的实现。
进入工作阶段,结合实践再回到知识体系才对软件架构有一定的理解。目前切身感受到软件架构相关的工作需要经验的积累、接触过不同类型的产品、项目和系统,基础的理论知识往往是不够的。正如书中所述:
Practice is the proven way to build skills and become better at anything in life... including architecture.
当然书里面的第三部分会介绍更多,这里就不再赘述了。
书的概要
粗略翻了下主要介绍了3块内容,上脑图:
目前只阅读了几节内容,后续会深入到前两块的细节中。现摘一些关于如何成为软件架构师的建议(Techniques and Soft Skills),以飨读者。
如何成为软件架构师?
书的第三部分是对想要从事软件架构师方向职业发展的一些建议。成为软件架构师需要在整个职业生涯持续学习,软件架构师广度比相应的深度更为重要。
Technology breadth is more important to architects than depth.
1、20分钟规则
利用每天20分钟的时间去学习、了解层出不穷的新的技术和业界潮流,浏览相关网站、视频、胶片等等。
建议最好作为早上的第一件事开始做,并持这一习惯。因为中午会影响休息,而晚上需要陪伴家人(老外确实不努力,我们996的坚决反对!)。
软件架构师需要在这个过程中不断收集业界资讯、积累各类素材、深入研究某一方面的内容。
The point of this technique is to be able to carve out some time for developing a career as an architect and continuously gaining technical breath.
2、技能雷达
软件架构师需要向金融行业管理投资组合一样管理自身的技能组合。
Architects should treat their technolgy portfolio like a financial portfolio: in many ways, they are the same thing.
技能雷达源自Thoughworks,是从圆中心向四周发散的图形可视化工具。由内而外,依次是
- 使用(Adopt)已经掌握可以用来解决具体的问题。
- 尝试(Trial)可以现在就尝试的、可以继续深化研究的技术。
- 评估(Assess)相当有前景的领域,后续可以尝试研究。
- 暂缓(Hold)暂时不需要投入精力研究的,优先级最低。
具体雷达可以参考ThoughtWorks的技术雷达网页。
图形分为四个象限。每个象限具体代表软件架构师需要掌握的一种能力:
- 工具(Tools)软件开发正在使用的各类工具,比如IDE、比如部署工具、BUG管理工具、比如DevOps的各类套件。
- 语言和框架(Languages and frameworks)软件开发使用的语言、相关的工具库、框架等等。
- 技巧(Techniques)如何让工程更为高效的工程实践,如流程、具体活动、建议等。
- 平台(Platforms)比如数据库平台、各类云平台、操作系统平台、硬件平台。
软件架构师需要构建自己的技术雷达、不断地更新,扩展自己的技术体系。
3、利用社交媒体
软件架构师通过社交媒体扩大自身信息的收集范围,紧跟行业发展的潮流。
写在最后
正如本书的名字含了fundamentals,的确是一本教授软件架构基础的书,本书为想成为软件架构师的读者提供了很好的知识体系框架和建议。但是,成为软件架构师需要持续在架构方面的投入和实践。这本书是否经典,也同样需要通过时间和实践的证明。最后引用书末给想成为软件架构师的人一句话:
always learn, always practice,and go some architecture!
PS:书从淘宝东南大学出版社买的,包装裹了3层。书的质量很不错(我的DDIA不小心封皮都翻掉了),打开之后印刷质量相当好。