程序员的重复劳动陷阱

https://kb.cnblogs.com/page/627035/

同样是一样的计算机专业毕业,进入职场的职位和工作都差不多,为何有些程序员短短几年就成长为全能选手或领域专家,有些程序员还在做CRUD?

程序员的重复劳动陷阱

不知道大家有没有这样的感觉,每次加入一个新的公司/组,一开始总是要学这个学那个,可能会花很多时间看现有的代码,然后花一些时间实现一点点小的功能,等到经过一段时间后,自己对工作越来越得心应手,提来的类似需求马上就可以做,以做得多做得快为骄傲,觉的这样可以更受老板青睐,可以升职加薪。

我在毕业第三年的时候加入前公司,在加入公司的第一个季度,我主要再做一些边缘工具以及理解系统,从第二个季度开始在组里的核心业务上开发。当时自己为了能够快速的出成果,会从组里所有的任务里挑看着比较容易实现的做,往往一天就可以做完一个或者两个任务。做完一个任务后,发现backlog里面有相似的任务,我也“赶紧”抢过来assign给自己,然后快速的做完,提交code review。从那个季度开始我每个季度做的工单越来越多,超过组里的所有其他成员,自己也对自己的“高效”洋洋得意,觉的自己工作的非常充实,进步很大。

然而在这个过程中,我已经不知不觉得掉到“重复劳动”的陷阱中去了。

我们在写代码的时候,有一个原则交叫DRY(Don’t Repeat Youself)原则,简单通俗的说就是不要copy paste代码,能抽象成函数的抽象成函数,能抽象成基类的抽象成基类。但是程序员的工作本身也应该遵循一样的道理,那就是尽量不要做重复的工作。

重复劳动对程序员的危害

回到开篇的问题,同样是一样的计算机专业毕业,进入职场的职位和工作都差不多,为何有些程序员短短几年就成长为全能选手或领域专家,有些程序员还在做CRUD?

在这里插入图片描述

大部分的技术学习曲线类似于上图,经历过短暂的入门期和相对长一些的积累期之后,可能大部分技术都会进入到高效期。在入门期和积累期的时候可能技能使用的效率会低一些,进入到高效期之后,随着技能使用的效率大大提高,工作所产生的“输出”也越来越大。因此“高效期“给人以充实的假象。

一旦自己的某项技术进入到高效期,在此基础上的提升会非常困难,可能之前工作三个月所掌握的新知识,比之后一年在工作中积累的要多。有时候我们看一个程序员工作了5年,但是他可能第一年学习并熟悉所用的技术,接下来4年都在做相同的工作,解决类似的需求,那么他的5年工作经验等于1年乘以5。

而有些程序员,他每工作一段时间之后,都会钻研技术更深的部分,或者去学习新的技术,总是保持着在尝试自己并不擅长的领域,那么这样的程序员,他的5年工作经验会比前一种程序员要多。

如何摆脱重复劳动的循环

既然重复劳动的危害这么大,那么我们是否可以摆脱重复劳动的循环呢?

有的时候,程序员自己也不想老是重复的干类似的东西,但是无奈被派发的任务重复的很多,似乎自己可以选择的不多。

在我自己在第三年大量重复劳动之后,我的经理找到我谈话,说我不应该这样重复自己,同样的事情做一两次就好了,再重复的做对自己的帮助不大。我分享一下我是怎么样避免重复的劳动的:

找到Pattern,解决一类问题而不是一个问题。当你解决了N次类似的需求的时候,是否可以把这些问题抽象出来,是否可以去自动化的实现这类需求?改了N次bug之后,是否可以发现bug的规律,能够开发出静态分析工具来抓住这些bug?
尝试用新的技术解决同样的问题。**有时当项目的实现并没有多少规定的时候,我们可以在一定的自由度下尝试新的工具。**今年年初的时候我去尝试修改一个已有的内部工具前段,持着学习新技术的心理,我用Redux重新实现了前段,而不是在原有的jQuery的前段基础上修改。
**尝试换岗。**换岗位可以直接的让你接受不同的项目,做一些不同的事情。我在上家公司的第一组待了近三年才换组,现在来看应该更早的时候尝试不同的事情。换岗位也会带来一些其他的问题,比如到新岗位之后可能会影响晋升速度,需要重新建立自己的权威等等。
换工作。换工作是一个终极大招,它会带来很多其他的变化,不建议只是为了脱离重复劳动而换工作。如果没有养成良好的学习习惯,那么换一份新工作之后也很有可能陷入到新的重复劳动的循环中。

重复劳动不可以完全避免

重复劳动是否可以完全避免呢?

我觉的是不可以避免的。以上的内容都是基于程序员成长的角度去分析问题,重复劳动是有害的。但是将程序员的劳动视为价值输出的话,熟练的价值输出确实也是程序员的价值之一,可以争取到更高的薪酬。

我们站在组织的角度上来看,**重复的需求永远存在,这些重复的需求需要被完成。**如果在人员配置有限的情况下,不可避免的单个个体成员需要去进行一定的重复劳动。而由于时间上的紧迫性,可能必须要用高效粗暴的方法来实现。

如果你是公司的初创成员,需要在初期做大量的重复工作来从无到有的实现新的产品,那毫无疑问这是应该做的,因为这样的重复劳动带来的收益可能是巨大的。

希望大家在工作中都可以正确的认识到重复劳动的陷阱,让自己能够保持持久的成长

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

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

相关文章

2023年中国医疗传感器行业现状分析:市场国有化率低[图]

传感器是对物理刺激(如热、光、声、压力、磁或特定的运动)作出反应并传送产生的脉冲(如用于测量或操作控制)的装置。传感器一般由敏感元件、转换元件和转换电路组成。 医疗传感器分类 资料来源:共研产业咨询&#xff…

管道-有名管道

一、有名管道 有名管道与匿名管道的不同: 有名管道提供了一个路径名,并以FIFO的文件形式存在于文件系统中。与匿名管道不同,有名管道可以被不相关的进程使用,只要它们可以访问该路径,就能够通过有名管道进行通信。 FI…

基于SSM的学生事务处理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

MySQL 索引优化实践(单表)

目录 一、前言二、表数据准备三、常见业务无索引查询耗时测试3.1、通过订单ID / 订单编号 查询指定订单3.2、查询订单列表 四、订单常见业务索引优化实践4.1、通过唯一索引和普通索引优化通过订单编号查询订单信息4.2、通过普通联合索引优化订单列表查询4.2.1、分析查询字段的查…

GROMACS Tutorial 5: Protein-Ligand Complex 中文实战教程

GROMACS Tutorial 5: Protein-Ligand Complex 中文实战教程 前言系统环境特别强调一、预处理阶段1.1 蛋白质配体分离以及除水操作1.2 选择力场识别JZ4配体1.2.1 使用在线力场解析1.2.2 使用官方推荐力场CHARMM36解析 1.3 蛋白的top文件准备1.4 配体的top文件准备1.5 使用CgenFF…

【C++】模板初阶 -- 详解

一、泛型编程 // 实现一个通用的交换函数: void Swap(int& left, int& right) {int temp left;left right;right temp; }void Swap(double& left, double& right) {double temp left;left right;right temp; }void Swap(char& left, ch…

高層建築設計和建造:從避難層到設備間和防風防火防水的設計理念,酒店住宅辦公樓都有什麽房間(精簡)

樓層概覽 標準層居住、辦公、商業等功能的樓層。結構和裝修與其他樓層相同,可供人正常居住、工作和活動避難層專門用於人員避難的樓層,通常會相隔數十個標準層,樓梯通常和標準層是錯開的(非公用),具有更多的通風口。牆體和樓板具…

【Linux】TCP的服务端 + 客户端

文章目录 📖 前言1. 服务端基本结构1.1 类成员变量:1.2 头文件1.3 初始化:1.3 - 1 全双工与半双工1.3 - 2 inet_aton1.3 - 3 listen 2. 服务端运行接口2.1 accept:2.2 服务接口: 3. 客户端3.1 connect:3.2 …

linux 笔记 安装 anaconda

1 找到anaconda 安装包 Free Download | Anaconda 2 在linux环境中安装对应安装包 3 安装完毕后查看是否安装好 发现不行,需要配置环境变量 4 配置环境变量 vim /etc/profile使用这个,发现对应的文件是只读文件 sudo vim /etc/profile在最下面加一…

【数据结构与算法】- 数组

数组 1.1 数组的定义1.2 数组的创建1.3 数组在内存中的情况2.1 初始化数组2.2 插入元素2.3 删除元素2.4 读取元素2.5 遍历数组 1.1 数组的定义 数组中的是在内存中是连续存储的,内存是由一个个内存单元组成的,每一个内存单元都有自己的地址,…

【iptables 实战】05 iptables设置网络转发实验

一、网络架构 实验效果,通过机器B的转发功能,将机器A的报文转发到机器C 本实验准备三台机器分别配置如下网络 机器A ip:192.168.56.104 机器C ip:10.1.0.10 机器B 两张网卡,分别的ip是192.168.56.106和10.1.0.11 如图所示 如下图所示 二、…

PPT/PS——设置图片的背景为透明色的方法

方法一 将图片放到PPT内,点击图片,点击格式,删除背景 方法二 PS小白 扣去背景流程PS怎么把背景色改成透明色呢?

npm ,yarn 更换使用国内镜像源,淘宝源

背景 文章首发地址 在平时开发当中,我们经常会使用 Npm,yarn 来构建 web 项目。但是npm默认的源的服务器是在国外的,如果没有梯子的话。下载速度会特别慢。那有没有方法解决呢? 其实是有的,设置国内镜像即可&#x…

c++学习之优先级队列

目录 1.初识优先级队列 库中的实现 使用优先级队列 2.优先级队列的实现 3.仿函数 利用仿函数实现的优先级队列 迭代器区间构造(建堆) 1.初识优先级队列 如果我们给每个元素都分配一个数字来标记其优先级,不妨设较小的数字具有较…

怎么通过portainer部署一个vue项目

这篇文章分享一下今天通过docker打包vue项目,并使用打包的镜像在portainer上部署运行,参考了vue-cli和docker的官方文档。 首先,阅读vue-cli关于docker部署的说明 vue-cli关于docker部署的说明https://cli.vuejs.org/guide/deployment.html#…

网络层常见协议——IPV4、IPV6、ARP、ICMP、QoS

目录 1、IPV4 协议 IPV4 地址的组成: IPV4地址的分类: 关于多播和组播: 常见组播地址分类: 特殊的 IPV4 地址: 私有地址和公有地址: 私有地址的范围: 子网划分: 子网掩码&…

操作系统--分页存储管理

一、概念介绍 分页存储:一是分内存地址,二是分逻辑地址。 1.分内存地址 将内存空间分为一个个大小相等的分区。比如,每个分区4KB。 每个分区就是一个“页框”,每个页框有个编号,即“页框号”,“页框号”…

【统计学】Top-down自上而下的角度模型召回率recall,精确率precision,特异性specificity,模型评价

最近在学 logistic regression model,又遇见了几个之前的老面孔。 召回率recall, 精确率precision,特异性spcificity,准确率accuracy,True positive rate,false positive rate等等名词在学习之初遇到的困难在于&#x…

【Java每日一题】— —第十八题:求二维数组中的元素最小值及其索引。(2023.10.02)

🕸️Hollow,各位小伙伴,今天我们要做的是第十八题。 🎯问题: 求二维数组中的元素最小值及其索引。 测试结果如下: 🎯 答案: int [][]anew int[3][];a[0]new int [3];a[1]new int[5…

全国排名前三的直播公司无锋科技入驻天府蜂巢成都直播产业基地

最近,全国排名前三的直播公司——无锋科技,正式宣布入驻位于成都的天府蜂巢直播产业基地,这一消息引起了业内人士的高度关注。成都直播产业基地一直是中国直播产业的重要地标之一,其强大的技术和资源优势为众多直播公司提供了广阔…