程序员,与工程师的区别在哪里? (3)

这里不是从人力资源的岗位定义层面来探讨这两者的区别,而是要从广义的概念和能力上看两者的差距、补短板,让“程序员”们开阔眼界、扩展知识、更上一层楼。先和大家分享一个我在培训过程中的小插曲,在一次以程序员为主的分析与设计培训会上,我向学员们提了这样的问题:
□问:认为工程师的能力比程序员高一级的请举手,大家都举了手。
□问:认为自己是程序员的举左手,认为自己是工程师的举右手,结果大多数人举了左手,只有3个人举了右手。
□问:你们3人认为自己是工程师,请说明什么是工程、什么是工程师?程序员与工程师的区别是什么?结果这3个人马上就改为举左手了(全场大笑)。

这个小插曲说明了什么呢?首先是“程序员”与“工程师”的定义不清,其次,大家缺乏对自己的信心。关于称呼,在不同的软件公司中对写代码的人有称为“开发工程师”的、也有称为“程序员”的。这里暂定对“工程师(开发工程师的简称)”的要求高于“程序员”,提出几点对这两者的认知以及理想的工程师应该具有什么能力的参考意见。

一、两者的相同点
都能熟练地写代码,这是他们的相同之处。

二、两者的不同点

1. 工程师(理想、期望)
□理解何谓软件“工程”,知道完成软件的过程、交付物、标准等;
□能够从“系统、关联”的视角看研发对象,能从整体、架构上理解;
□遇到问题,会寻找解决问题的“共同方法”,比如抽提、梳理、建模;
□善于分析、并能够“用设计图说话”,用图形表达意图、逻辑;

2. 程序员(现状、不足)
□不理解何谓软件“工程”、也不清楚开发的过程,只知道与自己相关部分的内容;
□更容易从“代码、程序”的视角看研发对象,多从细节入手、思考;
□遇到问题,立即去寻找“具体做法”,比如上网查、复制;
□不善于做分析、用设计图表达自己的意图,缺乏逻辑意识,只会“用代码说话”;

三、两者不同点的分析

大致可以从下面三个视角看出来工程师优于程序员(不限于此):工程视角、系统视角、逻辑视角

1.工程视角
工程师理解软件实现过程的不同阶段、每个阶段需要的理论、方法、工具、交付物以及标准等。

2.系统视角
工程师研究对象时能够做到从整体到细节、由上到下、由粗到细,观察对象是按照从“系统→模块→功能→控件→程序”的顺序,具有综合多方面知识的能力(包括客户业务层面、软件技术层面)。

3.逻辑视角
工程师在研究课题时,可以通过分析、设计表达出自己的意图,具有很强的逻辑思考、逻辑表达的能力。

四、如何快速成长为工程师

明确了这些差距后,程序员该如何做才能快速地达到理想工程师的水平呢?除去靠个人的努力学习、花费时间积累以外,我还想向软件企业提一个建议:大学毕业生进入软件公司后的第一件工作不是写代码,而是去做需求调研的“学徒”,体验一次从需求调研到设计的全过程,这个过程可以帮助新学员理解什么是“工程、系统”,软件开发的依据是如何得到的,工程的每个阶段需要做什么,同时可以掌握一定的分析与设计方法。根据参与项目的规模不同,这个过程可能要花费2~3个月或更多一些时间,但这将会在未来大大缩短新入职者从“程序员→工程师”的距离和时间,早日成为公司的业务骨干。

■如果入职初期没有花费这个时间去对他们做启蒙,没有培养他们这个意识,很有可能过了5年甚至是10年之后,发现他们还站在“程序员”的原处,没有走向“工程师”的位置。

■如果入职后立即着手写代码的学员,可能长期处于对自己参与的开发内容“知其然,不知其所以然”的状态,所以长期都是做“小工”的。如果预先参与过了需求调研、分析和设计的学员,进入开发工作后则可以做到“知其然,也知其所以然”。不同对待的新入职学员工作一段时间后就会发生质的区别,后者成长得会更快。

从事建筑设计、制造设计的大学毕业生进入公司后的第一步是先下到工地/车间去实习,实习一段时间后再进入到设计岗位工作,通过实习看到了全生产过程,使得他们更加理解了什么是工程、系统的概念,这个过程的体验成果加速了他们的成长。

以上三条关于程序员的博文主要是想对从事编程工作的朋友提一些期望和建议,程序员是IT行业的基础力量,所谓35岁程序员的门槛是对人才的极大浪费,而造成这个浪费的原因之一就是程序员们只会编码,“太过专一”了!

如果能让“编码”和“创新”相关联,则程序员的价值就大增,但“编码”到“创新”之间需要一个过渡的桥梁,这个桥梁就是“分析与设计”的能力,有了这个能力程序员就可以永不转行。提升分析和设计的能力,可以参考《大话软件工程—需求分析与软件设计》。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lihognjun/article/details/109726012