写点什么

初级、中级和高级开发人员之间的差异

2019 年 8 月 07 日

初级、中级和高级开发人员之间的差异

有一句话在开发人员圈子广为流传:“初级开发人员的标志就是需要在中级和高级开发人员的指导下完成工作。”所以,我们不要苛刻初级开发人员写的代码对错严谨,毕竟每个开发人员都有这样的一个过程。据译者观察,初级开发人员往往认为自己写的代码都是高质量的;而中级开发人员认识到了软件知识会影响代码质量;中高级开发人员则认识到硬件知识会影响到代码质量;高级开发人员反而认为自己写的部分代码质量不够高,需要恶补硬件知识和编译器等相关知识……至于骨灰级开发人员,可以写出高质量代码,并能够充分考虑各种情况。本文,后端开发者 Daan 讲述了初级、中级和高级开发人员之间的区别。



作为初级、中级或高级开发人员,并不仅仅跟多少年的编程经验相关。初级开发人员甚至可以比高级开发人员年龄要大。这一切都取决于技能。不过,这并不意味着高级开发人员必须是所有方面的专家,但可以肯定地说,高级开发人员要比初级、中级开发人员熟练得多。


既然高级开发人员与初级、中级开发人员的区别不仅在于编程技能,那么到底有什么区别呢?


知识

很显然,高级开发人员比初级、中级开发人员掌握更多的知识。了解设计模式、架构、自动化测试、性能、安全性等,这是初级开发人员缩小与中级、高级开发人员之间的知识差距的好方法。


了解软件开发中的事情应该如何进行是很重要的。但是,仅仅知道这些知识并不能让你成为高级开发人员。知识并不是开发人员之间最大的区别,它只是其中的一个因素。


编程

不管大多数人是怎么想的,编程并不是与计算机进行通信。编程是关于与人类交流指导的计算机。最终,代码被编译并转为一连串的 0 和 1。


代码必须对将来使用它的其他开发人员有意义。一个以前从未见过代码的新团队应该能够阅读代码并开始研究新功能或进行 bug 修复。这就是初级和高级开发人员之间的巨大差异所在。


在这一比较中,我将把中级开发人员排除在外,因为,在编程技能方面,中级开发人员处于一个灰色地带。显然,中级开发人员介于初级和高级开发人员之间,他们可能更倾向于高级开发人员。这主要与经验有关,因为中级开发人员可能至少经历过一次整个开发周期。他们犯过许多最简单的错误,并从中汲取了教训。


如何识别初级开发人员?

初级开发人员缺乏经验。有些人刚刚毕业,正在开始他们的第一份全职工作。初级开发人员的心态通常是能够让代码工作就万事大吉了。工作软件和良好的软件对他们来说,没什么不同。


编写简单的代码其实是一件很困难的事情,这恰恰就是初级开发人员不擅长的事情。初级开发人员倾向编写花哨的代码。你可以通过古怪的代码、过于复杂的抽象来识别出初级开发人员。这就是初级开发人员炫耀的方式,好让其他开发人员知道他们编写的代码有多牛逼。其实,他们这一做法是错误的。


初级开发人员只专注于代码的计算机方面,而忽视了人性方面。


那么,高级开发人员呢?

当你查看高级开发人员编写的代码时,你心里可能会嘀咕:就这些吗?代码的其余部分在哪里呢?高级开发人员编写的代码,看上去简洁、直接了当,甚至还可能让人觉得很愚蠢。而这正是开发人员在编程时可以拥有的最大品质之一。高级开发人员遵循的是 KISS 原则:保持简洁,愚蠢。


译注:KISS 是英文 “Keep it Simple and Stupid” 的首字母缩写,意思是 “保持简单和愚蠢”,其中 “愚蠢” 不是 “傻”,它还有 “迟钝”、“不敏感”、“乏味”、“无价值” 等综合含义。另一种对 KISS 的解释是:“Keep It Simple,Stupid” 由于中间加了逗号,意思就变成了 “保持简单,傻瓜”,是一种祈使语态,带有调侃的色彩。

好的目标不是越复杂越好,反而是越简洁越好。这就是 KISS 原则。符合 KISS 原则的目标都是关键的,而非包罗万象;目标必须确定优先顺序,而关键的目标则是资源和努力的重心。总结开发人员在编程过程中的经验,大多数应用程序的设计应保持简洁和单纯,而不掺入非必要的复杂性,这样的应用运作成效会取得最优;因此简单性应该是软件开发中的关键目标,尽量避免不必要的复杂性。


高级开发人员以不同于初级开发人员的方式思考他们的代码。高级开发人员编写的代码会考虑到可维护性和可扩展性。这与初级开发人员的思维方式完全不同:高级开发人员考虑的是必须与代码打交道的人,而初级开发人员只是考虑如何让代码在计算机上工作。


不仅仅是编程技能的问题

除了编程技能外,还有一些其他因素可以告诉你谁是哪种类型的开发人员。


一般来说,初级开发人员执行最简单的任务或影响较小的任务。他们不参与任何架构设计。中级开发人员也不负责设计解决方案,他们只是执行任务。与初级开发人员的不同之处在于,只要分配给他们相对常规的任务,他们就会执行这些任务,而无需过多的监督。而高级开发人员则完全可以自己开发应用程序。


但这并不意味着高级开发人员在开发过程中没有任何问题。实际上,每个开发人员每天都会遇到很多问题,这点是不会改变的。对于高级开发人员来说,也是概莫能外。


区别在于高级开发人员知道如何提出正确的问题,以及如何处理这些问题。当涉及到相对常规的任务时,中级开发人员可以提出正确的问题,但在更复杂的任务上就力有未逮,需要高级开发人员的帮助了。


高级开发人员永远不会迷失方向,他们知道如何以正确的行动来跟进问题。但是,这并不意味着高级开发人员不能向其他开发人员寻求帮助。有时,最好的方法就是向其他在该领域有经验的开发人员寻求帮助。


中级开发人员也应该能够提出正确的问题,只要他没有被分配到需要深入知识层面的高度复杂的任务。


你不应该指望初级开发人员能够立即提出正确的问题。由于初级开发人员缺乏经验,他们需要更有经验的开发人员的指导。初级开发人员需要获得必要的资源,或向正确的方向大力推进。


晋升下一个层次

作为开发人员,我们都想提高自己,变得更好。但是,你可以采取哪些步骤来晋升到下一个层次呢?


从初级开发人员到中级开发人员

由于初级开发人员缺乏经验,因此至少要经历几次整个开发周期,这一点是很重要的。这样一来,你会掉进很多陷阱中,并学会如何在下一次避免它们。


说到编程,你应该学习如何编写简单的代码。想想下一个将要处理这段代码的人。你还应该学习如何调试,因为这将使你能够更好地理解这一过程中发生的事情。


此外,你应该熟悉最佳实践,并了解架构、性能、安全性等。缩小到达中级水平所需的知识差距。


从中级开发人员到高级开发人员

从中级开发人员到高级开发人员可能会相当困难。有些开发人员在整个职业生涯中,始终处于中级水平。


高级开发人员知道什么可以走捷径,什么永远不可以走捷径。这些都是从过去所犯的错误中汲取的教训。


如果你想要成为高级开发人员,就必须准备好接受没有人知道如何解决的任务。但你应该知道的不仅仅是如何完成工作。


作为高级开发人员,你的工作还包括帮助经验较少的开发人员。当他们不知道如何做某些事情时,你就是他们的后备力量。


高级开发人员掌握了他们的技术栈,这可能不会让你感到惊讶。记着,成为高级开发人员可不仅仅是编程技能,还要了解你所在公司中使用的所有工具和应用程序。


结论

初级、中级和高级开发人员之间的区别并不全在于有多少年的经验。当然,可以肯定地说,高级开发人员比初级、中级开发人员更熟练,但知识并不是最重要的因素。


与初级开发人员相比,高级开发人员编写的代码更简单,并且思维模式也不同。但这不仅仅是编程技能。知道要问什么问题,以及如何跟进这些问题是至关重要的。只有那些拥有丰富经验的高级开发人员,才知道在如何在任何情况下做到这一点。


作为一个初级开发人员,你应该专注于如何编写简单的代码,并经历多个开发周期。要从中级开发人员晋升到高级开发人员,你应该专注于学习,而不仅仅是解决常规任务。你应该愿意承担最艰巨的任务,成为技术栈的大师。高级开发人员的另一个职责是为经验不足的开发人员提供后援力量。


我将引用 Martin Fowler 的一句话作为结束语:“任何傻瓜都可以写出计算机能理解的代码,而优秀程序员可以写出人能读懂的代码。”(Any fool can write code that a computer can understand. Good programmers write code that humans can understand.


作者介绍:


Daan,荷兰的后端开发者,密码学爱好者。


原文链接:


The Differences Between a Junior, Mid-Level, and Senior Developer


2019 年 8 月 07 日 09:2124561
用户头像

发布了 304 篇内容, 共 99.0 次阅读, 收获喜欢 1079 次。

关注

评论 8 条评论

发布
用户头像
赞,向高级开发晋级
2020 年 04 月 23 日 17:33
回复
用户头像
说的很好
2019 年 08 月 08 日 00:20
回复
用户头像
kiss很少说用在写代码上,一般是功能和交互设计。
摘自一位资深开发人员的聊天记录。
2019 年 08 月 07 日 19:50
回复
建议把资深二字去掉
2019 年 08 月 08 日 18:21
回复
用户头像
这个话题看到不少讨论了,单纯以工作经验判断肯定不可以,但要说能力吧,感觉也挺虚的
2019 年 08 月 07 日 16:45
回复
对啊 感觉没有一个具体的判断标准 不是很好识别。而且开发 这个领域太广 很难鉴定
2019 年 08 月 07 日 17:03
回复
没有更多了
发现更多内容

Java 源代码解析 | 集合类 | Set

肥鱼先生

SpringCloud 从入门到精通 06--- Eureka服务端

Felix

【JS】防止浏览器控制台被直接查看(2)

学习委员

JavaScript chrome 前端 js 28天写作

kafka如何做到无消息丢失配置

topsion

kafka 消息不丢失

28天瞎写的第二百一五天:为了看片儿折腾 Linux 的故事

树上

28天写作

智能合约APP开发|智能合约系统软件开发

开發I852946OIIO

系统开发

Dubbo 就是靠它崭露头角!

yes的练级攻略

dubbo 后端 RPC

新官上任,如何开始你的管理工作(下)

一笑

团队管理 管理 28天写作

微服务该如何拆分?

xcbeyond

微服务 方法论 微服务拆分 架构设计原则 28天写作

HDFS SHELL详解(5)

罗小龙

hadoop 28天写作 hdfs shell

技术干货!HDFS读写原理和代码简单实现

华为云开发者社区

hadoop hdfs 架构 MRS 元数据

2021,加料!

浪潮云

云原生 工业互联网

Java 源代码解析 | 集合类 | LinkedList

肥鱼先生

智联招聘的微前端落地实践——Widget

智联大前端

前端 前端架构 前端框架 微前端

前端大佬们都在推荐的“绿宝书”你值得拥有

华章IT

JavaScript typescript 前端开发 web开发 犀牛书

2020中国云计算生态峰会召开 浪潮云摘得三项大奖

浪潮云

云服务

SpringCloud 从入门到精通 07--- 订单服务和支付服务注册进Eureka

Felix

基于网络开放可编程技术构建新一代网络设备运管平台

华为云开发者社区

运维 网络 运维自动化 金融

Java单例7种测试实践

叫练

单例模式 单例 手写单例 饿汉式 懒汉式

Redis学习笔记01:SDS 简单动态字符串

架构精进之路

redis 七日更 28天写作

为什么泡泡玛特是一个好生意

lidaobing

28天写作 泡泡玛特

做视频最大的困难是什么?为什么要保持日更? | 视频号 28 天 (05)

赵新龙

28天写作

5 天开发接口系统技术小结

老魚

laravel 建站 接口开发 28天写作

没有调查,就没有发言权 Jan 12, 2021

王泰

28天写作

距离Java开发者玩转 Serverless,到底还有多远?

博文视点Broadview

云上独享资源池 自主灵活更安全

浪潮云

产品推荐

Elasticsearch 核心概念

escray

elasticsearch elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

这5个让人窒息的烂代码,你看完都忍不了

华为云开发者社区

GitHub 代码 代码注释 null

Python解释器和IPython

程序那些事

Python 数据分析 ipython 程序那些事 Python解释器

代码编译时自动完成白盒测试,这真的可以

华为云开发者社区

c++ 测试 代码 框架

作为社畜,如何做好精力管理

熊斌

精力管理 28天写作

混合云之争的开端与终途

混合云之争的开端与终途

初级、中级和高级开发人员之间的差异-InfoQ