程序员,练就哪些技能才胜任架构师?

关注「 IT老兵哥 」,赋能程序人生!本系列前序文章索引:

  1. 程序员为什么必须要懂架构?
  2. 架构到底是什么,你知道吗?
  3. 架构都有哪些,我该怎么选?
  4. 架构师都干什么,你知道吗?

架构师,我们程序员打怪升级的主要方向,它不像某些技能报个培训班就能获得。胜任架构工作需要具备许多技能,既有硬技能还有软技能。俗话说:一口吃不成胖子。从程序员到架构师也无法一蹴而就,它是一个循序渐进、稳步提升的进阶过程,每个阶段都有每个阶段要掌握的技能,多项技能之间还存在先后顺序。如果想尽快转型升级至架构师,那你必须在日常工作中有意识地储备这些技能,接下来老兵哥结合亲身经历来分享一下。

架构师硬技能

1. 硬技能

不像产品、管理等条线更加倚重通用技能,从技术条线转产品或管理,入门相对容易一些。但从产品或管理很难转型至架构,架构师必须从开发测试岗做起,在工作中不断提升专业技能和积累实践经验,从一个模块开始,到一个子系统,再到整个系统,最后到多个系统,这是一个循序渐进提升硬技能的过程,也可以看成构建架构师硬技能“点线面”。

1.1 点

老兵哥我刚入行时的岗位就是开发工程师,跟其他几个毕业生一起被安排在自动化测试平台项目组,整个系统由部门资深同事设计的,我们分别负责开发其中某个子系统的几个模块。这个阶段我主要关注函数、类和模块这个粒度,为了做好工作我要钻研编程语言 C/C++,以及熟悉 Visual C++ MFC、Socket 等代码库的使用。每周我们还会举行代码评审会议,邀请同事点评自己写的代码,那时候的自己年轻气盛,不管收到正面或负面的评价都会极大地激励自己。经过这个阶段的历练,我的编程技能得以较大的提升,也养成了较规范的编码习惯,掌握了如何设计好一个函数、类和模块。

这个项目前后做了两年左右时间,后面半年还做了些系统推广培训相关的事情。随后,我们又启动了采用脚本语言 Python 作为自动化测试脚本的自动化测试脚本,在这个项目我负责预研 Python 脚本解释引擎和开发测试代理子系统,这段项目经历让我跃升到子系统这个粒度。我需要考虑这个子系统在整个系统当中需要承担什么职责,以及跟其他子系统或被测系统之间的交互机制。同时,我还要负责这个子系统设计,确定它由哪些模块构成、每个模块内部包含哪些类等。

这个阶段让我具备了构建单个子系统的能力和信心,在后面的工作当中我还使用不同类型的编程语言构建过许许多多不同类型的子系统,但其实都是在强化构建单个点的能力,关联技能树包括:操作系统、编程语言、应用容器、开发框架、多线程等。

1.2 线

对于稍具规模的系统,它都免不了要划分成几个子系统,子系统之间或者与外部系统之间就需要连接通信,这相当于把两个孤立的点连接起来,即连点成线。这个过程跟开发单个子系统所需要的技能有所不同,它需要网络编程相关的知识技能。在老兵哥我刚参加工作的那些年,Web 应用还没有成为主流的应用形态,浏览器/服务器(B/S)架构还没有兴起,HTTP 协议尚未被广泛使用,当时最流行的就是客户端/服务器(C/S)架构,IP/TCP 才是最主要的通信协议,我就是在这个阶段积累下网络编程相关知识技能的。

最早我们要开发客户端或服务器程序,就需要熟悉掌握 Socket 网络编程,包括绑定监听端口、接受连接请求、并发处理请求等,从无到有全部自己编写,这些经验对于我后来理解网络通信机制有非常大帮助。为了满足子系统之间的交互需求,我们要基于 IP/TCP 协议来定制专门的应用层协议,包括制定报文头和报文体两层结构,虽然比 HTTP、FTP、SMTP等协议要简单,但这段经历让我对 HTTP 这类应用层协议的实现原理有了深刻的理解。另外,我们还要考虑报文内容过长时的分包组包、网络发生异常时的丢包重发,以及报文内容的编解码等。因此,有志于在技术线发展的程序员都有必要补上这块技能。

在近十五年的技术从业生涯中,老兵哥我前前后后解决过无数现网问题,其中有许多复杂的问题都跟系统交互通信有关,借助各种网络抓包分析工具抽丝剥茧,最后定位问题的根源都是没有正确使用网络协议,所以我很庆幸自己在过往的工作中有这段经历。

随着互联网的蓬勃发展,Web 应用成了最主要的应用形态,与此同时 HTTP 这种更人性化的网络通信协议成了最受欢迎的交互协议。从开发客户端/服务器(C/S)应用转到开发浏览器/服务器(B/S)应用的过程中,老兵哥我专门花时间学习了 HTTP 协议,了解其运行原理和控制机制,尤其是协议头中每个字段作用,包括请求方法、编码格式、超时机制、缓存机制等。印象最深刻的就是 Roy Thomas Fielding 博士发表了 REST 的论文《Architectural Styles and the Design of Network-based Software Architectures》,即《架构风格与基于网络的软件架构设计》,让我对 HTTP 有了全新的认知,这些知识技能对于理解掌握云计算时代的服务化架构非常有帮助。

除了 IP/TCP、HTTP 这两类协议之外,老兵哥我觉得还需要掌握消息队列(Message Queue)相关的协议,这类型协议更适合构建事件驱动架构的系统,不仅仅支持同步还支持异步。我曾经负责一个移动互联网的系统,其中有个子系统负责维护各种手机终端型号和设备信息,合作伙伴需要从这个子系统及时地获取最新信息,最初我们用 HTTP 协议轮询拉取的方式实现,但随着合作伙伴数量和信息更新频次的增加,这种信息同步机制就遭遇瓶颈了,后来我们通过引入消息队列中间件优雅地化解这个问题。

1.3 面

从点、线开始修炼,随着连线越来越多,最终将会形成平面,即分布式系统,这是我们程序员通往架构师路上必然经过的站点。刚开始我们仅仅利用互联网来发布搜索信息,接着我们的即时通信和社交也搬到了网上,再后来购物差旅等事情也可以通过互联网来完成了,现在跟我们衣食住行相关的所有事物都开始被互联网化了,这相当于虚拟世界被构建的越来越庞大越复杂。原先我们开发的软件系统复杂度还是有限的,它本身顶多被划分成几个子系统,需要关联交互的外部系统数量也非常有限。但随着业务越来越丰富,单个系统的复杂度也急剧增长,与之关联的外部系统也非常多,逐渐演变成一张纵横交错的网,也就是我们所说的“面”。如何在这样复杂的网络当中维护好复杂度,以及确保系统依旧满足易用性、性能、可靠性、稳定性、安全性等质量属性,这就需要程序员修炼分布式系统相关的技能。

老兵哥我在从事移动互联网相关系统研发的过程中遇到了更高复杂的场景,当时我们要构建一个苹果应用商店类似的生态体系,我们负责的系统本身由六七个子系统组成,它还需要跟许多上下游合作伙伴的系统对接交互。如果跟每个外部系统的对接都采用各自不同的标准,随着接入系统的数量越来越多,那对接相关的复杂度最终走向失控。另外,像应用订阅购买等典型业务场景都需要多个系统协作完成,其中涉及到分布式事务,怎样保证数据一致就是很大的挑战。按照常规逻辑,随着系统的复杂度不断提升,那么系统出现问题宕机的概率就会提升,但对于用户来说,他们依旧希望系统可以提供 7*24 小时的服务,不要出现服务超时或失效等异常情况,这就是“面”带来的挑战。

从那个阶段开始,我有了学习和实践分布式架构的机会。最早就是面向服务架构 SOA,即 Web Service、SOAP 等技术标准,站在现在回看那时候,这套技术栈是偏重偏繁琐的,但当时分布式系统对于整个业界都是全新的挑战,这套解决方案是由 Compaq、HP、IBM、Lotus、Microsoft、SAP 这些传统软件巨头们提出的。它通过 Web 服务描述语言 WSDL 来标准化分布式系统中的每个服务,再通过简单对象访问协议 SOAP 来规范服务之间的交互,从某个角度来看,越大规模的协作必须依赖统一的标准和规范。但传统软件巨头很少有在互联网第一线实践的经验,不像 BAT 他们对互联网分布式系统的挑战有那么真切的感受,阿里巴巴就在实践中孵化出了比 Web Service、SOAP 更加轻量化的 Dubbo,它也是依托面向服务架构 SOA 这套理论,只是是线上更加接地气。

这段工作经历让我对分布式架构有了体系化的认知,虽然近些年分布式技术从面向服务架构 SOA 演进至微服务架构 MicroService,技术中间件从 Dubbo 更替为 Spring Cloud,但我依然可以套用这套知识体系去理解新技术。

2. 软技能

软硬技能到底是怎么区分呢?老兵哥我觉得一个人靠哪门手艺吃饭,那么这门手艺相关的技能就是硬技能,而辅助硬技能产生更大价值的技能就是软技能,这跟“T”字型人才的要求类似,既要求有足够精湛拔尖的主攻技艺,也要有各式各样的综合技能。硬技能很重要,这点我相信没有人会反对,但也有不少人意识不到软技能的重要性。对技术人来说,从开发到架构,从架构到 CTO,或者从开发转产品或管理,不管是晋升还是转型,我们都是在加强硬技能的同时提升软技能的比重,甚至原先的硬技能变成了软技能,而原先辅助作用的软技能却成了硬技能。接下来,我将结合个人从开发转型架构的经历来谈一谈哪些软技能很重要:

  • 沟通:相对于开发工程师,架构师的工作职责决定了他需要对接更多上下游客户,对沟通技能的要求就要高很多,毕竟不同角色的思维模式和立场角度各不相同,架构师必须懂得采用不同方式跟这些角色沟通互动,换位思考,从而挖掘到真实的需求,然后利用专业技能平衡好各方需求,最终输出各方都满意的架构方案。
  • 写作:做开发岗时,我的主要输出就是代码。虽然偶尔也要写一些技术文档,但通常是供自己看的技术文档或者凑数用的产品操作使用说明。在转型做架构之后,我写代码的比重降低了,为了让各个干系人理解认可我的架构方案,除了口头说明之外,最主要就是靠技术写作,写给他人看的文档跟纯粹记录的完全不同。
  • 设计:不管是口头沟通还是文档传播,语文或文字功底再好,也抵不过搭配上设计图例,图例中包含的信息是多个维度的,也更加直观易懂。通常,我习惯在写技术文档之前先把设计图画出来,画设计图的过程就是理顺思路的过程,在此基础上再来组织文字或语言变得更加简单容易,相当于是看图说话了。
  • 演讲:权力和非职权影响力,架构师开展工作主要依赖于非职权影响力。架构师跟各个干系人之间不存在上下级关系,要让团队及合作伙伴认可并执行你的架构方案,你必须要靠自己的专业能力让对方信服。在以往学校教育或成长过程中,我本身是缺乏这方面的积累的,为了成功转型架构师我刻意训练提升自己这方面的能力。

总结起来说,为了在架构师这个新平台上做好工作,我们需要提升自己输入、设计和输出等方面的能力。以往我们从外界获取信息主要靠阅读文档,现在还要加强立体多方位的沟通。在输出方面,以往我们的输出形式太过单一,现在我们要掌握文字、演讲等多媒体方式。当然,最核心的还是架构设计的专业技能,这个输入输出的中心。

3. 知识体系

今天先分享到这里,老兵哥后续还会分享程序员到架构师的进阶指南等,包括每个阶段需要掌握的软硬技能图谱(如题图所示),文字提纲可以参考文章:从程序员到架构师,有捷径吗?如果你对这个主题感兴趣,千万要记得先关注哦!坚持原创不易,如果你觉得有价值,麻烦动动手指点下文 「 👍 」按钮,让更多小伙伴可以看到,老兵哥会更有动力坚持分享的。另外,我后续还会分享职业规划、应聘面试、技能提升、影响力打造等经验,欢迎 关注 本专栏或歪信公主号 「 IT老兵哥 」!

IT老兵哥

软技能-热门文章:(首发公众号)

  • 如何在打造影响力的路上「码」不停?(
  • 2020 来了,你的 2019 晒好封存了吗?(
  • “花式”裁员套路深,你知道吗?
  • 遭遇裁员,如何渡过心理危机?
  • 程序员“求包养”攻略揭秘

硬技能-热门文章:

Image placeholder
linjiadashao
未设置
  38人点赞

没有讨论,发表一下自己的看法吧

推荐文章
为什么大部分人做不了架构师?这2点是关键

阿里妹导读:选择有时候比努力重要,真正厉害的人不仅仅是埋头苦干,而是会利用好的思维方式、好的方法,看穿事物的本质,顺势而为,找到事情的最优解,并懂得举一反三。架构师是程序员的目标之一,但大多数程序员无

数据科学领域的核心技能和新兴技能分别有哪些?

近年来随着大数据的迅速发展,各种各样的数据分析技能也逐渐大热,为了找到数据科学领域目前最常用的技能和未来最流行的应用趋势,我们进行了一项调查。我们确定了数据科学技能的两个主要类别:一个是大多数受访者拥

行业目前最大容量,东芝16TB硬盘里藏了哪些技术?

强大的SSD似乎给硬盘(HDD)带来了“毁灭性”的打击,使其淡出存储舞台,但事实并非如此。这种冲击确实存在,不过更多在消费级硬盘市场。对于企业级的数据存储,可以说从现在到未来很长一段时间内,硬盘依旧会

数字转型 架构演进 2019中国系统架构师大会盛大召开

2019年10月31日~11月2日,由IT168旗下ChinaUnix社区主办的第十一届中国系统架构师大会(SACC2019)在北京隆重召开。自2009年举办以来,大会云集了国内CTO、研发总监、高级

阿里支付宝架构师:谈谈我眼中的高并发架构【好文】

来源:my.oschina.net/u/3772106/blog/1793561前言高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等。为了让业务可以流畅的运行并且

架构师眼中的高并发架构

前言高并发经常发生在有大活跃用户量和用户高聚集的业务场景中,如:秒杀活动、定时领取红包等。为了让业务可以流畅的运行并且给用户一个好的交互体验,我们需要根据业务场景预估达到的并发量等因素,来设计适合自己

这波技术社区的程序员,技术视野有点堪忧!

前一段时间写了一篇文章《凌晨1点突发致命生产事故,人工多线程来破局!》,只是一篇生产事故的记实文章,没想到在圈内流传甚广,其中有程序员对其中的细节有点疑惑,刚好国庆可以和大家再进一步探讨一下。现在技术

@程序员,请万分珍重你的第一份工作

01、我的故事昨天我在群里发起了一个议题:读者朋友们,大家伙觉得第一份工作重要吗?回答不要太统一,重要个屁——不可能的。老读者都知道一些我的经历了。高考失利,因为太文弱干不了搬砖的活,就上了大专,大三

干了5年程序员,该如何转行?5个新工作方向了解一下

大数据文摘出品来源:Medium编译:灿灿、曹培信写了5年代码,年龄已近30,头发尚存几缕,除了写代码其他并无所长,职业未来在何方?对于从毕业就进入互联网公司,已经工作了5年甚至更久的程序员来说,现在

大神程序员,夜夜coding到天明?Python之父昼伏夜出,PHP创始人24小时都在线

栗子鱼羊 发自凹非寺转自量子位 |公众号QbitAI大神程序员,夜夜coding到天明?有位名叫IvanBessarabov(简称“伊万”)的好事者,刚刚统计了各路大佬的代码提交(gitcommit)

35岁只是普通程序员,还有救吗?

作者:草核儿来源:木东居士关于作者:草核儿,互联网行业沉思者!希望传播的是正能量,但偶尔会被误以为是散播焦虑!欢迎大家多多交流~0x00还有救吗?看这个标题,就感觉是一篇焦虑文。好了,本草核儿今天的确

东南亚的博彩骗局,被房贷压垮的中国程序员,一个褪色的互联网黄金时代

当大国经济在经历互联网寒冬——程序员失业、就业承压时,一场魔幻的骗局正在东南亚加速发酵。这是一场针对中国程序员、针对走投无路的底层群众的骗局。利益链上的每个人都赚得盆满钵满,而榨取的,恰恰都是同胞的血

我是程序员,每一天都太难了!

互联网圈子里有一个神奇的群体——程序员。他们每天穿着格子衫,背着双肩包挤地铁,一到公司就陷入了“打代码-喝水-上厕所-打代码-喝水-上厕所”的死循环。热(jia)爱(ban)工(yan)作(zhong

5位女性程序员的自白:计算机不撒谎;女程序员的代码一样也很棒

谁说这个领域就是男性的天下偏见本身就是一种带标签的想法她们的世界里只信奉“computer never lies”她们认为代码漂亮比发型漂亮更重要她们到底是谁?谷悦是喜欢简单、纯粹工作的气质女神,八年

上市公司招聘 PHP 高级架构师, 负责公司资讯网站

薪资35-40k*14【职位介绍】负责公司资讯平台开发,管理后端小团队岗位职责:负责公司资讯平台开发,管理后端小团队 负责平台开发、测试和维护工作; 岗位要求:计算机专业5年以上PHP开发经验,熟悉m

上市公司招聘 PHP 高级架构师 (负责人)

薪资35-40k*14【职位介绍】负责公司资讯平台开发,管理后端小团队岗位职责:负责公司资讯平台开发,管理后端小团队 负责平台开发、测试和维护工作; 岗位要求:计算机专业5年以上PHP开发经验,熟悉m

架构师眼中的文化:试用期才是真正的考察时间

如果说架构师在技术上的沉淀称为“武”,那么对于文化的感知和影响、对于团队的带动和辅导、以及多角色沟通等可以称为“文”,文武兼备,才是好架构!管理风格团队是由个体组成的,管理风格往往能够显示出团队文化。

「模仿」是架构师的基本能力:守破离

本文作者曲健,1024生人,天选程序员,浆糊人送外号“大爷DàYé”,目前在奥琪科技担任首席架构师一职。二零一八留不住,朱颜辞镜花辞树。鄙人平素喜偶厌奇,以致现在对2019仍避之不及、兴致索然,更羞愧

Apache 的架构师们遵循的 30 条设计原则

本文作者叫Srinath,是一位科学家,软件架构师,也是一名在分布式系统上工作的程序员。 他是ApacheAxis2项目的联合创始人,也是ApacheSoftware基金会的成员。 他是WSO2流处理

阿里巴巴架构师:十问业务中台和我的答案

Photo@  ZachLucero文 |王思轩一切业务数据化,一切数据业务化。“中台”概念这几年非常火,特别是阿里、腾讯、百度、京东等互联网公司最近频繁的基于中台调整组织架构,把“中台”的热度又上升

你的公司是需要数据科学家还是数据工程师?差别有点大

越来越多的企业关注AI,企业组织也意识到拥有相关人才和技能非常重要。特别是最近对AI、机器学习(ML)、非ML预测分析和“大数据”的应用,使得数据科学家的需求有了显著的增长,未来还将继续。事实上,对数

职业规划指南:怎样才能成为软件工程师?

如果你想从事软件工程师方面的工作,但又不确定从何开始,这里有一些关于薪资、就业市场、技能和该领域常见面试问题的信息。美国“千禧一代”刚刚进入职场,他们中年龄最大的人进入职场时,美国的就业市场正好,雇主

IOS APP开发需要学什么知识和技能?

IOSAPP开发需求学什么学问和技艺?目前IOS系统的APP和Android系统的APP,是手机APP开发的两大主流。就拿IOS系统的APP开发来说,需求和安卓完整不同的开发言语和工具。本文着重来讨论

Udemy:人工智能是2020年职场最需要的技能之一

TensorFlow是过去三年中最受欢迎的技术技能,根据Udemy的数据在2016年至2019年之间呈指数增长。·除了Web开发框架,云计算和IT认证(包括AWS、CompTIA和Docker)之外,

2019 最新计算机技能排名出炉:Python 排第三,第一名是…

除了编程语言之外,要想找一份计算机相关的工作,还需要很多其他方面的技能。最近,来自美国求职公司Indeed的一份报告显示:在全美工作技能需求中,数据库语言SQL、编程语言Java分列前两位。虽然Pyt