引言
就程序员而言,日后的职业发展可以走3个方向:专攻技术深度、转团队管理、晋升架构师。
我相信成为一名优秀的架构师,是大多数技术人的追求。但资深架构师的出现几率仅约为0.3%,如果想在3-5年后稳坐金字塔尖,除了扎实的代码功底和项目积累,如何有意识地培养技术广度和架构思维能力,是你当下应该付出更多精力的。习惯了架构思维,你可以从更高的层次、更高的角度去思考你现在做的事情,做出更正确的决定。
北城码农邀请到前阿里技术专家李智慧老师聊聊他的架构师成长经历和思考。
如果你有以下三个疑问,建议花5分钟通读。
1.什么样的人适合做架构师?转行的人有戏吗?
2.架构思维在工作中有什么作用?懂架构是不是就万事大吉了?
3.架构的核心思想都有哪些?
嘉宾介绍
李智慧,曾任阿里巴巴技术专家,Intel大数据架构师,拥有20多年编程与架构经验;设计开发过阿里巴巴的分布式存储系统Doris、阿里巴巴印度站、基于Hadoop的大数据仓库Panthera等;参与过Apache Spark的开源开发,对Spark架构代码进行过多处优化。有5项分布式系统发明专利;是畅销技术书《大型网站技术架构:核心原理与案例分析》的作者,该书被若干高校选为计算机类专业教材;更是各大技术峰会的常邀嘉宾。
以下为专访内容整理
▼
IT君:您是如何走上技术这条路的呢?还记得拿到第一个Offer的场景吗?
李老师:我大学不是学计算机,但是在学校里第一次学软件编程的时候,我就有一种似曾相识的感觉,感觉和编程有某种缘分,这种感觉时隔多年,我依然能够回忆起来,我觉得,对于编程,我可能是有一点天分的。但是当时懵懵懂懂,也并没有太多的思考和规划,第一份工作是在一家国营企业做电工。
工作两年以后,有一次陪一个朋友去当地人才市场,看到有家公司展台前面冷冷清清,过去聊了两句,原来在招程序员,对20年前一个内蒙古小城而言,程序员绝对是一个新鲜事物,难怪冷清。我试着和面试官聊了两句,可能他们实在是找不到人,虽然我既没有编程经验,又不是学计算机,但是他们还是对我表示了极大的兴趣。对我而言,最有兴趣的是,他们开出的薪水条件要比我当时的薪水高好几倍。
可能他们实在是拿不准要不要录用一个电工做程序员,最后给我提了一个要求,让我在一周之内,用Delphi写一个仓库管理软件。以前我在学校学过汇编语言,后来自学过C语言,Delphi语言还是第一次听说。离开人才市场就去书店买了一本Delphi编程的书,用一天时间把书看完,又借朋友的电脑用两三天的时间把软件写出来,就这样从一个电工走上了软件技术之路。
现在回想这段经历,最大的感受是很多机会都是你毫无准备的时候来临,并且不会给你太久的时间去证明自己。如果你故步自封,或者被惰性牵制没有去突破,那机会就会离你远去了,你又进入了另一个轨道重复的等待机会。
IT君:后来您的职场是如何发展的?给大家介绍一下您的成长里程碑。
李老师:在前面这家公司工作了近两年,开发企业管理软件,主要逻辑就是对数据库增删改查。时间一长,就觉得没有挑战,枯燥无聊,比在国营企业还无聊。但是怎么脱离这种困境?
当时想去北京试试机会,但是了解了一些情况以后,觉得去北京也是做一样的事情,只是换了个地点,工作本身并没有什么改变。于是最后决定报考计算机专业的研究生,提高自己的知识水平,再去寻找更好的工作机会。
我当时报考的是北京工业大学人工智能专业,复试的时候却通知我被调剂到汽车专业了。于是就读了三年汽车专业硕士,毕业的时候才发现,汽车行业就业情况很不乐观,薪水还不如我三年前在内蒙古做程序员的水平,(这里给大家提个醒,选对行业至关重要)就试着投了几个软件开发的职位,很快收到几个offer,薪水也非常满意,于是继续去做程序员。
当时是在方正做一个对日外包项目,这是一个10亿日元的合同,方正专门成立了一个部门做这个项目,由于项目比较重要,部门里几个高手都被派往日本客户现场,国内则是包括我在内几个新招来的人,大家都对这个项目一知半解。
当客户对系统整体架构提出了一些要求,我仔细研究了这些要求后,就很主动去找项目总监问:这些架构需要一些框架和工具支撑,业界似乎没有满足要求的技术方案,我们打算怎么做?项目总监看了我一眼说,那就你来做吧。
于是我就在没有任何准备和经验的情况下,成了这个项目的架构师,带领其他几个新同事开发了一套符合客户要求的技术框架。后来部门的高手从日本回来,部门也扩大到近两百人,虽然这个技术框架并不完美,有各种问题,但是大家没得选择,只能基于这个框架开发整个系统。开发过程中遇到重要的技术问题,都要过来找我讨论,遇到跨层次,跨模块的技术决策,则必须要我拍板后才能统一执行。
这次主动研究和“临危受命”的经历,让我第一次体验到做架构的乐趣,通过技术手段影响项目和团队,使自己的技术审美体现在系统的各个方面,将自己的技术倾向和技术理念渗透到团队所有工程师的意识当中,并由此而引导项目走向成功。
现在看来,当时自己的技术水平比较局限,开发的框架也有不少问题。但是就是在那个时候,我顿悟了关于架构的自我意识,关于技术的作用力,关于技术管理的思想。虽然后来我获得了更多关于技术能力的提升,但是在架构的思想上,我并没有太多超越十几年前的自己。后来看了一些架构方面的书,遇到一些优秀的架构师,恕我愚钝,至少在架构的本质思想上,似乎也没有超越这个高度。
IT君:您现在作为CTO或者首席架构师的角色,站在这个高度,最大的挑战是什么,对自己还有什么要求?
李老师:我面临的最大的挑战是如何创新,如何超越自己。
我有一个悲观的理论:任何奋斗的人,都将以失败结束他的奋斗史。这句话听起来很主观,事实上是可以证明的:一个人如果通过努力获得成功,他必将继续努力以期获得更大的成功。但是人必然有自身的局限,而历史又有他自身的进程,随着成功难度的不断提高,普通人将会触及他个人能力的天花板,而最杰出的人将会触及历史进程的天花板,最终所有努力奋斗的人都将遭遇到最终的失败,越是不甘心,越是失败到怀疑人生。
大概在五六年前我意识这一点后,我就不再单纯的追求成功,不再追求更高的职位,更高的薪水,甚至不再追求事业的成功,因为我自身的能力水平如果就是这样一个高度,那么我越快的得到这些成功,我就越是接近最终的失败。我更关注的是,在当下的事情中,我如何获得更高的能力提升,如何提升我能力的天花板,以推迟我最终失败的到来。
而提升自己唯一的手段就是不断地创新,创新似乎是一件高风险的事,很容易失败。但是这些失败都不是最终的失败,对于创新者而言,不管是否失败,都将对世界和自我获得新的认知,将自身的天花板抬高了一点点。
但是不管如何,人的体力、精力、意志力都有尽头,终会有一天连创新也创不动了,我将会坦然面对那一天,而在此之前,我将乐此不疲地和自己玩一个猜谜游戏:下一个提升我天花板的事情在哪里?
IT君:您曾在阿里任技术专家,带过的项目非常多,可以给大家分享一次印象最深或收获最大的项目吗?
李老师:在加入阿里巴巴第二年的时候,因为前面工作比较出色,我被安排参与另一个部门的一个重要项目,担任这个项目的架构师。
我在阿里巴巴之前并没有互联网的经验,加入阿里巴巴第一年做的也是通用的技术框架,和互联网应用关系不大。刚加入项目组的时候,项目成员对我报以极高的期望,我自己也感觉良好,做了一个庞大而浮夸的规划,在项目启动会上慷慨陈词,博得一片掌声。
但是很快,由于对互联网产品业务和技术方案都缺乏足够的经验,我发现自己根本无法驾驭系统的技术方向。不过当时我已经骑虎难下,为了解决问题,我引入了更加复杂的技术方案,却使整个局面更加失控。这时候公司也看出我能力不足,安排了另一个架构师进入项目,他加入项目组后,很快就扭转了局面,项目步入正轨,而我则黯然退场。
此后大半年的时间我都夹着尾巴做人,低调的做一些具体的开发工作,同时大量学习互联网相关的技术和业务,特别是公司内的项目代码和文档。后来又成功做了几个项目,重新赢得了同事的尊重。
这次项目经历让我深刻的意识到:架构师是技术团队的研发核心,掌控着项目技术发展的方向。后来在其他一些地方我也看到一些陷入泥潭的项目,原因和现象多种多样,但是有一个就是:架构师失去了对项目的技术掌控,架构师自己也迷失在项目之中。
IT君:您认为架构设计的核心思想都有哪些?实践中需要注意什么?
李老师:所谓架构就是整体与部分的关系、以及关键细节的设计。架构的核心思想即是如何把握整体与部分的关系,如何设计关键的细节。但是架构是无一定之规的,即使是同样的需求,在不同的场景之中,都会有不同的难点、重点、关键点。不同的架构师会有不同的理解,甚至同一个架构师在不同的时间也会有不同的理解,进而产生出千差万别的架构设计。
实践中,架构师一定要把握住问题的关键,一定要找到一个可以牵一发而动全身的关键点,在软件设计和开发过程中,只要把握住这个关键点,就可以驱动项目和团队向既定的目标前进。相反,如果架构师找不到关键点,眉毛胡子一把抓,迟早会迷失在各种问题和复杂的关系之中。
据说乔布斯有一种能力叫做“扭曲现实力场”,表面上看这是一种现场表现能力,其实背后的本质是重新定义问题的能力。任何问题都有多个方面,大多数人只能看到一面,乔布斯可以看到问题的其他面,甚至是它的反面。不管是问题的那一面,其实都是问题本质的呈现,反映了问题的本质特征。
当乔布斯用人们从来没想到过的视角,向他们展现问题的反面的时候,他们会觉得事物似乎变得跟以前不一样了,一切都有点光怪陆离,现实被扭曲了。从问题的反面解决问题,解决方法和路径也会完全不同,所有参与的人也都会因此而受益。
架构师在技术领域也需要拥有这种扭曲现实力场,看到其他人看不到的问题的另一面,从一个不同的视角把握住问题的关键,带领项目走向成功。
IT君:谢谢李老师的分享!
李老师在专访的最后建议:每位软件工程师都应有自己的职业规划。对技术人来说,软件架构师就是一个很不错的职业方向。你可能会问:那么应该如何成为软件架构师?需要巩固强化哪些知识点呢?建议你先从了解架构开始,多尝试用架构思维考虑和解决问题,在实践中练习做架构,最终成为架构师。
李智慧的《阿里前辈的架构经》新课首发!详情点此查看