EchoDemo's Blogs

《不止代码》摘句(二)

什么是架构?

在我看来软件架构就是将人员、技术等资源组织起来以解决业务问题,支撑业务增长的一种活动。可能比较抽象,我想我们可以从架构师的一些具体工作任务来理解这句话含义:

1、组织业务:架构师通过探索和研究业务领域的知识,构建自身看待业务的”世界观”。他会基于这种认识拆分业务生命周期,确立业务边界,构建出了一套解决特定业务问题的领域模型,并且确认模型之间、领域之间的关系与协作方式,完成了对业务领域内的要素的组织工作。

2、组织技术:为了能在计算机世界中运作人类社会的业务模型,架构师需要选用计算机世界中合适的框架、中间件、编程语言、网络协议等技术工具依据之前设计方案组织起来形成一套软件系统方案,在我看来软件系统就像是一种技术组织,即技术组件、技术手段依据某种逻辑被组织起来了,这些技术工具被确定了职责,有了明确分工,并以实现业务功能为目标集合在了一起。比如 RPC 框架或消息队列被用于内部系统之间的通信服务就如同信使一般,而数据库则负责记录结果,它更像是一名书记员。

3、组织人员:为了能够实现利用软件系统解决业务问题的目标,架构师还需要关注软件系统的构建过程,他以实现软件系统为号召,从公司组织中聚集一批软件工程师,并将这些人员按不同工种、不同职责、不同系统进行组织,确定这些人员之间的协作方式,并关注这个组织系统是否运作良好比如沟通是否顺畅、产出是否达到要求、能否按时间完成等。

4、组织全局,对外输出:架构师的首要目标是解决业务问题,推动业务增长。所以他非常关心软件的运行状况。因为只有在软件系统运行起来后,才能对外提供服务,才能在用户访问的过程中,解决业务问题。架构师需要关注运行过程中产生的数据比如业务成功率,系统运行资源占用数据、用户反馈信息、业务增长情况等,这些信息将会帮助架构师制定下一步架构目标和方向。所以软件架构不仅仅只是选用什么框架、选用什么技术组件这么简单。它贯穿了对人的组织、对技术的组织、对业务的组织,并将这三种组织以解决业务问题这一目标有机的结合在了一起。

很多面试的候选人在被问及他所开发的系统采用什么架构的问题时,只会罗列出一些技术组件、技术框架等技术要素,这样看来其根本没有理清架构的深层含义。也有一些架构师只专注对底层技术的研究,以为打造一个卓越的系统是非常牛逼的事情,可是他忽略了软件系统的价值是以解决业务问题的能力、支撑业务增长的能力为衡量标准,所以最后生产出了很多对组织,对业务没有帮助的系统。

架构目标需要适应业务的发展

架构的目标就是为了支撑业务增长,就是提升软件系统的服务能力。可是话虽说如此,但真实却要做很多取舍。比如对初创团队而言,其产品是否解决业务问题这一设想还没得到确认,就立即去构造一个高性能、高可用的分布式系统,这样的架构目标远超出业务发展的需求,最后的结果就是浪费大量人力物力,却得不到任何起色。架构师需要审时度势,仔细衡量正确性、大规模、可用性三者的关系,比如今年业务蓬勃发展日均订单 300 万,基于对未来的可能预测,明年可能有 3000 万的订单,那么架构师应该要着重考虑大规模和可用性。而且每一点提升的程度,也需要架构师衡量把握,比如可用性要达到 2 个 9 还是 3 个 9。回顾自己以往的工作很多时候就是因为没有确立架构目标导致浪费了组织很多资源,比如在之前的创业团队中,由于本人有一定的代码洁癖,经常会花费很多时间和同事计较代码质量,这样本可以更快上线的功能却需要被延迟,当时过度追求正确性的行为是与创业团队快速验证想法的业务需求不匹配的。

另外一点比较深刻的案例则是在本人担任一个技术团队负责人的时候,在一次述职报告的时候,leader 问我对接下来团队工作有什么计划?我当时说了一堆什么改进代码质量,每天晨会,任务透明化,建立迭代机制等等,然后就被各种批驳一通。当时团队基本以外包人员为主,人员水平较差,开发出来的金融系统也是千疮百孔而这条业务线最重要的业务价值则是按计划实现潜在投资方的需求,争取拉到投资。所以
不久 leader 就召集测试架构的相关人员与我这边一同梳理对核心功能的测试工作,将研发、测试、上线的流程自动化。

当时并不理解这样做核心价值是什么。但回过头来看这样的工作方式恰好符合了业务发展的需求,即确保系统是符合设计需求的,保证系统达到可接受的正确性,为后续能过快速前进打下基础,最重要的是为企业降低了构建成本。所以程序员想要工作出业绩,必须认清楚系统背后的业务价值,按价值去梳理工作优先级,而不是像我一般过度纠结细节,追求技术理想化。

从价值出发-找寻学习与工作的新思路

迷茫能引发思考,架构则塑造了视野,而价值则是我们之所以存活,之所以工作的逻辑起点。基于这样一种价值思维,对我们的学习和工作又可以有哪些改启示呢?明确自身的业务相关主体:找出你工作的协作关系网内的业务方和客户方,这样你就可以从客户方中找到离你最近的业务价值点,从你的业务方中挖掘更多的资源。甚至你可以按这个思路顺着网络向上或向下挖掘价值链条,整合更多的上下游资源以实现更大的价值。

向前一步,为更大的价值负责:不要因为自己是开发人员就不去关注软件运维,不要因为只是测试就不关注软件开发,因为你关注的越多你越能看清全局的价值目标。如果只关注一亩三分地,那么注定这辈子只能困守在这一亩三分地里,成为一名流水线上焦虑至死的码农。试着转变思维,从架构师的角度思考价值问题,看看能否将技术贯穿到业务、到用户、到最终的价值去。之前我的朋友说过要把产品经理踢到运营位置去,把程序员踢到产品经理位置去,这样才是正确做事方式。这句话也是类似的意思,向前一步才能懂得怎么做的更好。

像架构师一样思考,用价值找寻重心:人的迷茫是因为找不到重心,而价值的意义在于引导我们思考做哪些事情才能实现价值,先做哪些事情会比后做哪些事情更能创造收益。像架构师那样全局性思考,把遇到问题进行拆分,把学习到的事物串联起来,努力构成完整的价值链条。学会连接,构建体系:前几天看到一篇文章对今日头条的产品形态极尽批判之词,指责它的智能算法将人类封死在自己的喜好之中,将人类社会进一步碎片化。这似乎很有道理,有趣的是互联网将我们连接至广袤的世界,却也把我们封闭在独属于自己的小世界里。依旧是我的那位朋友,他说他的最大价值在于连接,将不同的人连接在一起,有趣的事情可能就会即将发生。或许算法的天性就是顺从与迎合,但人最终想理解这个世界还是需要依靠自身的行动与不同人之间建立联系,这也是一种摆脱流水线限制的有效方式。另外,我们自身也是某种事物连接的产物,比如架构师,他是业务、技术、管理连接在一起的一种产物。所以我们应当树立自身的知识体系以吸收融合新知识,将孤立的概念连接起来,形成自身的价值链条。比如这篇文章将我从事技术开发经验、与对架构的理解以及自身过往经历结合起来,这也是一种内在的体系梳理。

🐶 您的支持将鼓励我继续创作 🐶
-------------本文结束感谢您的阅读-------------