我总结了3个阶段。
先说一下各个阶段的感受:
1、系统架构阶段:
系统架构实际上包括了 业务功能架构 和 技术功能架构。
业务上,其实有点接近于产品,但是有些问题是与技术强相关的,产品不懂技术,他的设计就存在问题或者隐患,这时候,一个技术功底好的又有丰富业务系统开发经验的人,就能将这些功能设计得更好。这就是我说的“业务功能架构”。
而技术架构,与开发功能、写代码,都息息相关,特别是在系统整体框架层面,以及开发重难点功能的时候,好的技术手段、算法,能够开发出更好的功能实现,包括可维护性、性能、稳定性、用户体验等等方面。
这个阶段,我经历特别多,大概有3年半的时间(但算上加班时间,相当于5年以上时间),不一一细讲。总之,这个阶段负责了很多个的项目,包括工程、代码管理,重难点功能的设计实现等。
系统架构师的能力,决定了做出来的系统的好坏和质量。
2、框架和中间件架构阶段:
这个阶段,不直接面向具体项目,更多的是针对工具、框架、平台和中间件层面,针对技术规范和难点,站在技术专家的角度思考和设计。
这个阶段的架构师,眼里都是技术细节,以及框架和中间件的代码设计,有非常多的标准(开发效率、可维护性、可扩展性、性能、稳定性等),基本上可以说是完美主义者,对平台设计有非常大的追求。亦或是,捣鼓各种技术和工具,不停测试、对比,整天安装这样、安装那样——不是运维,胜过运维,不是测试,胜过测试。
在这个阶段,对技术的要求近乎苛刻,而且还要跨多个技术领域(后端、前端、运维、网络...),所以面临的挑战很大,要学习的新东西也太多太多。一直到今天,我在这个方面也不敢说做得多好,只能说,算是熟手了,见多识广了,有信心了,再复杂、再高端的东西,我不怕了,但是如果要做到业界一流水准,还是相当困难的。
这个阶段,要做的事情,全都是和技术相关的,举几个例子吧:
负责公司基础框架及组件选型及维护、二次开发
分布式存储的选型、推广、运维支持
容器云平台的搭建、优化和推广
监控平台的设计和搭建
Kafka、Redis的多机房数据同步方案
……
做到这个阶段,通常会被称为“高级架构”、“大架构”,做的事情往往能反映出公司的技术水平。但不是人人都能做这些事情,即便是非常有天赋的工程师,在这个阶段也需要长时间的沉淀,才能称之为专业架构。
所以说,很多公司,在这方面是很不专业的,甚至没有全职的架构师来牵头做这些事情。
3、公司总体架构阶段
这个阶段,更多的是方法论和策略,决策以及沟通,跟踪执行。在这个阶段,眼中没有技术细节。眼中有的,是整个公司,整个研发团队的效率和质量。一切都是围绕研发团队来的,要给研发团队指引正确的方向。
比如说,用什么工具,用什么框架,用什么技术,流程怎么设计,规范怎么设计,遇到问题怎么解决,怎么提高效率,怎么避免风险。不是每件事情,都得你亲自去做,甚至都不用太关注细节,但是你得有一个正确的方向和长远的眼光,去指引和决策。
其实最难的是,技术、规范和流程的推广和落地实施,因为这些事情,可能涉及到很多部门、很多人,有的时候会遇到利益冲突,有的时候遇到特殊情况,有的时候遇到某些团队只顾眼前。这个时候,需要权力、决策能力和执行能力,还需要一定策略和技巧。
总结:
作为一个系统架构师,系统没设计好,是你的责任;
作为一个基础技术架构师,基础组件/框架/中间件有问题,是你的责任;
作为一个公司总体架构师,研发团队效率低、风险高,是你的责任。
个人经验:
中小型的项目,系统是很好控制的;
基础框架/中间件,难度可能比较大,但是如果技术能力强,也能hold得住;
面对整个研发体系的团队,各种人各种事,不太好控制,需要策略,需要转变技术思维。
所以:
领导5个重点项目,可以培养一个系统架构师;
5年以上技术经验,兼3年以上框架/中间件相关经验,如果技术确实很好,可以成为技术架构师;
5年以上基层技术和管理经验,3个以上公司总体架构经验,有方法、有策略、有能力,可以成为技术总监;
重点解释:
多数人工作经验丰富后,都可以成为系统架构师;
但是只有 少数人 能成为合格的技术架构师,这个得看天分,就像有人数学随便能考140分一样;
没有丰富的项目管理经验、没有出色的技术天赋和全面的架构能力和实践经验,无法胜任技术总监(或研发团队老总)。我见过很多研发老总都是“偏科的”:有的做过一些项目,但技术能力和架构经验严重不足;有的项目经验很少,虽技术精通一两项但不全面。这些偏科的人,大多数情商较高,但技术能力和架构经验不足。
反过来,理论上还有一类人,技术和架构经验很强,但是总体领导和管理能力偏弱。但至今我还没有遇到这样的人,侧面也说明了:真正牛逼的技术人才,在二线互联网企业,是很难出头的,以至于他们很难走上管理岗位。我愿意相信,技术牛逼的人,做管理也不会差,但是他们可能不愿意去适应复杂的政治环境。
最后
引申出技术人员的一个疑问:未来该如何发展?
至少有四条路:
第一条路,钻研高精尖的技术,去一线大公司做事,尽量不要去二线城市、二流公司。年薪百万不是问题。
第二条路,做个系统架构师或项目经理,最好是在某一行业和业务领域深耕,成为技术业务专家,运气好的话可以做到部门经理、分子公司总经理。
第三条路,全面发展,从项目管理、技术架构做起,积累丰富的研发经验,进而成为技术主管、技术总监、部门经理、技术副总等,分管整个研发团队。
第四条路,突出的技术能力 + 敏锐的商业嗅觉,成为 独立开发者、创业者。
结合我十余年的工作经验(一二三线城市都待过,具备完整的架构经验),下面说一些想法和建议:
第一、二条路,其实是最简单的。但是走第一条路,在二三线城市、二流公司是很难发展的(打个比方,你在二线城市二三流公司从P4干到P7,8年到专家,年薪达到30万,而你同学在一线城市一二流公司同样8年从P4到P7,年薪却高达100万),而且一旦你走到专家以上的位置后,在二三线城市找工作就几乎绝望了。我就是因为走第一条路,在二线城市,越走越慢、越走越窄,又不愿拖家带口去一线城市一流公司,只能被迫走第三四条路。
第二条路,选中一个细分行业、甚至细分领域,例如金融(金融里面又分很多领域,比如支付、风控)、电商(又分2B、2C等)、细分行业比如能源、交通、物联网等,在某一行业和业务领域深耕,成为技术业务专家。我因为走了第一条路,经常换公司、换行业,所以无缘第二条路,但是我身边有部分人一直在某个领域,有些还混得不错。但这条路就业面可能会比较窄,而且也算不上多尖端的专业,这样子越窄就越卷,挣扎都没用,好多人找个好点的公司就躺平了。
第三条路,比较难,要走第三条,你得把第一条、第二条路都走一下(不用走得太远,三五年为宜),然后关键看你的口才、文笔、见识、格局、交际能力、管理能力等综合能力。像我这种在第一二条路上耗费了100%精力,最后走无可走了才转向第三条路的,实属无奈,要面临较大的损失、压力和风险。
第四条路,更难,难在很难做大做强,养家糊口可能没问题,但是谁愿意承受不可承受的风险?除非家境允许或者有冒险精神。像我是非常热爱工作,也有创业创新的思维,但是我很难承受风险,我现在努力工作的目标,不是为了大富大贵,就是为了降低生存风险:最开始只是想解决温饱(有个小房子、付得起首付、还得起贷款),后来想努力达到小康(在城市中养得起车、养得起女儿、吃得上花生油、付得起普通的医药费),最终希望成为中产(有一点积蓄,一百来万,能应对较大的生病和意外就行了),现在勉强达到了小康,但还是负资产,希望10年后能有一两百万的正资产就心满意足了。
其实,专业技术人员的路,哪怕十年、二十年都只做个高级程序员,当不上经理也做不了架构师,也很好了,相对于其他很多行业来说,还算是比较好的出路。每天开心一点、身体健康一点、家庭和睦一点,比有百万资产更重要。
不是人人都能成为架构师、成为经理,其中吃的苦,也不是一般人能承受。知名架构师冰河,90后,出版了3本书,工作几年来,几乎全年无休,五一、国庆、春节都搭上,晚上9点后还在写文章、写代码,期间父亲还患病去世了。IT培训界的先驱,传智播客创始人张孝祥老师,从C/C++,到PHP、Java,再到Android,亲手培训了众多高薪程序员,并且很多教程向大众公开,最终自己累到在一线,享年38岁。我以前的一个同事,比我大一岁,工作4年就成了研发部门经理,管一百多人,有一次领导及客户过来,他带上几个骨干去陪同,我等不胜酒力,几乎是他一人陪东北的客人喝到结束,客人走后他才倒下,我们抬着他回去的。