我们来讲一个故事,一位旅行者路过一个烈日下的工地,所有人都在那儿汗流浃背地搬砖。
旅行者问第一个人在干什么,那人头也没抬地回答:“我在搬砖。”
旅行者问第二个人在干什么,这个匆匆抬起头认真地说:“我在砌墙。”
旅行者问第三个人在干什么的时候,那个人脸上充满了光彩,很自信地说:“我在盖圣玛利亚大教堂。”这个故事是不是像极了我们从事软件开发工作的不同阶段的不同状态。每当听到从程序员到架构师的书或者文章时,我们总是充满好奇,想从其中获取一些观点亦或是技能点,接下来我们就详细讲讲一下,如何从程序员走向架构师。
首先我们定一个基准点:架构师只是功底深厚的程序员,千万不要成为不会写代码的架构师。
架构师应该是立足于技术和业务之间的中间角色或者平衡点, 在针对业务深刻理解的基础上,针对业务中存在诸多变数,挑选适合的技术架构和技术方案。可以这样说,一个架构师工作的好坏决定了整个开发项目的成败。
开篇的基准点:架构师只是功底深厚的程序员;
程序员从初级、中级、高级再到架构师,是一个不断经验积累的过程,但是在这过程中我们常常很迷茫,不仅仅是面对技术繁杂的无力感,更重要的是因为长期埋没于代码世界的浩大的分工体系中,无法看清从业务到系统架构的价值链条,无法清楚定位自己在分工体系的位置,处理不好自身与技术、业务的关系所致。所以在程序员生涯中除了技术实力以外,其它软实力也不容忽视。如:主动学习、积累经验、控制注意力、超越自我。
卓越的程序员
对于一个卓越的程序员来说,编程技能毋庸置疑是很重要的。但是,除了基本的编程开发能力,其他方面的能力也是体现一个程序员的能力的很重要因素。比如,问题排查能力、线上运维能力、项目管理能力、协调沟通能力等。
我们先看IT市场对于一个不同阶段的程序员的要求:
职级要求
职位要求
初级开发工程师
- 综述:主动性,积极主动,能够主动了解相关业务需求,在上级的领导和监督下定期完成量化的工作要求;
- 项目管理:不需要项目管理的能力,具备管理简单模块开发任务的时间点。
- 开发语言技能及架构能力:1.能独立处理和解决所负责的任务;2.根据开发进度和任务分配,完成相应模块软件的设计、开发、编程任务;3.进行程序单元、功能的测试,查出软件存在的缺陷并保证其质量;
- 业务理解:1、根据产品需求PRD理解简单模块的业务流程,根据业务流程书写相应的开发流程,能够根据自己的理解评估模块开发的时间点。
- 影响:1、能影响同级开发人员,得到项目组认可。
职位要求
中级开发工程师
- 综述:独立性,根据项目具体要求、承担开发任务,按计划完成任务目标。
- 项目管理:具备有一定初级难度的项目(如链路较短\模块复杂较低\风险较小\发布周期不紧)的PM的经验和能力。
- 开发语言技能及架构能力:1、理解产品文档,参与需求评审、需求分析、系统设计;2、负责确保项目的进度和质量;3、整理和提交相关设计文档,对负责的功能模块有自测习惯;4、对所负责的模块有维护责任,有问题及时解决。
- 业务理解:1、熟悉自己负责的业务模块,对业务模块的流程有独立的思考,产品设计时能给出合理有效的方案建议;
- 影响:1、能影响项目的成员,是团队内公认的主力成员之一;2、加分项:有良好的分享习惯。
职位要求
高级开发工程师
- 综述:自主性,独当一面,能独立主导和推动项目及任务,在专业领域具备辅导他人的能力
- 项目管理:具备有一定中等复杂度的项目(如链路较长、模块复杂度较高、风险较大、发布周期较紧、技术驱动等)的PM经验和能力。
- 开发语言技能及架构能力:1、能独立解决问题,能够负责重要业务模块的需求分析及设计实现。2、熟悉设计原则,能够在日常编码工作中恰当使用,优化原有设计(有实例支撑);3、熟悉编程语言、编码规范、安全规范,具备性能意识,代码具备高可读性;4、了解常用框架背后的原理。
- 业务理解:1、熟悉自己直接负责的业务,对业务产品具有独立沟通,完善业务需求;并识别方案的风险能力;关注自己参与项目的业务数据;2、能够在所负责的业务及产品上有独立的见解,能提出合理的建议,更有效的解决业务问题;
- 影响:1、能影响项目组或产品线的成员,是项目组或产品线公认的主力人员;范围:团队内。2、加分项:具备辅导他人的能力和技能,有良好的分享习惯。