游戏开发团队并非蚂蚁协作(3):开发过程中的“尾气”

在这里插入图片描述

“尾气”指的什么?

就像汽车虽然行驶到达目的,但是却会在路途中留下尾气污染环境。开发过程中有时虽然完成了需求,但是也留下了“尾气”,或者说“技术债”、“遗留问题”。

“尾气”并不是看不到或者难以被解决,而是因为开发者做事存在倾向,相比“处理尾气”,开发者肯定更倾向于“完成下一个需求”。

“尾气”所涵盖的面实际非常广。如果用最高的标准去要求,甚至任何开发都有尾气,只是有多有少。下面就举一些具体的例子。

举例

代码结构不好:毕竟实现一个需求的代码写法不是固定的。如果不考虑长远的情况只考虑眼前的目标,那么代码会更快写出来,但是这样的结构在未来进行扩展时却会遇到麻烦。

占用公共资源:举个例子,你们团队所有人将使用一个 编辑器 来进行日常的开发工作。而你为了完成一个目标,需要在编辑器的启动阶段做些事情,也就是让所有人每次打开编辑器时都要多等待一段时间。这样“多占用了大家的时间”就是一种“尾气”。当然,如果多等待的时间只有0.01秒,那完全没问题,但是若多等待几分钟,那可算是个“令人窒息的尾气”了。

遗留资源:有时因为“测试”或其他目的会创建一些资源,但是用过之后,就没必要保留,应该删掉的。但经常有没有删掉的情况,这就成了“尾气”。这些遗留资源可能不会造成严重的问题,但是却会让别人迷惑,也可能影响某些功能(比如某些功能需要遍历所有资源做些处理,那么就会遇到这个应该删除的资源,从而可能产生预期之外的情况)。

展现的信息不准确:例如,程序员对于一种错误的情况会显示一个报错:“XXX丢失”。这本是好事,能让别人发现问题进而处理。但是情况可能更复杂,比如XXX丢失可能在某些情况下是正常的,不需要处理的。这样就会让别人误解,从而白白浪费时间关注这件事。这种“不准确的信息显示”也是一种尾气。

功能使用难度较高:例如,你开发好了一个功能。但这个功能对于使用者而言,有一定的使用难度。这就会导致,他们自己使用会有更大的可能性出错,或者你会被更频繁求助。

引入更高复杂性:这里的“复杂性”包括很多,如“工程结构”上的复杂性或者“流程”上的复杂性,只要你让一件事“变得更复杂”了,那都算尾气。因为当事情变得更复杂后,就更可能出现问题。

缺乏文档说明:显然,只要你做的功能并非只与你自己有关,那它就一定需要文档说明。否则之后将会消耗你更多的时间向别人解释重复的问题,或者处理相关的问题。

积累&交叉

少量的尾气一般不会有什么危害,但当他们累积起来的时候却会造成明显的问题。例如:

  • 一项功能必须让编辑器启动时多消耗2秒,这没什么。但是假如这样的功能越做越多,之后做了50个,那这样的话总共就要消耗近两分钟。试想,团队里的开发者每次打开编辑器都要白白等待两分钟,这将非常影响工作效率。
  • 由于一种功能让某种资源的结构变复杂了,举个具体的例子,比如这个资源原来是一个列表,其中有若干图片。而现在变成了,这个资源中的元素变成了数字,数字索引到了另一个列表的图片。一般这样还能够理解。但是再往后继续变复杂,比如这个列表又进行了更多的嵌套与转换。那这个资源的理解成本就会越来越高,导致能看懂的人越来越少。

另外,不同方面的尾气也可能交叉造成更让人困扰的问题。例如:

  • 一点遗留资源通常没问题。一些功能当碰到这些遗留资源时,通常也可以处理好。但假如出现了展现的信息不准确的情况,有一些不需要的报错,那可能就会让人误解。
  • 如果一项功能使用难度高,且缺乏文档,且牵扯到流程很多,那么使用者就不可能通过自身去使用这个功能。

如何处理?

开发过程中的尾气是没法避免的:

  • 所有的代码实现其实都只考虑了一定程度的情况,若把视野拉长到足够远,任何代码结构都有“不够好”而需要重构的情况。
  • 所有功能都会在一定程度上占用某些方面的“公共资源”。
  • 所有功能都会在某一方面引入一定程度的“复杂性”。

所以在开发时就完全避免掉尾气,是几乎不可能的。

在我看来,只能在观察到尾气已经造成了一定程度的破坏后,再下手(比如进行代码重构,或者针对某个问题进行优化)。

但是,当你发起对尾气进行处理的请求时,PM或者管理者有时并不能很好地理解。比如“优化编辑器一半的启动时间”这个是完全可以理解的,但是“优化某个功能的代码结构”,就不好理解。因为代码结构属于是只有相关程序员才能切身体会到的问题,而且他也没法用数据表现出来。

因此,只有那些能被人理解,并且有数据支持的“尾气处理”,才容易得到PM和管理者的支持。

也不能过度关注

不过,我们的目标并非“消灭尾气”,因为没必要,而且也不可能处理干净。

如果过度关注尾气(比如让代码考虑过于长远的情况,比如花费太多精力去优化一个小小的问题),那么就会陷入“过度开发”的问题。

所以,到底需要处理尾气到何种程度?似乎只能通过经验去权衡,而这恐怕是最困难的问题。

总结

开发过程中有时虽然完成了需求,但是也留下了“尾气”,或者说“技术债”、“遗留问题”。少量的尾气一般不会有什么危害,但他们会“积累”和“交叉”。

想要开发时就完全避免掉尾气是几乎不可能的。只能在观察到尾气已经造成了一定程度的破坏后,再下手。但是只有那些能被人理解,并且有数据支持的“尾气处理”,才容易得到PM和管理者的支持。

另一方面,也不能过度关注尾气,否则就会陷入“过度开发”的问题。这只能通过经验去权衡。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】常用指令详解一(ls,-a,-l,-d,cd,pwd,mkdir,touch,rm,clear)

1.前言 读了一些Linux常用指令的博文,很可惜没读到一点点手把手教怎么操作的博文,所以写一篇手把手教适合初学者的Linux常用指令博文 Linux的命令是树状结构 输入这一句命令:yum install -y tree 即可以查看Linux树状目录结构 查看示例&am…

2024年中国研究生数学建模竞赛C题“数据驱动下磁性元件的磁芯损耗建模”全析全解

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 总领这个题,是属于数据挖掘和数据优化类型的题目&#xff…

Linux系统与服务构建运维

使用ext4文件系统格式化逻辑卷mylv。命令如下: 一、Linux操作系统安装 1.学习目标 (1)了解服务器操作系统安装。 (2)了解CentOS系统的安装。 2.节点规划 IP 主机名 节点 192.168.200.10 localhost Linux服务器…

HOSTS文件劫持--导致笔记本网络卡顿

写在前面: 因为笔记本网速卡顿,去维修店维修网卡,网卡咱们测试都没有问题,一直吐槽售后服务一般。自己也装过几次系统了 点击任务栏中的搜索图标,输入"cmd",点击"命令提示符"选择&qu…

Vivado的.v文件被误分类到Non-module Files中[filemgmt 20-2001] Source scanning failed

报错 所有新创建的Design Sources被分类到Non-module Files中 两条报错 1、[filemgmt 20-2001] Source scanning failed (launch error) while processing fileset “sources_1” due to unrecoverable syntax error or design hierarchy issues. Recovering last known analys…

STM32(十七):I2C通信外设

I2C外设 STM32内部集成了硬件I2C收发电路(USART是串口通信的硬件收发电路),可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能,减轻CPU的负担。 支持多主机模型(可变多主机&#xff…

python基础(二) 包和import

包的创建 文件创建命令 在 Django 中,python manage.py startapp first_app 这一行命令的作用是创建一个新的应用(app),名为 first_app。在 Django 项目中,"app" 是实现某些功能模块的单独部分&#xff0c…

詹妮弗洛佩兹25年发9张专辑3张是关于阿弗莱克的,爱恨情仇之深可见一斑!新专辑已定时间表!

詹妮弗洛佩兹25年共发9张专辑,有3张是关于本阿弗莱克的 内部人爆詹妮弗洛佩兹已定制作与本阿弗莱克的“心碎”专辑时间表 虽然詹妮弗洛佩兹最近的专辑《This Is Me…Now》以失败告终,但她可能已经准备好重返音乐工作室。但这一次,她将推出一…

校园美食地图:Spring Boot实现的探索与分享平台

第1章 绪 论 1.1课题背景 2021年处于信息高速发展的大背景之下。在今天,缺少手机和电脑几乎已经成为不可能的事情,人们生活中已经难以离开手机和电脑。针对增加的成本管理和操作,商家非常有必要建立自己的网上校园周边美食探索及分享平台,这既…

【Java】Java开发全攻略:从环境搭建到高效编程

文章目录 前言:1. JDK组成2. 配置JDK的环境变量3. 选择开发工具3.1 使用文本编辑器 命令行3.2 Java的跨平台原理3.3 IntelliJ IDEA 开发工具3.3.1 IDEA 创建 Java项目的代码结构3.3.2 使用IDEA开发第一个Java程序的步骤3.3.2 IDEA安装AI编程插件3.3.3 IDEA常用快捷…

【CSS in Depth 2 精译_033】5.4 Grid 网格布局的显式网格与隐式网格(中)

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对…

pytorch的动态计算图机制

pytorch的动态计算图机制 一,动态计算图简介 Pytorch的计算图由节点和边组成,节点表示张量或者Function,边表示张量和Function之间的依赖关系。 Pytorch中的计算图是动态图。这里的动态主要有两重含义。 第一层含义是:计算图的…

Swin Transformer—使用平移窗口的分层视觉转换器结构

Swin Transformer解读 论文题目:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows. 官方代码地址:https://github.com/microsoft/Swin-Transformer. 引言与概括 ICCV2021的最佳论文作者是来自微软亚洲研究院。 SwinTransforme…

基础实践:使用JQuery Ajax调用Servlet

前言 本博客介绍最简单的JQuery(原生JS的封装库)使用Ajax发送请求,并通过对应的servlet响应数据,并在页面显示,并且servlet响应的数据来自MySQL数据库。 实现需求:在前端页面的输入框中输入要注册的用户名&…

依赖库查看工具Dependencies

依赖库查看工具:Dependencies Dependencies 是一款 Windows 平台下的静态分析工具,用来分析可执行文件(EXE、DLL 等)所依赖的动态链接库(DLL)。它可以帮助开发者和系统管理员快速查找程序在运行时可能缺少的…

【机器学习】--- 决策树与随机森林

文章目录 决策树与随机森林的改进:全面解析与深度优化目录1. 决策树的基本原理2. 决策树的缺陷及改进方法2.1 剪枝技术2.2 树的深度控制2.3 特征选择的优化 3. 随机森林的基本原理4. 随机森林的缺陷及改进方法4.1 特征重要性改进4.2 树的集成方法优化4.3 随机森林的…

论文浅尝 | KAM-CoT: 利用知识图谱进行知识增强的多模态链式推理(AAAI2024)

笔记整理:沈小力,东南大学硕士,研究方向为多模态大预言模型、知识图谱 论文链接:https://arxiv.org/abs/2401.12863 发表会议:AAAI2024 1. 动机 本文探索了知识图谱在扩展大语言模型的多模态能力的效果,提出…

在jupyter notebook中取消代理服务器的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

使用GPU 加速 Polars:高效解决大规模数据问题

Polars 最近新开发了一个可以支持 GPU 加速计算的执行引擎。这个引擎可以对超过 100GB 的数据进行交互式操作能。本文将详细讨论 Polars 中DF的概念、GPU 加速如何与 Polars DF协同工作,以及使用新的 CUDA 驱动执行引擎可能带来的性能提升。 Polars 核心概念 Polar…

go libreoffice word 转pdf

一、main.go 关键代码 完整代码 package mainimport ("fmt""github.com/jmoiron/sqlx""github.com/tealeg/xlsx""log""os/exec""path/filepath" ) import _ "github.com/go-sql-driver/mysql"import &q…