对于这个标题可能很多人会不以为然,“我是一名程序员,做好编码工作就可以了”,“只要给我看了文档、或是说明了需求,我就可以直接用代码表达出结果来”。
现在企业的生产和管理需要用到信息化技术的地方越来越多,客户需求也越来越复杂,比如,为了快速地响应客户需求的变化,在系统架构时越来越多地用到“XX平台、XX中台等”的概念和设计方法,构建这些平台常常伴随着需要做大量的分析、抽提、建模、算法的工作,完成这些工作需要参与的人员不但能够理解业务需求、能做需求分析、设计,而且还必须要有开发经验丰富的程序员参与才能完成,研发这样的产品需要的是具有综合能力的人才。但在实际的工作中这样的人才很少,大多数的程序员即使是参与了也都做不了主角,因为他们不会做分析、更不会将头脑中的构思用图形表达出来,他们只能依据别人的文档资料进行编码。
未来需要分析与设计的工作对象还远远不止这些,比如还有物联网相关的设计、智能化设备的相关设计、以及各种各样的数字化的功能设计等,这些工作的重复内容少、创新内容多,对程序员来说难度和要求都远远地超出了开发企业管理系统的数据采集、分析报表等功能的工作。这就需要程序员也要学习和掌握一定的需求分析和设计能力,以适应未来的需求。从几个方面可以看到掌握与不掌握这些能力对程序员的影响。
1. 完成工作的难度不同
分析与设计能力,对完成工作难度的影响是决定性的,举个例子,我对不会做设计的程序员说,当面对用一维图形就能表达的简单需求时,你可以不借助纸和笔就在大脑中就完成“分析和设计”,然后直接敲代码给出结果。但是当需求很复杂,需要二维图形的表达,甚至是三维图形才能表达出来时,你能否在大脑中完成二维、或三维的分析和设计呢?如果你做不到,且又不会用笔和纸做分析和设计,那么你的开发实现能力也就到一维(的复杂度)为止了。
具有分析设计能力的人,一般都具有较强的思维逻辑、表达逻辑能力,因此他们完成工作的水平都要高出一层。越是复杂的课题,这个能力带来的效果就越明显。
2. 完成工作的效率不同
在缺乏分析和设计能力时,很多的程序员只能不断地采用“试错”的方式进行开发,要知道“试错”是需要成本的(时间、成本),而且不适用于规模大、架构复杂的系统,如果具有了一定水平的分析和设计能力,将分析与设计的成果在“纸上推演”,就会大幅度地减少开发成本、缩短开发周期。效率的高低同时也极为影响工作成果质量的高低。具有分析和设计能力的程序员,给出需求后,他可以快速地给出设计思路、方案图,短时间的沟通就可以达成统一、开发出成果来。特别是遇到复杂的、高价值系统时,产出的数量和质量完全不可同日而语。
3. 完成成果的价值不同
通过缜密的思考、设计后再开发出来的成果,毫无疑问具有很高的价值,比如:
- □对客户:由于进行了充分的分析和设计,所以获得的产品客户价值最高。
对软件商:最终交付物的质量高(bug率低、周期短、返工量少等),易于传递、交流、且具有很强的复用性。
□对个人:分析和设计的过程,是一个训练逻辑思维、逻辑表达、抽提、抽象、完善的过程,每一次的分析与设计都是一次训练、积累和提升。(照图开发不会有这样的价值)
4. 对未来职业规划的影响不同
没有打算掌握分析与设计能力的程序员,将只能沿着“员=匠”的道路走到职业的终点,难以成为“师”。相反具有分析和设计能力的程序员可以在职业道路上进行多次的升级换代,走入架构师、咨询师等不同的岗位,让自己每一步得到的收获,都能够成为下一步提升的垫脚石、跳板。
分析与设计的能力,直接赋予了程序员未来广泛的选择机会,它是伴随着从“程序员→架构师 → 咨询师”全过程的、不可或缺的基本能力。
楼梯的扶手,不论你走到那一层、也不论楼有多高,你都需要它为你引导、助力。
同理,不论是昨天的技术、今天的技术还是明天的技术,编码技术总会随着时间的变化而不停地变化和更新,但是分析与设计的基本思想和手法是不会变的,掌握了分析与设计的能力,就具有了逻辑思维和逻辑表达的基本能力,这个能力会使你终生受益。
从现在开始、从你手里做到这个项目开始,要求自己不论做什么,事前都要简单地分析、并用图表达,逐渐地养成习惯。优秀的程序员不但要能“用代码说话”、也要学会“用设计图说话”。
为了未来的职业发展,优秀的程序员一定要掌握分析与设计的能力!
■ 本系列的下一篇博文:程序员,与工程师的区别在哪里?(3)
提升分析和设计的能力,请参看《大话软件工程—需求分析与软件设计》。