我们经常谈到程序员的职业规划,大体分两个方向:
我周边的经历,程序员向TL方向发展的占多数,毕竟多数企业更注重直接的业务价值,需要既懂业务又懂技术,一般发展的也比较好。另一个方向【架构师】,应该是每个程序员入行时都梦想的岗位,能成为真正的架构师其实挺难的,自己技术过硬同时也要有技术广度和前瞻性、有影响力能让人信服。
我在阿里就职的几年里,毕玄(阿里HSF作者,架构师,主导设计阿里电商异地多活架构,阿里统一资源调度)是我认为阿里最为优秀的架构师,结合毕玄之前的分享,这里简单总结一下如何才能成为一名优秀的架构师。
计算机是工程科学,技术高低能明显的体现出来,老话讲“文无第一,武无第二”,技术好是立身之本。计算机技术是划分很细的,有前端、后端、底层技术,要了解网络架构、网络协议、编程语言、编程框架、中间件技术、操作系统内核、甚至硬件。领域的知识宽度是非常重要的,意味着能做多大范围的事,判断能力会体现出,在有限的资源和时间情况下取舍是怎么做的,对未来是怎么做铺垫的,以及TA对事情的技术控制能力,一个好的架构师在技术风险的控制能力上必须是非常强的。
比如一个需求可能有多种技术方案,如果架构师技术宽度不够,可能明明有一个简单成熟的方案,但由于不知道而做了其他复杂不成熟的方案,另外架构师不可能全部擅长,在自己不擅长的点上,需要知道找哪个专业的人是靠谱的,这点非常重要。
架构师做方案之前,首先要充分理解业务,基于对业务的理解来设计系统架构。同时对未来趋势有预判能力,当未来发生时,对系统冲击有多大、成本多高,并为此留有扩展性。所以,架构师要对行业发展趋势有一定敏感度,甚至能驱动商业发展。好的架构和不好的架构,短时间看不出来,但拉长时间看,差异是巨大的,这也是跟多系统过不了多长时间就需要大规模重构的原因。
很多企业内部的架构师,和客户聊聊需求,写个PPT都交给技术团队做了,被认为什么都不懂、只会动嘴不干活。架构师的影响力一定是来源于对系统的深刻理解和对细节的把握,线上问题能第一个冲锋陷阵,带领团队快速处理解决问题或帮助理清思路,才是一个合格的架构师。要参与系统核心代码的编写,不要纸上谈兵。
当然,一个大型系统,架构师不太可能什么都擅长,这种时候架构师一定要能判断是不是自己的专长,确保实现是符合架构设计预期的。可能的情况下,全程参与。
权衡其实是利用上边所有能力的决策过程,通常架构师需要结合对业务的理解和预判、技术方案的选择和实现成本、面临的风险和收益、团队的能力等因素,选择性价比最优的方案,可能并不完美,但是目前可以选择的最佳方案。
节奏把握,业务发展到什么阶段,在什么时间需要做什么。技术第一个阶段目标是什么,解决什么问题,什么事情虽然重要,但要放在第二期做,原因是什么。回答了这些问题,才是一个合格的架构师。