您当前的位置:首页 > 电脑百科 > 程序开发 > 程序员

怎样成长为优秀的软件架构师?

时间:2022-12-19 14:25:33  来源:网易号  作者:洁仔学编程
分享七牛云CEO「许式伟」对于这个话题的思考。

 

你好,我是许式伟。从今天起,我想和你一起来聊聊架构的话题。

开始之前,我先来和你简单介绍下我自己。

我是2000年开始工作的,曾经做过wps的首席架构师,也在盛大从事过技术研究方面的工作,后来在2011年创立了七牛云,现在我是一名创业者、CEO。但不管角色怎么轮换,我觉得我的另一面始终是一名程序员、架构师。

让我们来想象一下,如果把信息世界看成一座大厦,把程序员看成这个世界的建筑师,那么,现在的你在负责什么样的工作呢?

当我们把程序员类比成建筑师时,按照能力水平来分,我觉得大体可以分为三个层次:搬砖师、工程师、架构师。

软件搬砖师之名对应到建筑行业的建筑工人,他们的编程能力和业务基本上停留在堆叠代码,按照要求去实现功能需求的层面。

只要能让程序跑起来,能正确地实现业务逻辑,就可以称为“会编程”的人。有时候,我们也会看见程序员自称为“码农”“搬砖的”,虽然二者的工种不同,但从基础工作的相似度来说,确实有可类比的成分。

很多外行的人都会觉得程序员是一个很神秘的职业,但实际上程序员的基础门槛并不算高。我自己从2016年2月开始至今,一直在教几位8~12岁的小朋友学习编程。这个实践经验告诉我:小学生完全有能力学编程。而且,并不是只有部分小学生可以,而是任何一位小学生都可以学会。

然而,只让代码跑起来是不够的。这个世界是不断变化的,作为程序员,我们更多的时间是用来维护代码:增加新的需求,对已有的功能进行调整,修改之前代码遗留下来的问题,优化性能等等。

这是因为一个软件诞生之后,后续就是需要花费大量的代价去维护它,演进它。一个人是完全维护不过来的,需要更多的人,很多的团队一起协作。如果面临了员工离职、岗位调整等情况,还会导致软件代码在不同人之间流转。

所以,一些有追求的程序员会关注代码的质量。代码质量的评判可以有这样一些基本维度:可阅读性(方便代码流转)、可扩展性/可维护性(方便修改功能,添加新功能)、可测试性(质量管理)、可复用性(简化后续功能开发的难度)。

这一类致力于不断提升软件代码的工程质量的程序员,我们可以称他们为软件工程师。

工程师不会简单把写代码看作一门工作,把任务交代过去就完事。他们会有“洁癖”,代码在他们眼里是一种艺术,是自己生命的一部分。

他们会把写出来的代码改了又改,直到让自己满意为止。阅读和维护软件工程师写的代码会有一种赏心悦目的感觉。

但是,大部分商业软件都是一项极其复杂的工程,它们远比很多传统的建筑工程复杂得多,无论是涉及的人力、时间还是业务的变数都要多很多。

人力上,大部分大型的软件系统都有几千甚至几万人的规模,而这几千几万人中,却没有两个人的工作是重复的,他们都是在从事着前所未有的创造性工作。

时间上,只要软件还在服务客户中,程序员们的创造过程便不会停止,软件系统仍然持续迭代更新,以便形成更好的市场竞争力。

这些都与传统建筑工程的模式大相径庭。一幢建筑自它完成之后,所有的变化便主要集中在一些软装的细节上,很少会再发生剧烈的变动,更不会持续地发生变动。但软件却不是这样,它从诞生之初到其生命周期结束,自始至终都在迭代变化,从未停止。

所以,光靠把控软件工程师的水平,依赖他们自觉保障的工程质量,是远远不够的。软件工程是一项非常复杂的系统工程,它需要依赖一个能够掌控整个工程全局的团队,来规划和引导整个系统的演变过程。这个团队就是架构师团队。

软件架构师的职责,并不单单是我们通常理解的,对软件系统进行边界划分和模块规格的定义。

从根本目标来说,软件架构师要对软件工程的执行结果负责,这包括:按时按质进行软件的迭代和发布、敏捷地响应需求变更、防范软件质量风险(避免发生软件质量事故)、降低迭代维护成本。

那怎么才能成长为优秀的软件架构师?软件架构师和软件工程师最根本的差别又在哪里?我认为关键在于四个字:掌控全局。

掌控全局,就是对系统的全貌了然于胸。从传统的建筑工程来说,建筑架构师并不单单要会画建筑图纸,而是要对地基构建、土质、材料、建筑工艺等等所有有可能影响建筑质量的因素都要了然于胸。

掌控全局,并不是无所不能,不是成为全栈。怎么做到掌控全局?核心在于对知识脉络的体系化梳理。这是架构能力构建和全面提升的关键。这种方法不单单是在软件工程中适用。

比如学数学,我个人非常喜欢做的一件事情是自己去推导书上所有的公式。每一个公式我都亲自推导而来。

这样做的核心意义在于,我在尝试从0开始,去构建整个精彩纷呈的数学世界,整个数学发展史在自己的笔下重新演绎了一遍,来龙去脉清清楚楚。有时候你甚至会推导出还没有学到的公式,但是在后面学到了。这种体验非常有趣而又让人满足。

是的,掌控全局的前提是:在自己心中去重新构建出整个世界。在这个过程中,你不需要一上来沉浸在某个技术的实现细节(除非它影响了你对这个世界构建过程的理解),但是你知道整个世界的脉络,知道整个世界的骨架。

这个时候,你对这个世界的感觉是完全不同的,因为,你已经成为了这个世界的构建者。

而架构的本质,不也正是构建和创造么?

作为一个软件行业的从业人员,我们可能接触各种各样的技术书籍。有讲编程语言的、讲数据结构与算法的、讲操作系统的、讲编译原理的、讲架构设计的,还有领域技术类的(比如数据库、存储、大数据、人工智能之类)。

大部分类别的技术书,多多少少都能够找到几本经典著作。但是,架构设计很可能是个例外,当我想推荐一本经典的架构设计书时,我并不能非常快速地想到应该推荐哪本。

从个人经验来说,我接触过的与架构相关的图书,大概有如下这些分类。

 

  1. 架构思维类。这类图书通常从一些著名的架构理论讲起,比如开闭原则、单一职责原则、依赖倒置原则、接口分离原则,等等。这种图书的问题在于过度理论化。计算机科学归根到底属于工程技术类,实践第一。
  2. 设计模式类。这一类图书则一下子进入架构的局部细节,每个模式的来龙去脉并不容易理解。就算理解了某个具体的模式,但是也很难真正做到活学活用,不知道还是不知道。
  3. 分布式系统架构设计类。这类图书通常从服务端的通用问题如一致性、高可用、高并发挑战等话题讲起,讲大型业务系统面临的挑战。这些知识是非常有价值的,但无法延伸到通用业务架构,对大部分企业的架构实践并不具备真正的指导意义。
  4. 重构类。这类图书主要讲怎么把坏代码一步步改进到好代码。我认为这是最实用的一类。但在没有优秀架构师主导的情况下,大部分公司的代码不可避免地越变越坏,直到不堪重负最后不得不重写。实际上,一个模块最初的地基是最重要的,基本决定了这座大厦能够撑多久,而重构更多侧重于大厦建成之后,在服务于人的前提下怎么去修修补补,延长生命。

 

这些架构类的图书并没有达到我个人的期望。因为它们都没有揭开架构设计的全貌。

我自己在职业生涯中前后大概做过十几次的架构类演讲,这也是我最为重视、重复次数最多的一类演讲。但同样地,这样零星的演讲对于传递架构设计思想来说,仍然远远不够。

所以一直以来,我就心存着这样一个念头:“要写一本不一样的架构类图书”。这个念想,也正是今天这个专栏的由来。

这个专栏的内容组织算是我的一次尝试。它和今天你看得到的大部分架构书并不太一样。我基本上围绕着两个脉络主线来展开内容:

 

  1. 如何从零开始一步步构建出整个信息世界;
  2. 在整个信息世界的构建过程中,都用了哪些重要的架构思维范式,以及这些范式如何去运用于你平常的工程实践中。

 

这两大脉络相辅相成。首先,我们通过还原信息世界的构建过程,剥离出了整个信息世界的核心骨架,这也是最真实、最宏大的架构实践案例。其次,我们结合这个宏大的架构实践来谈架构思维,避免因对架构思维的阐述过于理论化而让人难以理解。

我想,每个程序员都有一颗成为架构师的心。所以,从内容设计来说,我希望这是一个门槛最低的架构设计专栏,也希望它可以帮助到想成为架构师的初学者,达成自己的目标。

在行文上,我会尽量避免深奥的术语,尽可能以通俗易懂的文字,来描述信息世界构建者们的所思所想。如果你在阅读的过程中遇到了理解上的障碍,非常欢迎你来给我留言,我将尽可能地根据你的反馈,做出必要的调整。

如果你已经成为了架构师,我也希望可以为你规避一些错误的经验。在过去的工作经历里,我看到不少架构师都会倾向于把架构看作一项纯技术性的行为。他们的工作流程是这样的:产品经理根据用户的需求做出产品设计,然后架构师再依据产品设计给出实现,也就是软件的架构设计方案。

在我看来,这其实是个误解。架构关乎的是整个复杂的软件工程,它关乎实现它的人,它又因团队的能力而异。

同时,架构也关乎用户需求,作为架构师,我们不只是要知道当前的用户需求是什么,我们还要预测需求未来可能的变化,预判什么会发生,而什么一定不会发生。预测什么不会发生最为重要,只有做到这一点,才能真正防止架构的过度设计,把简单的事情复杂化。

谈了这么多,那么,应该怎样成长为优秀的软件架构师?我想,一靠匠心,二靠悟心。架构设计并无标准答案,但我仍然希望把我这些年的所思所想分享给你,更希望这些内容能给你一些启发。



Tags:架构师   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
分享七牛云CEO「许式伟」对于这个话题的思考。 你好,我是许式伟。从今天起,我想和你一起来聊聊架构的话题。开始之前,我先来和你简单介绍下我自己。我是2000年开始工作的,曾经做...【详细内容】
2022-12-19  Tags: 架构师  点击:(0)  评论:(0)  加入收藏
前端架构需要解决的问题前端网页就是这么简单,除去图片、视频等资源外只有三部分,即标记网页元素的HTML、设置元素样式的CSS和负责交互处理的JavaScript。在软件开发上,普遍认...【详细内容】
2022-10-24  Tags: 架构师  点击:(23)  评论:(0)  加入收藏
前导近期有个同事跟我说遇到一件很奇怪的事情,时不时收到售后反馈说 部分用户无法接收到聊天室(WebSocket 服务)消息,然而在测试服以各种方式测试都无法复现这种现象。于是陷...【详细内容】
2022-10-21  Tags: 架构师  点击:(64)  评论:(0)  加入收藏
一转眼从学校毕业已经超过10年了,从一名普通的程序员成长为500强企业的架构师,如今也开始做IT管理工作,可以算是一个过来人。前两天公司一位初入职场的同事希望我给一些建议与...【详细内容】
2022-09-15  Tags: 架构师  点击:(53)  评论:(0)  加入收藏
今天带大家认识下DDD,一个听起来很垃圾却真的很牛X的设计思想,架构师必备!前言在日常工作中,接手或维护的工程,大多数使用的是三层架构,即controller、service、dao三层,在使用的过...【详细内容】
2022-08-29  Tags: 架构师  点击:(114)  评论:(0)  加入收藏
架构师可以说是许多IT程序员的终极职业目标,这一岗位在技术团队中的发挥着总指挥和总架构的重要作用。因此,能力越大责任越大。一名合格的架构师需要具备多项基本能力。本文为...【详细内容】
2022-08-24  Tags: 架构师  点击:(74)  评论:(0)  加入收藏
曾经因为一个糟糕的API而感到沮丧吗?在这个微服务的世界里,后端API的一致性设计是必不可少的。今天,我们将讨论一些可遵循的最佳实践。我们将保持简短和甜蜜——所以...【详细内容】
2022-08-10  Tags: 架构师  点击:(60)  评论:(0)  加入收藏
从程序员到架构师,技术成长之路分为哪几个阶段?架构师是如何持续学习,提升认知的?切换技术赛道后,如何才能快速适应新方向?...【详细内容】
2022-08-05  Tags: 架构师  点击:(64)  评论:(0)  加入收藏
RxJava在Android开发中已经算是无人不知无人不晓了,加之它与Retrofit等流行框架的完美结合,已经成为Android项目开发的必备利器。随手记作为一个大型项目,引入三方框架一直比较...【详细内容】
2022-07-26  Tags: 架构师  点击:(84)  评论:(0)  加入收藏
组件化定义组件化是建立在模块化思想上的一次演进,一个变种。组件化本来就是模块化的概念。核心是模块角色的可转化换性,在打包时,是library;调试时,是application。组件化的单位...【详细内容】
2022-07-05  Tags: 架构师  点击:(109)  评论:(0)  加入收藏
▌简易百科推荐
寒冬、裁员、降薪、996、秃头、最近几年这些词汇不断在各位码农的周围盘旋。很多程序员对自己目前的状态干到困惑和焦虑,而且这好像是国内外程序们都会遇到的问题。最近,在Red...【详细内容】
2022-12-23   职场不靠谱攻略   网易号  Tags:程序员   点击:(0)  评论:(0)  加入收藏
分享七牛云CEO「许式伟」对于这个话题的思考。 你好,我是许式伟。从今天起,我想和你一起来聊聊架构的话题。开始之前,我先来和你简单介绍下我自己。我是2000年开始工作的,曾经做...【详细内容】
2022-12-19  洁仔学编程   网易号  Tags:架构师   点击:(0)  评论:(0)  加入收藏
人工智能(AI)在围棋、星际争霸等策略性游戏方面已经碾压人类选手,在绘画、蛋白质结构研究乃至数学问题求解方面也展现了惊人的应用前景。现在,两大人工智能系统Open AI 和Deep...【详细内容】
2022-11-28  自然科学一周趣闻  今日头条  Tags:程序员   点击:(13)  评论:(0)  加入收藏
在日常开发过程中,你是不是经常回到搜索引擎,搜索某个功能的实现方式,比如:Javascript 数组排序、正则表达式等等。今天给大家推荐的这个网站,就可以满足大家的需求,它叫:30seconds...【详细内容】
2022-11-18  互联网资讯看板   今日头条  Tags:程序员   点击:(20)  评论:(0)  加入收藏
在回答问题之前,我想分享一个我身边的一个真实故事,我有一个程序员的兄弟名叫老张,今年刚好45岁了,以前是前新东方的技术专家,在亲戚朋友眼里,算的上是一个成功人士了。一次哥俩喝...【详细内容】
2022-11-15  职场冷知识讲堂   网易号  Tags:程序员   点击:(16)  评论:(0)  加入收藏
曾经,有位程序员开发了【抢茅台脚本】上传到GitHub,发布两天后成功霸榜。而后作者又删掉了脚本内容,留下了一句“see you later”,深藏功与名。 要知道电商低价的茅台是¥1499元,而...【详细内容】
2022-11-11  程序员客栈  今日头条  Tags:   点击:(52)  评论:(0)  加入收藏
多人说程序员的上班状态就是“一个bug改一天”,但这一听就是玩笑话,那么程序员真实工作的一天到底是怎样的呢?不同身份的程序员工作日作息有何异同?得益于很多程序员喜欢在网络...【详细内容】
2022-11-07  黑马程序员  今日头条  Tags:程序员   点击:(39)  评论:(0)  加入收藏
要想生财必先有路,作为程序员,如果你还不知道一些的接单平台,那岂不是太亏了,作为一个接单多年的老手,我在这里分享一下,我经常接单的平台,以及它们的利弊分析,如果觉得好的记得点赞...【详细内容】
2022-11-01  宫心职场攻略     Tags:程序员   点击:(36)  评论:(0)  加入收藏
欢迎关注“新浪科技”的微信订阅号:techsina 文/李秋涵来源:深燃(ID:shenrancaijing)“大龄程序员去哪儿了”,10月24日程序员节当天,这成为了社交媒体上最火的话题之一。根据澎湃...【详细内容】
2022-10-27  创事记    Tags:程序员   点击:(26)  评论:(0)  加入收藏
今天是10月24日,2022年的1024程序员节,是全球程序员共同的节日。“1024”想必很多网上冲浪的选手们都提说过,但你知道它背后的意义吗?1024其实就是2的十次方,二进制计数的基本计...【详细内容】
2022-10-24    TOM新闻  Tags:程序员节   点击:(50)  评论:(0)  加入收藏
站内最新
站内热门
站内头条