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

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

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

二、两者的不同点

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

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

三、两者不同点的分析

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

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

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

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

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

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

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

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

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

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

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

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

  1. 杂谈|程序员还是工程师

    做一名开发者,我们经常会有一些 Title,比如前端/后端/大数据工程师等.但是一般自我介绍时,都会说我是程序员,而不是工程师,程序员和工程师其实大部分时间大部分人是混着用的,这两者之间没有区别吗? ...

  2. 程序员和工程师有什么不一样?

    程序员和工程师有什么不一样? http://www.oschina.net/news/66795/what-is-different-between-programmers-and-engineers ...

  3. 软件工程师和程序员到底有什么区别?

    有些人说程序员主要是指写代码的人,而工程师着重在于设计. 有些人说程序员和软件工程师的区别是:软件工程师不但要有编写程序代码的能力而且更重要的是要懂得如何去开发一个软件,怎样去学习实际的UI的观念. ...

  4. 除了秃顶,你和程序员大佬还有啥区别?

    一.你和大佬的区别 1.没有编程思想 或许很多人觉得很扯,但确实是这样的. 高级程序员在看到一个需求的时候,总是能够快速在大脑里生成这个需求在现实生活中的映射.每当产品经理提一个需求的时候,高级程序员 ...

  5. 盘点那些年BAT字节跳动等互联网公司的程序员、工程师一夜暴富的都市传说

    12年前的春天,红杉中国在京郊召开年会,沈南鹏将主题定为"Mobile Only". 123BOM硬件工程师电子工程师 前一年,为了在金融危机中拉动内需,决策层提前发放3G牌照,三 ...

  6. 谷歌老程序员的补丁和中国中年程序员的焦虑,区别到底在哪?

    小编推荐:Fundebug提供JS错误监控.微信小程序错误监控.微信小游戏错误监控,Node.j错误监控和Java错误监控.真的是一个很好用的错误监控费服务,众多大佬公司都在使用. 现年 64 岁的 ...

  7. 专科程序员与本科程序员之间有什么区别?薪资待遇差多少?

    近日,一名程序员在互联网社区的吐槽:公司一个应届毕业生,领导安排和我一起做项目,提交的代码有许多不合适的地方,我在没有和他提前沟通的情况下做了部分重构,结果直接喷我,让我不要改他的代码,老哥们,遇到过 ...

  8. 跨行成为一名程序员必备这5步,从程序员到工程师!

    你就是个零基础 那么你就要了解什么是编程:用来干什么:编程的历史是怎么发展至今的: 1 学习html,css,js 从事前端,这三个够你学一段时间了,从事后端,那么你简单的学习下就好,主要是试试你学I ...

  9. 每日一皮:程序员和黑客的区别

    往期推荐 每日一皮:唯一的编码思想! 每日一皮:项目开发停在了最后10%的效果... 每日一皮:阅读软件许可协议让你想到了什么? 每日一皮:我当程序员的时候也是... 每日一皮:为什么在生产环境操作要 ...

  10. 盘点黑客与程序员的十大区别

    1.黑客是程序员的子集. 2.程序员在解决那些原先已经被解决过的问题.而黑客通常是在尝试解决一些新的问题. 3.程序员是一种职业,而黑客是一种兴趣. 4.程序员的工作有很多限制,而黑客可以尽情发挥. ...

最新文章

  1. 一个普通大学生的经历
  2. 数据库系统实现 第六章 查询执行
  3. 从对我的质疑说起,谈谈Linux下的文件删除
  4. MySQL查询语句后面加上“\G”,提示 ERROR: No query specified
  5. python换循环颜色_python – 增加matplotlib颜色循环
  6. 解决statsmodels报错ValueError: Pandas data cast to numpy dtype of object.
  7. 计算机专业课如何阅卷,全国计算机等级考试评卷老师是如何阅卷的?
  8. 快递小哥逆袭自传:用了6年时间做到了IT部门主管
  9. hdmi接口线_终于有人能把HDMI和VGA的5大区别讲全了,网友:讲得真详细
  10. 计算机网络——数据从网卡到应用的过程
  11. 晶体晶振小结(XTAL与TCXO/VCXO/VC-OCXO等)
  12. .博弈论之Best Response
  13. 图像处理_彩色图像处理_推导产生一幅彩色图像的补色的CMY变换
  14. 四五百蓝牙耳机哪个好?500元以内音质最好的蓝牙耳机
  15. 用户输入一个整数,求出它的各个位数,并求各位数之和
  16. [codeforces 1379B] Dubious Cyrpto 公式推导
  17. 2018年7月20日日报
  18. Qemu连接外网的配置方法
  19. 打开netlogo model 出现failed to launch JVM
  20. offsetof 详解

热门文章

  1. python 多功能下载网页
  2. 课时40:类与对象:一些相关的BIF
  3. python 字典练习 记录学生是否交作业的小程序
  4. Mybatis学习总结(二)——Mapper代理开发
  5. (mac)阿里云ECS服务器配置过程
  6. 程序一旦发觉写得不理想,那就得重构它
  7. noi 2009 二叉查找树 动态规划
  8. 使用简单的5个步骤设置 Web服务器集群
  9. 如何获取系统的临时目录路径?
  10. matlab气相分解反应动力学,第十二章 化学动力学.ppt