原文链接: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. 咱们中最牛的人也是最糟糕的人。