目录
一、前言
第一个问题:什么是架构师?
小团队一般 10 人左右,其中常常是技术最牛的人做架构师(或TL)。所以,架构师在广大码农中的占比大概平均不到 10%。而架构师也可以分为初级、中级、高级三档,江湖上真正高水平的软件架构师就更少了。
所以,大部分(超过九成的)开发干上许多年,还是做不了架构师,这是什么原因造成的呢?
1:码农分为真的能写代码的,以及自认为能写代码的。
2:真的能写代码的码农又分为自认为写的不错的,以及真的还不错的。
3:真的能写不错代码的码农又分为会钻研会不断优化的,以及安于现状的。
4:会钻研的码农又分为喜欢广度了解新技术蜻蜓点水的,以及深入钻研用到知识的。
了解广度的码农又有少部分愿意深入某些技术,喜欢深入研究的又往往缺乏广度知识。
5:极少深度广度都关注的码农又分为为技术而技术和为业务而技术的。
纯为技术而技术的码农在国内的软件行业需求太少,且需求的往往不是应用软件领域了。
6:为业务而技术的深度广度都了解的码农,又需要有良好的沟通能力。
7:而沟通好的,又有一部分当PM去了。
8:然后剩下的,又有一部分慢慢脱离实际开发(不再做任何实现)或者开始依靠拿各种中间件搭积木来作为“架构”手段。
9:除去这些,剩下对业务有一定了解,对技术广度上有多种涉猎,深度上对部分技术研究彻底,还有很重要的一点,考虑问题足够细致全面。
10:细致全面善于沟通,技术上深度广度都没问题, 又喜欢这个工作,还会不时做底层实现,从业务和开发两个角度出发,搭出“架构”来是为了开发效率,为了运行效率,为了开发质量,为了业务灵活和运行稳定,为了维护方便等等这样的人,个人认为可以称为“架构师”。
第二个问题:技术的深度和广度哪个更重要?
都重要,优先到T型人才,如xxx开发专家,然后增加广度的同时,拓宽其他深度,满足达M型人才要求,如架构师/CTO,具备全局规划能力。
再看一个架构师岗位相关的JD信息
工作目标:
1. 参与产品评估,功能规划和讨论,并根据项目需求进行实施和发布。
2. 参与审查开发过程,估算人员计划,协助控制开发成本,确定开发标准和绩效要求。
3. 负责需求的分析、系统体系结构的设计和实施,并主要负责代码的质量。
4. 负责架构问题的分析和解决,以及安卓系统的优化和稳定性维护。
5. 负责向客户解释该软件的核心功能。为其他部门提供技术指导。向开发人员解释专业知识。
6. 研究和开发新技术,以满足智能驾驶舱产品需求的迭代更新。
岗位职责:
1. Android设备系统软件架构设计;
2. 跨平台移植、解耦及兼容工作的方案设计;
3. 核心功能的架构评审;
4.Android前沿技术跟踪与推广;
5.解决疑难问题并形成技术积累,提升团队整体技术能力
任职要求:
1. 本科以上学历,八年以上Android开发经验;五年以上Android系统或Framework相关工作经验;
2. 具有扎实的C/C++、Java语言及数据结构基础。
3.精通Android开发平台框架原理,精通Android应用及系统开发流程;
4.掌握通用的设计原则和常用的设计模式,理解Android模块化和API设计思路;
5. 思路清晰,思维敏捷,快速的学习能力,责任心强,善于沟通和团队合作精神
从上面的工作目标看,架构师是软件开发组织中一个比较特殊的角色,除了架构设计,软件开发等技术类工作,通常还需要承担一些管理职能:规划产品路线、估算人力资源和时间资源、安排人员职责分工,确定计划里程碑点、指导工程师工作、过程风险评估与控制等。还需要和项目组内外各种角色沟通协调,可以说架构师相当多的时间用在和人打交道上。处理好人的关系对架构和项目的成功至关重要。
二、架构师领导艺术
2.1 关注人而不是产品
发掘项目组每个成员的优秀潜能,让大家理解并热爱软件产品最终的蓝图和愿景。每个人都是为实现自我价值而努力,不是为了领工资而工作。
这也是领导的真谛:寻找一个值得共同奋斗的目标,营造一个让大家都能最大限度发挥自我价值的工作氛围。没有懒惰的员工,只有没被激发出来的激情。所有强迫员工加班的管理者都应该为自己的无能而羞愧。
2.2 发掘人的优秀
指望优秀的人来帮自己成事,不如做成一件事让自己和参与的人都变得优秀。
后来,这个同学不但找到了这个功能的开源实现,阅读了文档和代码,还针对我们项目的需求场景对代码做了优化,然后又将这些优化的代码提交给开源项目的作者,最后被合并到开源项目中。
大多数人,包括我们自己,都比自己以为的更优秀,有些优秀需要在合适的环境中才会被激发出来,比如做一些有挑战的事,和更优秀的人合作,抑或拥有了超越自我的勇气。
2.3 共享美好蓝图
蓝图应该是表述清楚的
蓝图应该是形象的
蓝图应该是简单的
2.4 共同参与架构
不要只有架构师一个人拥有架构
让其他人维护框架与架构文档
2.5 学会妥协
不要企图在项目中证明自己是正确的,一定要记住,你是来做软件的,不是来当老大的。所以不要企图去证明自己了不起,永远也别干这种浪费时间、伤害感情的事。
架构师不应该对意见过于敏感,这时架构师应该做的是坦率地分享自己的设计思路,让别人理解自己的想法并努力理解别人的想法,求同存异。
对于技术细节的争论应该立即验证而不是继续讨论,当讨论深入到技术细节的时候也意味着问题已经收敛,对于整体架构设计,各方意见正趋于一致。
2.6 成就他人
架构师作为团队的技术领导者,在项目过程中不要去试图控制什么,带着一个弹性的计划和蓝图推进,团队会管好他们自己。