【译】最糟糕的程序员

原文链接:The Worst Kind of Programmer

作者:Alexander Mikhailian

经过 25 年的职业生涯,我逐渐认识到,有一类特殊的程序员是我们行业中许多问题的根源。这里讲述的是一个几乎被两个这样的程序员毁掉的项目的故事。其中一个负责前端开发,另一个负责后端开发。当团队的其他成员因为业务需求而懈怠时,这两个家伙却在努力工作。

前端负责人使用 NX、Rx 和当前其他流行技术启动了 Angular 单一存储库。企业环境不太适合 NX,但他通过与领域专家合作,努力解决或规避基础设施问题。他建立了一个工作流程,虽然以 Angular 作为基本框架,但与官方 Angular 教程几乎没有相似之处。

后端负责人也不甘示弱,他按照公司的指导方针对 Spring Boot 项目进行了引导,同时还添加了一些个人色彩,如 Vavr 库和具有多级继承、判别器和生成器的高度复杂的 JPA 实体层次结构。然后,他又根据 booth Spring Bean Validation 和第三方验证框架添加了分层验证器,并使用新潮的测试框架进行了完善。

团队的其他人都钦佩地看着他们。

几个月过去了,公司开始尽可能地提出要求。后端和前端的空壳对于团队成员来说已经太复杂了,无法直接满足业务需求,因此两位开发负责人都努力将业务需求分解为更易于管理的技术票据,同时完成大部分繁重的工作。他们每个人都比团队其他成员加起来更加努力。当初级成员要求完成任务时,他们会被分配到"不太重要的工作",例如 API 设计或测试。

后来,前端负责人突然辞职,去了更好的地方。公司又找来了一位前端开发专家,让他试图接手工作了一段时间,然后又找来了一位,让他继续接手更长的时间。初级开发人员一直得不到重用。

后端负责人的工作量不断增加。他花费了漫长的白天,甚至更长的周末来交付看似简单的 CRUD 界面。但这些界面内部错综复杂,几乎无法减轻他的工作量。几个月后,后端负责人也辞职了,在业务压力不断增加的情况下,团队继续以蜗牛般的速度工作,以满足最后期限的要求。

代码质量极差,以至于在空值比较中使用了 Vavr 对象,Angular Typescript 与纯 JS 随意混用。最后,团队勉强交付了一个 bugs 的产品。前途一片黯淡。没有人能够胜任重写最初的首席开发人员所编写的数千行代码的任务。人员流失率很高。成本居高不下。

这样的软件开发项目描述是否似曾相识?

对我来说就是这样,因为我在从网络媒体到公共服务等不同行业中见过十几个类似的项目。我所描述的程序员通常被认为是我们中最优秀的,但我却认为他们是最差的。以下是一份并不详尽的清单,列出了这些人的品质。小心这一类人:

能从解决抽象问题中获得满足感

高超的数学技能、出色的 leetcode 资料、擅长解字谜和编谜题,这些都是一个人能够解决没有实际用途的问题的标志。他们专注于过程,而不是结果。

能够长时间工作

一个人身体健康,才能有大把的时间可以投入工作。家庭,孩子们,腕管综合症是所有迹象表明,你是不是他们的一种。

对软件工程的热情

一个聪明、积极的程序员总能找到一种方法,将他当下喜欢的技术融入到能为他付账单的项目中。业务是枯燥的,编码很容易,所以为什么不引入每个人都兴奋的最新技术,让它变得更有趣一些呢。而且,这将是简历上的又一个亮点项目。

自恋和自信

这可能与杜宁-克鲁格效应有关,因为我们这类人中最糟糕的通常是二十多岁或三十岁出头的相对年轻、聪明的人。他们一直被称赞为成绩优异,并且没有遇到太多批评。

如何避免最糟糕的情况

向管理层求助是行不通的。毕竟,商业环境中的管理层通常是非技术人员,而最差的那一类人就是表现最好的人。如果管理层不听表现最好的员工的话,应该听谁的?他们的表现是可以量化的,而团队精神却是不可量化的。

直接与最糟糕的那一类人交谈也不起作用。他们会倾听并友善地回应对其工程选择的批评,但对团队合作的讨论却充耳不闻。他们无法让自己的工程选择适应最没有经验的团队成员,就像有些成年人无法让自己的讲话适应孩子一样。

可以做什么

解决问题的第一步是认识到问题的存在。第二步是把问题说清楚:大多数软件都是由团队编写的,它必须让每个团队成员理解和使用。第三步是四处寻找解决问题的现有思路。令人惊讶的是,软件工程中的许多当代思想都可以被视为解决我们最优秀的者的问题的方法:

Golang、Lua等简单编程语言

人们普遍认为,Golang 简单到了 symplistic 的地步。在某种程度上,Golang 与 Rust 是对立的,后者只是达到目的的手段,而不是讨论的主题。Golang 团队努力奋斗,而 Rust 团队则......生疏,因为这种语言鼓励专注于自身,而不是工程项目的结果。

Scrum

Scrum 有一个很大程度上未被重视的方面,那就是团队成员的可互换性。虽然可能存在专业分工,但团队成员应能处理冲刺阶段的任何任务。这应该会产生简单的工程解决方案,所有团队成员都能掌握,而不仅仅是最复杂的方案。

开发运维 DevOps

经验丰富的程序员通常在特定的环境中工作。成为一名经验丰富的 Spring Boot 程序员或经验丰富的 С++ 程序员相对容易。 DevOps 将每个人变成多面手:配置服务器或云环境、监控、部署、设置管道,同时编码微服务。所需技能的数量之多,甚至让我们中最优秀的人偶尔也会变成菜鸟,从而培养对技能较差的团队成员的同情心。

结束

The best of us are the worst. 我们中最牛的人也是最糟糕的人。

相关推荐
你的人类朋友1 小时前
说说签名与验签
后端
databook1 小时前
Manim实现脉冲闪烁特效
后端·python·动效
excel3 小时前
为什么在 Three.js 中平面能产生“起伏效果”?
前端
AI大模型4 小时前
GitHub 狂飙 72k Star,这本大模型书凭啥能圈粉无数?
程序员·llm·agent
excel4 小时前
Node.js 断言与测试框架示例对比
前端
canonical_entropy5 小时前
AI时代,我们还需要低代码吗?—— 一场关于模型、演化与软件未来的深度问答
后端·低代码·aigc
天蓝色的鱼鱼5 小时前
前端开发者的组件设计之痛:为什么我的组件总是难以维护?
前端·react.js
codingandsleeping5 小时前
使用orval自动拉取swagger文档并生成ts接口
前端·javascript
颜如玉6 小时前
HikariCP:Dead code elimination优化
后端·性能优化·源码
考虑考虑6 小时前
Jpa使用union all
java·spring boot·后端