开发者和程序员是否存在区别?

2020-04-15 · 树下魅狐 · · 本文共3,076个字,预计阅读需要15分钟。

在客观世界中,有很多事物存在非黑即白,我们很容易去区分。例如女人与男人,老虎与狮子,汽车与自行车等等,但对于众多IT从业人员,外界的人们很难一下找出他们之间的区别。提出此问题,目的在于从外界和IT人员自身的角度去探讨开发者和程序员之间的差异和关联,为想要踏入IT行业的求职者和企业招聘者提供一些个人的看法。

也许你会觉得该问题会很搞笑,不管是开发者还是程序员他们都是程序员,就像男人和女人都是人(你也可以说都是动物)。首先,开发者和程序员都是程序员没错,这就像下面这个小故事一样:

“驾购狮,射鸡狮,攻城狮和程序猿一起走进酒吧”

酒保:——程序员们来了!

对于非IT行业的人们来说,他们只能对IT从业者只有一个模糊和呆板印象——他们都是程序员,会修电脑,头发很少。如果你是一个IT行业的从业人员,则需要细品开发者和程序员之间的差异(我探讨的目的并不在于界定谁比谁好)。例如,如果你是IT公司负责招聘的工作人员,则必须搞清楚两者之间存在的差异,不然可能招募不到合适的人才,浪费公司的时间和金钱;如果你是一个想要从事软件开发的人,理解两者之间的差异,对你的职业规划也大有帮助,因为只有了解了差异,你才知道什么角色适合你,将来该往什么方向发展。

一、程序员

为了便于理解,我先将程序员比喻成一个技艺高超的厨师(注意强调烹饪技术),他们能够按照菜单上的信息,在既定的时间范围内,烹饪出色香味俱全的菜肴。能完成这样一项任务,这得益于厨师们在刀工,时间和火候上的精湛技艺。

同样的,程序员在既定的时间范围内,按照开发任务(菜单)将别人的想法转化为可执行的软件代码,他们负责编写,测试,调试/故障排除和维护计算机源代码,能胜任这样一类工作,这得益于他们能理解各种计算机编码指令,能熟练使用各种库函数或框架。

如果要用一句简单的话来概况,那就是:和厨师一样,程序员是面向任务/指令型的角色。他们都是根据任务/指令行事。

二、开发者

如果将程序员类比为技艺高超的厨师,那么开发者更像是一个专业的美食家。就像美食家也是一名厨师一样,开发者也是程序员,但区别在于,他们不仅能够烹饪出美味的菜肴,还可以从0到1创造新的菜品。于程序员相比,开发者在创造性和概念性上更胜一筹。

对于同样一个产品,程序员的工作是从任务/指令下达的时候开始的,而开发者的工作是从和客户谈论需求时开始的。开发者需要不断的同客户交谈以获取原始的需求信息,然后对需求进行分析,定位和抽象并找出其中埋藏的问题,最后针对客户的问题,寻求可行的解决方案。

在实际情况中,程序员和开发者并没有很明确的界限。例如,在小规模的公司,一个开发者既要承担需求分析,系统设计,项目管理的工作,又要承担编码,测试,调试/运维的工作。但不管界限如何模糊,他们之间终究有区别,例如,从工作的范围来看:

程序员的工作始终伴随着编码,而开发者的工作更多是处理需求,设计和管理的事情。

如果从工作的时间周期来看:

程序员的工作时间周期是从任务下达到调试完成,而开发者的工作时间周期是从需求谈判到产品落地。

从工作范围和时间周期上来看,我们可以得到第一个直观的概念:

开发者程序员都是程序员,开发者和程序员所承担的角色是整体与部分,全集与子集的关系。

程序员只需关注自身任务的时间周期,而开发者需要关注整个项目周期。

三、程序员 VS 开发者

首先,不管是系统架构师,软件工程师还是软件设计师,他们都是程序员。

在接下来的内容中,我会从工作的职责,时间,能力和领域者四个方向探讨开发者和程序员之间存在的区别和联系。

3.1 工作职责

程序员:

  • 程序员需要对他们正在编写的源代码负责(测试,调试/运维)
  • 根据既定任务行事
  • 专注于代码逻辑和算法
  • 负责业务逻辑的实现和代码组装

开发者:

  • 很少的代码编写量,更偏重于编码规范的制定
  • 负责评定和管理项目代码
  • 对项目的时间,空间和资金成本负责
  • 协调处理整个项目的功能
  • 协调/掌控全局,但没有必要知道各子功能的内部细节。

程序员利用专业知识,将现实需求/问题转化为可执行代码,开发人员则需要利用创造性和概念性来保证程序员的节奏一致,为项目争取时间和空间。这好比一场交响乐音乐会,程序员像演奏者,而开发者像手拿指挥棒的演奏指挥。

3.2 时间范围

程序员:

  • 任务下达——工作开始时间
  • 编码
  • 测试
  • 调试
  • 任务完成——工作结束时间

开发者:

  • 需求谈判——工作开始时间

  • 需求分析

  • 概要设计
  • 解决方案
  • 编码实现
  • 系统测试
  • 系统运维
  • 文档编写——工作结束时间

程序员的的工作好比一个400米的接力往返跑比赛,每个程序员只负责其中一段工作,而开发者更像是马拉松长跑比赛,需要从头盯到尾。

3.3 工作能力

程序员:

  • 使用合适的编码指令和算法,编写经过测试且符合标准的有效代码,以完成任务。

开发者:

  • 发挥自身的创造性和概念性,找到满足客户需求的解决方案,并让程序员能够理解并实现自己的想法。

3.4 专注领域

程序员:

  • 业务逻辑转化为可执行代码
  • 精于某一个或多个编码语言
  • 善于使用各类算法解决问题
  • 善于对代码进行测试、修改和运维

开发者:

  • 需求分析和沟通
  • 资源整合和协调
  • 项目管理于跟踪
  • 风险评估于把控

四、总结

通过对程序员和开发者之间的对比,我们发现了两者之间的差异。简单来说,程序员和开发者之间最本质的区别在于他们的工作范围不同,思考方向不同。开发人员(技术总监,架构师,设计师,项目经理等)会更多的参与到整个项目当中,并对项目有更深入的了解;而程序员(例如:初/中/高级Java程序员或技术专家),他们只参与了项目的特定部分,利用自身的专业知识,解决了某一领域的问题。

回到一开始的那个问题中,开发人员也是程序员,就像美食家也是厨师。但需要注意的是,开发者可以平滑切换到程序员的角色,但程序员并不一定能切换为开发者的角色。为什么这样说?道理很简单,美食家可以切换成厨师的角色,自做美味菜肴,但厨师并不一定能够像美食家一样创造新的菜品,并对没事进行品鉴。同样的,一个技术总监或架构师可以成为一个合格的程序员,去完成编码任务(通常不会这样,杀鸡用牛刀,如果小公司只有一把牛刀,那也没有办法);但一个高级程序员未必能够胜任技术总监或架构师的工作,因为两者要思考的问题是一个父子集合,整体与局部的关系。

认识到这一点后,如果你是一名IT公司的招聘人员,你应该已经明白,一个编程专家未必是你想要寻求的技术总监或架构师,选择需谨慎,用人有风险;如果你是一个码农,也请认清两者区别,做好职业规划,如果你想往技术总监/架构师方向发展,除了必要的编码能力,你还需加强自身在沟通,表达,整合,探索,创新等方向上的能力,规划需谨慎,光阴去不回。