软件编程似乎是一件没有门槛的工作,任何接受过义务教育的人经过一些基本的编程培训就能够写一些可以执行的代码。但是,想要设计一个架构良好、易于维护、富有弹性的系统,却是一件非常困难的事。就我所见,很多项目团队压根没有“系统架构设计”这样一个软件开发阶段,也没有一个对整个系统技术架构掌控的人,项目管理者往往只是关注内外部的各种沟通,和人员、进度的管理,任由系统架构在日趋一日的开发过程中逐渐腐烂。

我怀疑很多软件工程师从来没有体会过良好架构设计带来的好处:系统模块、层次边界清晰,团队每个人的工作都很少耦合;需求变更不需要在一大堆代码中改来改去,只要扩展几个类就轻松实现;用户量快速增加时,只需要变更部署方案就可以应对,甚至不需要改动代码。而得到最大好处的则是老板,他不必因为急剧膨胀的技术人员招聘预算而愁眉不展,也不必在公司年会上宣布996加班而被整个业界的唾沫星淹死。

一个优秀的软件架构师应该能够设计一个良好架构的系统,并在它漫长的生命周期中保持架构持续演进、清晰合理。一个优秀的软件架构师应该能够写漂亮的技术PPT,也能写漂亮的代码,让自己开发的核心代码支撑起系统的核心架构,又让自己的架构方案得到大多数人的拥护。一个优秀的软件架构师应该有宏观的技术视角,能够用更广阔的愿景去诠释当前项目的技术、架构和未来的演化趋势。一个优秀的软件架构师应该拥有某种技术影响力和领导力,无需职位上的权力就可以让其他工程师听信于他。一个优秀的软件架构师还应该掌握一些特别的管理、谈判技能,让自己的技术构想被其他工程师、项目经理、老板和用户接纳。

如何才能拥有这些能力,成为一个技术团队中值得信赖的优秀软件架构师?这就是我的专栏想要为你呈现的答案。但是受专栏篇幅,以及个人的能力、精力所限,我只能尽力将相关的内容进行有组织、自洽地呈现,为你展现出这些内容的核心思想以及其内在的关联性。而要想真正将这些内容融会贯通,内化为自己的知识和技能,还需要你在工作中更多地思考和实践。

电影《百万美元宝贝》中说:“拳击是一种不自然的运动。因为拳击中的每样东西都和本能是相反的。你想向左移动,不是向左迈步,而是右脚用力。向右移动的时候左脚用力。想打出一记重拳,你需要后退一步。面对打击,你要迎着疼痛而上,而不是像有理智的人那样躲避。”

我们在职业技能进阶的道路上也是如此,你如果依着本能,跟着潮流,除非你极有天分,否则很难超越自己和环境。架构师的成长之路是一条攀登之路,你需要有意识地训练自己,不断挑战自己。架构师的成长之路是一条修行之路,你要和自己的本能做对,不断审视自己,让自己从舒适区跳出来,针对自己的不足和缺陷为自己设计有困难的任务和目标。

这条路注定艰辛,但是走在这样的人生之路上,你会充分体验到超越自我的愉悦,理解到生而为人的自由意志,也许这也是人生的某种意义吧。

对我而言,这是我在极客时间开设的第二个专栏,第一个专栏是《从0开始学大数据》。在这两个专栏的筹备、更新过程中,留言、互动让我受益良多,感谢一路以来的支持与陪伴。

最后,这里有一份毕业问卷,题目不多,希望你能花两分钟填一下。十分期待能听到你说一说,你对这个课程的想法和建议。