从程序员到软件架构师

Par @Martin dans le
Tags :

最近看了七牛首席构造师 – 李道兵的分享《要怎样努力, 才能修炼成一个架构师?》, 总结的很好, 看完很有收益, 更加坚定以后的方向.

个人理解, 好的软件架构师应该是经过三个阶段, 一步一个脚印走过来的: 程序员 -> 软件设计师 -> 软件架构师.
私认为, 这个过程不应该产生”跳级”, 软件架构师应该具有相当厉害的编码能力, 具有小尺度问题的设计能力, 而那些只会设计”概念”、纸上谈兵式的架构师, 并不能服众 (至少不能服我), 不要也罢.

本篇 Blog 记于 2017-08-27, 此时此刻, 我正在软件设计师到软件架构师的道路上摸滚打爬…甚至可以说连门都还没摸着~~但没关系, 路漫漫其修远兮, 吾将上下而求索嘛.

  1. 程序员 (2011 ~ 2015): 学工具、学应用, 这个阶段我大概阅读了以下书籍《C 语言程序设计》、《C++ Primer Plus》、《Win32 汇编程序设计》、《Windows 程序设计》、《Windows 核心编程》、《代码大全 2》等, 基本就是一个初阶码农的阶段~~ (因为是野生程序猿, 所以在第一阶段待了太长的时间, 走了很多弯路, 吃了很多苦~)
  2. 软件设计师 (2015 ~ 2017): 学思想、学模式、学设计, 例如《GoF 设计模式》、《敏捷软件开发: 原则、模式与实践》、《UML 和模式应用》、《修改代码的艺术》, 该阶段下, 除了码农的职责外, 还兼职着软件分析/设计的职责, 也就是会贯穿软件开发生命周期中的需求分析 -> 概要设计 -> 详细设计 -> 代码实现等四个阶段. 架构设计中的小尺度问题的解决方案应该是来自本阶段的学习.
  3. 软件架构师 (2017 ~ 未来): 这个阶段我还没入门, 所以能总结的并不多, 但感觉该阶段的职责应该是在能熟练解决小尺度问题的基础上, 可以站在更高, 更抽象的角度去解决大尺度问题; 《企业应用架构模式》、《领域驱动设计》、《微服务设计》等都是不错的学习资源, 另外, 需要从很多同行那里吸收经验, QConArchSummit 以及七牛架构师实践日这些线下分享会都是不错的途径.

书单参考: 传送门

以下是我对软件架构师职能的理解, 或者说是对我自己的目标:

首先, 作为软件架构师, 每一次分析、每一次设计、每一个技术选型都可能是在给开发、测试挖坑, 而软件架构师要确保团队能够在软件架构师的帮助下从坑里再爬出来, 所以软件架构师还应该具有相当厉害的编码能力 (自己都不会怎么帮助别人?).

其次, 软件架构师架构师应该同时具备大尺度 (子系统间) 和 小尺度 (模块间) 的抽象能力, 将对系统的理解转换为系统实现的模型, 用于指导系统各个方面的设计. 除了保证系统的功能性需求外, 还需要洞察系统的非功能性需求 (性能、可用性、伸缩性、扩展性、安全性), 识别架构风险和确定技术选型.

另外, 好的软件架构师需要有一定的前瞻性, 能大概预判系统未来的发展趋势, 引入技术风险解决未来问题, 避免系统短时间内发生重构.

最后, 软件架构师还需要关注产品的业务规则和业务特点, 如果忽略了这些, 架构也不过是无法落地的空设想.