开发人员:月薪过万与年薪百万之间的差距

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

天池 在线编程 所有子数组之和(排列组合)

文章目录1. 题目2. 解题2.1 暴力解2.1 O(n) 解1. 题目 给定一个数组nums, 你需要返回这个数组所有子数组之和。 如果nums [2, 4, 1], 数组所有的子集是 {[2], [4], [1], [2, 4], [4, 1], [2, 4, 1]} 保证返回的结果是int的类型 len(nums) < 50 示例 示例1: 输入: nums …

MyEclipse中代码提醒功能

一&#xff1a;最近仔细研究了下spring mvc中的代码&#xff0c;自己在配置文件哪里来时出现问题&#xff0c;没有提醒&#xff0c;只好自己搜了下有关的信息。如下 window--->preferences---->java---->Editor------>Content Assist如下图&#xff1a; 讲画圈部分…

天池 在线编程 木材加工(二分查找)

文章目录1. 题目2. 解题1. 题目 有一些原木&#xff0c;现在想把这些木头切割成一些长度相同的小段木头&#xff0c;需要得到的小段的数目至少为 k。 当然&#xff0c;我们希望得到的小段越长越好&#xff0c;你需要计算能够得到的小段木头的最大长度。 木头长度的单位是厘米…

天池 在线编程 最频繁出现的子串(字符串哈希)

文章目录1. 题目2. 解题1. 题目 给定一个字符串&#xff0c;我们想知道满足以下两个条件的子串最多出现了多少次&#xff1a; 子串的长度在之间 [minLength, maxLength] 子串的字符种类不超过 maxUnique 写一个函数 getMaxOccurrences &#xff0c;其返回满足条件的子串最多出…

关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系

刚接触iOS开发的人难免会对苹果的各种证书、配置文件等不甚了解&#xff0c;可能你按照网上的教程一步一步的成功申请了真机调试&#xff0c;但是还是对其中的缘由一知半解。这篇文章就对Certificate、Provisioning Profile等做个总结。 1.概念介绍 如果你拥有一个开发者账户的…

12306 抢票项目霸榜 GitHub,标星即将破万

十一将至&#xff0c;你买到回家的火车票了吗&#xff1f;如果没有&#xff0c;你可以试着打开 GitHub&#xff0c;在搜索栏键入 12306 的关键词&#xff0c;我相信你会发现一个新大陆。没错&#xff0c;这里有 1572 个抢票项目。它们大多用 Python、JavaScript、Java 写成。其…

LeetCode 1700. 无法吃午餐的学生数量(队列模拟 / 不模拟)

文章目录1. 题目2. 解题1. 题目 学校的自助午餐提供圆形和方形的三明治&#xff0c;分别用数字 0 和 1 表示。 所有学生站在一个队列里&#xff0c;每个学生要么喜欢圆形的要么喜欢方形的。 餐厅里三明治的数量与学生的数量相同。 所有三明治都放在一个 栈 里&#xff0c;每一…

leetcode - Linked List Cycle

题目&#xff1a;Linked List Cycle Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it without using extra space? 个人思路&#xff1a; 1、判断一个链表是否有环&#xff0c;标准做法是采取快慢指针&#xff0c;一个走一步&#xff0c…

高效程序员的 7 项技能

软件工程师把大量时间花在练习 LeetCode 问题获得面试技巧和完善简历上。一旦他们最终在一家初创公司、谷歌、亚马逊或其他公司找到工作&#xff0c;他们可能就会发现&#xff0c;他们获得这份工作所需的技能与他们日常工作所需的技能并不匹配。 受 TechLead 高效程序员的七项技…

LeetCode 1701. 平均等待时间(模拟)

文章目录1. 题目2. 解题1. 题目 有一个餐厅&#xff0c;只有一位厨师。你有一个顾客数组 customers &#xff0c;其中 customers[i] [arrivali, timei] &#xff1a; arrivali 是第 i 位顾客到达的时间&#xff0c;到达时间按 非递减 顺序排列。timei 是给第 i 位顾客做菜需…

怎么样才能更高效的学习区块链

一、为什么选择区块链 选择区块链作为实践学习的案例&#xff0c;原因有三&#xff1a; 第一&#xff0c;区块链是我最近两三个月刚学习的领域&#xff0c;对我来说也是一门从零开始学习的领域&#xff0c;这样的学习案例最具有指导作用。因为时间没有隔太久&#xff0c;很多…

LeetCode 1702. 修改后的最大二进制字符串(贪心)

文章目录1. 题目2. 解题1. 题目 给你一个二进制字符串 binary &#xff0c;它仅有 0 或者 1 组成。你可以使用下面的操作任意次对它进行修改&#xff1a; 操作 1 &#xff1a;如果二进制串包含子字符串 "00" &#xff0c;你可以用 "10" 将其替换。 比方说…

LeetCode 1704. 判断字符串的两半是否相似

文章目录1. 题目2. 解题1. 题目 给你一个偶数长度的字符串 s 。将其拆分成长度相同的两半&#xff0c;前一半为 a &#xff0c;后一半为 b 。 两个字符串 相似 的前提是它们都含有相同数目的元音&#xff08;‘a’&#xff0c;‘e’&#xff0c;‘i’&#xff0c;‘o’&#…

LeetCode 1706. 球会落何处(模拟)

文章目录1. 题目2. 解题1. 题目 用一个大小为 m x n 的二维网格 grid 表示一个箱子。 你有 n 颗球。箱子的顶部和底部都是开着的。 箱子中的每个单元格都有一个对角线挡板&#xff0c;跨过单元格的两个角&#xff0c;可以将球导向左侧或者右侧。 将球导向右侧的挡板跨过左上…

android listview 异步加载图片并防止错位

网上找了一张图&#xff0c; listview 异步加载图片之所以错位的根本原因是重用了 convertView 且有异步操作. 如果不重用 convertView 不会出现错位现象&#xff0c; 重用 convertView 但没有异步操作也不会有问题。 我简单分析一下&#xff1a; 当重用 convertView 时&#x…

LeetCode 1705. 吃苹果的最大数目(优先队列)

文章目录1. 题目2. 解题1. 题目 有一棵特殊的苹果树&#xff0c;一连 n 天&#xff0c;每天都可以长出若干个苹果。 在第 i 天&#xff0c;树上会长出 apples[i] 个苹果&#xff0c;这些苹果将会在 days[i] 天后&#xff08;也就是说&#xff0c;第 i days[i] 天时&#xff0…

全面系统地总结Linux的基本操作(上)

1、 Linux文件和目录 Windows 和 Linux 文件系统 在 windows 平台下&#xff0c;打开"计算机"&#xff0c;我们看到的是一个个的驱动器盘符&#xff1a;每个驱动器都有自己的根目录结构&#xff0c;这样形成了多个树并列的情形&#xff0c;如图所示&#xff1a; 在 …

Pytorch 神经网络nn模块

文章目录1. nn模块2. torch.optim 优化器3. 自定义nn模块4. 权重共享参考 http://pytorch123.com/ 1. nn模块 import torch N, D_in, Hidden_size, D_out 64, 1000, 100, 10torch.nn.Sequential 建立模型&#xff0c;跟 keras 很像 x torch.randn(N, D_in) y torch.randn…

全面系统地总结Linux的基本操作(下)

4、 Linux命令-系统管理 4.1 查看日历:cal cal 命令用于查看当前日历&#xff0c;-y 显示整年日历&#xff1a; 4.2 显示或设置日期:date 设置时间格式&#xff08;需要管理员权限&#xff09;&#xff1a; date [MMDDhhmm[[CC]YY][.ss]] format CC 为年前两位 yy 为年的后…

免费个人博客:使用hexo+github搭建详细教程

前言 使用github pages服务搭建博客的好处有&#xff1a; 全是静态文件&#xff0c;访问速度快&#xff1b;免费方便&#xff0c;不用花一分钱就可以搭建一个自由的个人博客&#xff0c;不需要服务器不需要后台&#xff1b;可以随意绑定自己的域名&#xff0c;不仔细看的话根…