分类目录归档:Tomly’s Vision

我的2022总结

2022的年初,离开了工作十几年的熟悉环境,投身一个创业公司,其实一开始除了期待,更多的应该是忐忑。

站在一年后的今天再来回顾,做的好的如下:

  • 从0到1建立了一只团队,而且团队的战斗力还不错,基本按时上线了几个比较重要的产品
  • 一步步建立了相对完整的团队规范和人员结构,团队日常事务基本能做到自我运转,只在关键项目和事项上需要我来把关
  • 团队的稳定性很好,做到了视人为人,团队管理中和团队人员充分沟通,也关注人员的成长,同时建立了常态的1 on 1,团队成员的整体满意度比较好
  • 和业务上下游建立了良好的协作关系,以整体负责人的主动性,以业务结果为最终导向,积极推动上下游团队的行动,不局限于自己的专业角色
  • 在公司内建立了比较大的影响力,其中包括两方面:
    • 对于大部门,在公开场合积极分享自己的经验和见解,同时了推动了多个上下游大型项目的落地,在整个大部门的管理者和一线员工都建立了比较大的威信
    • 对于公司的管理层,通过项目的汇报和业务产出的持续曝光,也持续为自己积累着credit
  • 谦逊和原则并存,与所有人的合作中,做到平等沟通,充分交流,涉及到原则底线的,也能够以坚决的态度表达立场
  • 始终保持开放的心态,对于工作安排及时消化,站在老板的角度积极主导自己领域的事务推进

不好的地方如下:

  • 二级管理者招聘滞后,导致一线的细节管理上精力不足
  • 向上管理还需要更常态化,目前还是太少,而且主要是事情驱动,没有问题时主动找主管的次数不够
  • 和销售上游还没有形成比较好的协同关系
  • 现有团队内机制主要解决的是协作和流程问题,团队的专业建设上还没有形成体系

年初刚过来的时候,安排的是去开拓一个新的业务,而我也立即百分百投入到这个事业里面来,目前来看过程和结果整体还不错,所以后续应该会扩大scope。scope大了,也能做更多的事情了,但是,上面做的好的还要继续坚持,做的不好的,也在新的一年里持续反思和改进。

最后,不管做任何事情,一定首先站在业务的发展考量,同时不要给自己设限。

他哪里做错了呢

老板跟我说了决定之后,虽然当下没太大感觉,但是晚上的时候却失眠了。

其实我是这个决定的受益者,而且从内心深处来说,我其实也非常支持这个决定。

只是没想到会这么快,这么突然,隐隐有种兔死狐悲的感觉。

当然不管内心感受如何,作为职场人,是要理智思考和决策的,理智上来说,他的表现确实不太符合他这个层级的期望,放在这个位置上,就会减缓公司的发展——这在现在的大环境下和公司创业公司的定位下,是不可接受的。这也是身价越高的人,位置越不稳固的原因,公司花了那么多钱,是希望你做出和这个工资匹配的价值的。

所以快刀斩乱麻就是必须。

所谓心要慈,刀要快。

失眠的那天,一直在反思,他有哪些地方做错了呢?

首先,作为一方诸侯,对团队内部的管理掌控不住,团队内部的人事调整还要上级来发现和发起——这体现了对团队发展没思考(或者没动作)。

团队事务拆解到下级团队,居然有下级主管当场反对——这体现了在团队内的公信力不足,或者说不足以让下级信服。

团队的机制建设没有看到产出,至少是没有有效的把工作成果展示出来——如果短期内没有结果,至少要有路线图和阶段性的成果。

人员培养没有看到成果,下级的管理者们没有形成战斗力和外部影响力——团队的人没有战斗力,大家自然而然会联想到管理者没有带好团队。

业务产出一般般,而且团队内工作屡屡成为问题中心——团队今年最重要的项目,延期了一个多月,团队内现有的两个公司级的专项,也是推进最差的,而他的团队是同级别中最大的团队了。

外部影响力不足,除了因为级别带来的天然影响力,在会议等公开场合基本没有主动发声,这也导致了其在跨团队事务中,基本属于被动接受的角色,而其还兼任着一个跨团队虚拟组织的领导工作,而这个虚拟组织基本是由其他活跃分子在推动,而他对虚拟组织形成的决议,也没有推动落实的影响力。

总结起来就是:专业能力上已经比较生疏,导致不能深入到团队的一线事务中(不能在听得见炮火的地方指挥战斗),加上管理机制和动作滞后,导致团队战斗力不高,最后,作为高阶管理者,只执行不推动,没有输出应有的外部影响力。

工程师到架构师

好友在写微信公众号,上个月找我约了个稿,写一下程序员成长为架构师的话题,而我也刚好想对这么些年的工作,有一个阶段性的总结,于是有了这篇文章。

朋友公众号文章首发,地址在此。我这里就算留个底。

——————————

0、前言

架构师是一个没有被严格定义的角色。

在写这篇文章之前,我特意把这几年看过的关于架构和架构师的书重新翻了一遍,结果发现它们的定义或多或少有一些不一样,而经过了这几年,一些之前同意的观点,现在的我也不敢苟同了。另一方面,业界对于架构师这个岗位,其实也没有统一的角色定位。在阿里巴巴,前几年是有专职的“架构师”职位的,现在已经回归到“工程师”、“专家”、“研究员”这样的纯技术职位。而我面试过的人中,也有各种各样的“架构师”,很多小团队里,项目经理就经常自认为架构师。大概架构师目前还不至于称为一个职业,更多的是在项目中的一个角色,而其角色定位也是模糊的,因此,这个文章里,我主要还是从自己的理解出发,阐述一下这个角色的定位和个人发展的建议。

1、架构师的定义

架构师:任何复杂结构的设计人员。

架构师的名字来自于建筑业,Software Architect直译应该叫“软件建筑师”。从很多方面讲,软件架构师的工作跟建筑师很像,为了寻根问祖,曾经我也看了不少建筑设计的书(推荐一本《建筑的永恒之道》),最后我发现,两者一脉相承,现阶段分道扬镳,未来也许殊途同归。

一脉相承——不管是建筑师还是软件架构师,都是为了“大图”而存在,做好顶层设计,充当需求方和实施者的桥梁,是其最重要的两个职责。

分道扬镳——两者的发展阶段不同所致。建筑业实践绵延数千年,理论根基有数百年,真正成为一门学科也有一百多年,而软件架构真正出现不过二十年。建筑业已经在足够高的层面上模式化,建筑师能够真正去“设计”,也就是决定“做什么”。而软件行业还在高速发展中,各个层面的技术还在百花齐放。技术的选择意味着权衡,因此软件架构师更多还在关注“怎么做”——这也是建筑师可以称设计师,而软件架构师只能算高阶工程师的原因,设计师更关注美感,而美感在软件架构师的考虑优先级里,排不上第一。

殊途同归——计算机发展的几十年,也是技术不断往上抽象和模式化的几十年。SOA、IoT、IFTTT等技术理念已经接近于建筑行业的模块化级别,各种“智慧城市”、“生态城市”已经在架构层面上考虑“做什么”。假以时日,架构师也许能成为一个真正的纯“设计”的职业,到时候大学里也可以开设“软件架构”的专业了,那一句“建筑设计师在成为建筑设计师之前,是不会成为建筑工人或工程师的“也能在软件行业成为现实。

当然,这只是可能的未来,这需要我们这些前辈技术人员,能够和建筑行业的前辈一样,把技术规范化,设计模式化,还要有一套关于架构美学和功能设计的完整统一的约束,任重而道远。

2、架构的职责

在软件技术发展的前几十年,是没有架构师这个称谓的。所有的人都是程序员,可能有个带头的人,叫主程序员。随着计算机技术的发展,软件覆盖的领域越来越大,软件本身也越来越复杂,现在,动辄几百万行、几千万行代码的软件系统已经非常普遍。软件的复杂化,对于开发人员的脑力负担也不断增大,而人脑所能处理的信息量是有限的,于是,软件开发工具、开发方法也在不断发展,从汇编语言到高级语言,从函数到框架,从面向过程到面向对象,从设计模式到架构模式,总体而言,人类在软件开发工具的各个维度上都在做着”封装“和”抽象”,架构设计是这种抽象和封装的最高层次。从架构的维度上,已经不需要考虑语言、函数、设计模式这一类的抽象,而是站在整体软件系统的高度上,考虑系统设计的技术合理性,需求实现的完整性,商业诉求的匹配度(主要是成本和效率)——这是架构的技术职责。

另一方面,随着行业的发展,软件项目的参与角色和人员也越来越多,从起初只有程序员和需求方,发展到技术、产品、设计、商务、项目管理多团队,技术团队内部的分工也越来越细化,前端、后端、测试、运维、售前售后技术、集成技术等应运而生。架构师是技术团队面向产品设计等团队的接口人,承担着弥合技术与非技术团队之间知识和语言体系差异的职责,同时作为技术团队的带头人,要负责勾勒蓝图,明确边界,让不同技能的团队通力协作,最终完成软件系统的整体建设和发布——这是架构的组织职责;

2.1、架构的技术职责

首先,架构师经常被类比于建筑师,但是有两个建筑领域的基础理念,在软件架构领域是不成立的(至少现阶段不成立):

建筑设计师在成为建筑设计师之前,是不会成为建筑工人或工程师的。——现阶段的软件架构师,一定是从软件工程师成长起来的。

建筑学和工程学之间的区别表现在“做什么”和“怎么做”:建筑师决定做什么,工程师想出怎么做。——现阶段的软件架构师,除了决定做什么,也要决定关键部分怎么做。

架构的技术职责分为三大块:

  • 抽象设计;
  • 非功能设计;
  • 关键技术设计;

首先是抽象设计。架构师需要能自由地在不同的抽象层次和视角上分析需求,不同的架构层次/视角提供了不同的视图,这些视图互相验证,又能构成整体的设计大图。架构的抽象层次分成两个维度:

  • 垂直维度

从上到下,分成企业架构、解决方案架构、应用架构、系统架构等,这个分层的逻辑,是提供不同颗粒度的业务建模。CTO关注企业架构,它提现了一个企业整体的IT技术建设的战略选择,典型的就是集中式和SOA、大型机和云计算的选择等;产品经理和运维关注应用架构,这里映射了产品的业务流程和应用的整体部署依赖;外部客户关注解决方案架构,它定义了如何通过产品的整合和协同,解决特定客户的特定的技术方案需求;研发工程师关注系统架构,这里定义了单个系统的领域建模和系统框架。

  • 水平维度

具体到对某一个业务的架构设计,又可以区分出业务架构、数据架构、技术架构、应用架构几个不同的视角。业务架构是对业务领域和业务流程的分析抽象,需要提炼出业务的核心领域模型,业务的可变和不变部分,这是架构师和产品经理协同完成的;数据架构基于业务架构提炼的核心领域模型做数据模型和存储模型的设计;技术架构基于业务的性能,可用性,安全等非功能性指标,确定语言、框架、中间件、部署等技术选型;应用架构基于业务抽象设计应用系统的层次结构、系统边界等。

在这些架构划分中,企业架构匹配商业模式,业务架构匹配业务模式,其他几个架构的划分,更多的是从技术的不同视角来看,他们提供了从不同的抽象层次,不同的切面对于功能需求的分析和建模。

同时需要说明的是,架构的抽象是匹配于业务的,就像桥梁设计师不能直接转做摩天大楼设计,架构抽象也是区分领域的,每一个业务领域都有自己的独特性,因此在架构上也是千人千面的,好的架构设计也是对于业务抽象得最好的设计。

架构师的另一个技术职责,是对非功能需求的分析,这也是“架构服务于功能,高于功能”的含义。这里的非功能性需求包括了软件系统的可靠性、扩展性、可测性、数据一致性、安全和性能等。考虑到成本和运行环境等限制,这些非功能性需求很多时候是不能同时满足的。这个时候就需要“权衡”,空间换时间的算法层面的权衡,性能和可测性、可靠性的权衡,一些权衡甚至上升到了学术层面,变成无完美架构的理论根基(如CAP理论)。

架构师的最后一个技术职责是关键技术设计。建筑师不只是做整体外观设计的,建筑师也需要考虑关键部分的细节设计——曾经在巴塞罗那圣家堂,我甚至看到高迪连教堂里一把椅子都留下了详细的设计图纸。同理,架构师也需要对可能影响到软件系统整体质量的关键部分,做更细节的详细设计。

2.2、架构的组织职责

架构师是企业的一员,作为“边界人”,承担着在不同角色、团队之间沟通协调的作用。

  • 和业务、产品团队的协作

软件系统是解决现实世界的问题的,任何的软件系统都是业务相关的,当一个软件系统的商业模式确定之后,架构师就开始和业务、产品团队紧密合作,确定软件系统的业务架构和领域模型。业务和领域模型抽象的好坏,决定了软件产品是一次性的解决方案,还是可以持续支撑业务成长的真正的产品。

需要说明的是,业务、产品方和架构师是需求方和实施方的关系,所以,双方之间既是合作的关系,有时候也是谈判双方的关系,特别是对于外包型的软件产品而言,这个时候,架构师又承担着在业务方和技术团队之间找到诉求契合点的重任。

  • 和技术团队的协作

研发阶段,有架构师参与的项目,往往牵涉多个不同方向,不同业务领域的研发团队。架构在其中的作用,是整体大图的传导,以及应用和团队研发边界的划分,对于影响到整体的非功能需求的关键技术点,架构师也要能亲力亲为完成设计。归根结底,架构师为软件系统的整体质量负责,也为研发团队的研发分工负责。

部署阶段,架构师需要和运维团队一起评估满足整体非功能需求的前提下,软件系统部署的硬件成本和部署拓扑结构。例如对于互联网应用,针对性能要求,是否需要CDN,带宽需求;针对可靠性,是否需要多机房部署;针对安全,是否部署相关的安全软件。最终的部署策略,仍然是基于成本和需求的一个权衡。

技术团队是架构师的大本营。根据不同公司的职能定位不同,有的架构师立足于技术团队,有的游离于技术团队。立足技术团队使架构师能更深入了解团队所负责的产品,因此能对业务做更合理的建模,也有利于架构师对关键技术方案做针对性设计,但是可能会限制了架构师拥有更加全局的视角。游离于技术团队的架构师能够从全局看待软件设计而不受制于屁股,因此更能从客观合理的角度规划整体设计,但是由于对技术团队没有管理职能,对于方案的落地只能依靠个人的技术号召力,而且,游离意味着疏远,如果架构师不能自觉地去跟进软件产品的实际落地,可能慢慢就会架空,变成PPT架构师。

简言之,架构师既不能完全负责某个技术团队,也不能完全游离在技术团队之外,这个,又是一个职能定位的权衡了。

同时,架构师和技术团队的协作,还有一个很重要的组织职能。如前述,架构师既决定了整体的架构选型,也决定了关键的技术方案的设计,而什么是需要架构师亲力亲为的关键技术方案,是架构师来确定的。因此,这就引申出架构师的另一个重要的组织职能——团队培养。如果架构师完成所有的技术方案设计,研发团队只管写代码,架构师会累死,研发团队也不会成长,这就要求架构师给予研发团队足够的成长空间和信任,并因此承担一定的风险和责任,这是这个角色必须承担的。

  • 和其他角色的协作

除了产品和技术团队,架构师需要协作的还有项目经理,外部客户,甚至是公司财务……一句话,架构师作为技术方案的总负责人,对接所有对技术方案有关联关系的合作方。

  • 如何沟通

协作就需要沟通,架构需要掌握多门沟通语言,而最好的语言是图表。对于产品来说,架构师沟通的工具是业务架构,用例和领域模型;对于研发团队来说,架构师沟通的工具是应用架构,组件和时序图;对于运维团队来说,沟通的语言又成了部署架构。图表的作用是维护共同的语言,同时也是让设计文档化以便于传承。

3、架构师的成长

上面讲了架构师的职责,职责既是能力的要求。可以看到,架构师既是一个全方位的技术专家,也是一个沟通协作的专家。因此,总结一下,架构师的成长,也是两条线:

  • 技术上

架构师的首要工作是抽象建模,而首要的首要是要了解自己所处的业务领域,只有对业务足够了解,才能更好地抽象和建模,也更能沉淀通用的设计方法论。几年前,我曾经看过我司首席架构师的书单,其中有银行卡组织的介绍的,有零售银行的业务分析的,而那个时候,我司还只是金融业边上的支付公司而已。

另一方面,架构师需要在业务领域所涉及到的技术领域中,都要了解甚至精通,譬如对于互联网行业的架构师,小到语言、算法、数据库,大到网络协议,分布式系统,服务器,中间件,IDC等等都需要涉猎。一句话,架构师是技术团队的对外接口人,也应该是外部团队技术问题的终结者。广度之外也要深度,对于关键的技术模块的设计,架构师需要有技术的权威性。

  • 组织和个人成长上

架构师要作为业务和技术的桥梁,因此需要精通业务和技术的语言,要锻炼沟通能力,不只是口头的沟通能力,也包括用标准化的图表表达设计思路的能力。

架构师需要一种“中庸之道”。不管是技术的选型,团队的协作、培养和分工,商业诉求和成本、产品需求和技术诉求的匹配,很多时候都是一种权衡。可以说,架构的工作主题就是权衡,这可能也是工程师成长为架构师最大的挑战。工程师经常是完美主义的,程序也总是精准精确的,但是架构师要习惯于不完美和一定条件下的不精确。

4、补充说明

上面写了这么多,其实针对的是大型的,有明确需求的,多团队参与的项目或者产品的架构师。现实世界中并不都是这样的项目,所以也并不都是这样的角色分工。例如,对于创业团队来说,活下来是最重要的,所以创业团队崇尚的是敏捷开发,快速构建,灵活试错,37signals的《Getting Real》是这种思想的最好诠释。这样的研发体系特别适用于不需要太复杂的底层设计,功能扁平化的,可以快速开发原型,小迭代不断扩展的应用,特别是web应用和APP。

另外,架构师也不是技术人员唯一的方向,甚至不是大多数技术人员的职业方向。在技术上,架构师是广度优先兼具深度,同时在技术之外附带了许多的业务性和组织职能,而很多的技术人员会更倾向于在技术的深度上不断挖掘,也不愿意投入太多的精力在业务和沟通上,这样的技术人员其实更适合的是技术专家的路线。技术专家研究的是纯粹的技术,这里面可能有算法、有编程语言、有运行容器(虚拟机、操作系统、应用服务器、中间件)、有通讯机制,这些都有足够的源源不断的问题等着技术人员去解决,而他们解决的问题,也成为软件技术不断向上抽象,不断模式化的基础,所以,技术专家的路线也是同样重要的。

唐时明月

  ——“如果让你回到中国历史上的某个时代,你会选择哪一个?”

  ——“我一般有两个选择:春秋和盛唐。如果只能选一个,我会毫不犹豫地选择生活在公元8世纪,大唐的西域。”

  那个时代,中国正享受着历史上最强盛的时期——事实上,整个亚洲正经历着历史上最强盛的时期。亚洲最西端,刚刚兴起的伊斯兰,仅仅一百年的时间,已经成为跨越三大洲的阿拉伯帝国,而伊斯兰狂热的宗教战士们,正觊觎着东方的遥远文明;世界屋脊上,刚刚统一的吐蕃,正在经历藏族历史上仅有的两百年强盛帝国岁月;盛唐,虽然内忧渐现,这个时候仍是世界上最繁华的国度;甚至连亚洲一隅的高丽,都能够强大到用区区百万人口的国家力量,独立抵抗隋朝百万大军压境,直至把大隋拖垮。

  而在这个亚洲极盛的时代,西域是各方力量角逐的沙场,更是文化碰撞的熔炉。

  这个时代,玄奘刚刚走过这里,经过西域三十六国(或者七十二国),取回了佛经——而如果他晚200年,也许取回的就是可兰经了。

  这个时代,李白在中亚草原上的安西重镇呱呱落地,随后,以放浪形骸的侠客诗歌,在中华文明闪耀了一千多年。

  而这个时代最吸引我的,不是这单单的“文化”——在中国两千年的历史上,文化的遗产太多了——而是这个国家和这个时代的气质,那种长河落日,戎马天涯,文功武略和悠悠离愁的奇特混合物。

  至文至雅如李白,都可以精熟文功武略,手刃数人,洞庭湖边临猛虎而气淡神闲。那个时代的人,该有多豪迈?

  那个时代,高仙芝为了惩罚远在巴基斯坦的叛国,率军一万,奔袭一千公里,翻过帕米尔高原,穿过海拔4000米,长几百里的冰川,行军至此,面对以逸待劳的吐蕃万余守军,还能杀敌五千,俘敌一千——而拿破仑在一千年后,也仅仅是翻过了一个阿尔卑斯山而已。

  那个时代,一个小小的唐朝使臣,指挥借来的西域属国的区区几千士兵,就可以在远离国土的印度本土击败几万雄伟的印度象兵,甚至把中天竺国灭掉。

  这个时代的中国人,尚武却足够文明,更可贵的是,他们的尚武建立在个人的勇敢和军事素养上,而不是野蛮的穷兵黩武。

  那个时代,薛仁贵征讨吐蕃,只能带五万士兵,整个大唐节度边防的总兵力,一共才49万,而吐蕃一次决战,就可以发动40万军队围攻薛仁贵。——这个时期,西域的战事上,大唐处处显出武力的窘迫,而恰恰是这种窘迫,才彰显这个盛唐是真正人才的极盛、文明发展的极盛……于是,那段历史,才有了那么多的“单骑独闯敌营”,“百骑夜袭敌营”,才有了那种独特的气质,一种悲壮,一种以文明的少数对抗野蛮的多数的悲壮。

  于是,虽然薛仁贵的五万唐军最终在四十万吐蕃军前全军覆没,但自始至终却不输气势;高仙芝的两万军队加一万盟军面对十五万阿拉伯联军,唐军战斗力和装备技术占据优势,甚至围攻敌人数日,只是由于盟军倒戈,才兵败而归。

  西域之于大唐,没有任何经济和文化的利益诱惑,只是由于地处几大势力交汇处,战略需要而艰难经营150年,而这150年,大唐在西域管辖西至里海,南到巴基斯坦,北到巴尔喀什湖,而安史之乱后,后来的朝代再没能将影响重新播种到这里。

  中国毕竟只是想保护富饶的内陆地区不受袭扰,不像虔诚的伊斯兰宗教战士,狂热地想要让阿拉的光芒照耀世界,更不像吐蕃原始的野蛮诉求,勇猛的武功后面,只是想掠夺奴隶和土地。

  而这样没有目标的征战不是没有意义的,意义其实更多地体现在它的过程中,而不是做的结果。

  当安史之乱后,吐蕃趁乱占领世界第一大都市长安,却仅仅待了十五天就不得不主动弃城离去;当河西走廊被吐蕃占领已经一个世纪,当地老百姓仍然自发起义,不费朝廷一兵一卒把吐蕃赶走,并自发恢复大唐的政治体制和社会制度;甚至,在河西被占领,西域自此与王朝隔绝,大唐镇守西域的都护府官兵们,硬是在没有任何中央指挥和补给下,虔诚地坚守边防40年,直至最终被汹涌的西域牧民吞并……我看到的,是一个生机勃勃,尚武崇文又有极强向心力的民族,在强敌林立的时代,不仅优雅地发展了自己,也将民族的活力辐射到了国门外,甚至,即使战败了,也能那么深远地影响了世界——至少,曾经在大唐管辖下的,后来被阿拉伯发展成为伊斯兰名城的撒马尔罕,靠着唐朝的俘虏,成为了西方世界第一个造纸中心。

  而这种成就之下,我们又何须多此一举地声明:这是愚忠,对一个王朝的“家天下”的忠诚,是迂腐的。

  其实,只要你能让国民自豪而立,不离不弃,“家天下”又如何呢?

 

流浪歌手

  上周六晚的陆家嘴,烟雨霏霏,恍惚世界末日,感觉很是震撼——可惜那天没带相机。

  第二天偶特地背上全套装备杀将过去想拍世界末日——可惜那晚又不下雨了……

  不过还好,这个流浪歌手让那晚很美。