写点什么

被劣质代码“残害”的这些年

  • 2020 年 3 月 31 日
  • 本文字数:1752 字

    阅读完需:约 6 分钟

被劣质代码“残害”的这些年

都已经 2020 年了,但我们仍然在生产劣质软件。自从计算机诞生以来,已经过去了近 70 年,但我们似乎还没有吸取所有的教训,仍然在犯着重复的错误。


科技行业的变化日新月异,或许今天看起来有意义的事情五年后就失去了其意义。我认为,这正是软件的一个迷人之处,因为它的可塑性很强。但是有一件事是不变的,那就是劣质软件带来的糟糕体验,我们似乎短期内无法克服它。


现在,开源生态系统中的优秀软件多如牛毛,以至于人们误以为劣等软件已经成为过去。其实不然,尽管开源软件在过去十年里呈现出爆炸式增长趋势,但这其中依然混迹着不少非常糟糕的软件,我每天都在“深受其害”。


劣质软件缘何而来?

编写优秀的软件的确很难,但这不能成为产出劣质软件的借口。你每天都在使用优秀的软件,所以应该知道如何来编写优秀的软件。优秀的软件总是“润物细无声”,在你没有察觉时就已完成了工作,而糟糕的软件会把你逼向崩溃边缘。但是,通常情况下,你不会看到或使用到特别多的糟糕软件,因为我们日常生活中使用的大多数软件都是消费软件,糟糕的软件无法在消费市场生存,但糟糕的软件确实存在,这是不争的事实。


据我所知,糟糕的软件在企业生态系统中普遍存在。最主要的原因有以下几点:


  • 在企业环境中,人对系统更加宽容;

  • 普通软件研发人员比消费市场型软件研发人员要少,普通软件开发者对于他们自己编写软件没有投入感情;

  • 软件所做的大部分工作是以机器对机器交互的形式完成的,当某些东西不能工作时,机器检查问题的能力不足;

  • 大多数情况下,编写企业软件的人不如为消费市场编写软件的人更了解他们的最终用户和他们的问题。



糟糕的软件是缺乏思考和错误决策的结果。每一行代码都很重要,每一个接触软件的人都会对其产生影响,甚至每一个决策都会影响软件的设计走向。如果你不编写单元测试,而是利用编写单元测试的时间来进行一些新特性的开发,那么这时系统中的 Bug 就会无孔不入,这种目光短浅又无知的决定是对几十年来积攒的经验智慧的一种亵渎。


软件不只是一个冰冷的机械,它也有情感。你可能会问为什么?因为它是工程师的逻辑和情感状态的精确体现,工程师开发软件时并不是只有一种情绪,软件是在工程师的多种情绪和状态下编写而成的,或难过、或开心、或高兴、或生气、或激动、或厌烦、或充满斗志,抑或沮丧憋闷,软件既能反映工程师的情绪,还能反映出工作场所的文化氛围。糟糕的企业文化几乎总是会产生糟糕的软件,这是显而易见的,因为大多数组织在规模变大后却因为糟糕的企业文化而最终衰败。


劣质软件带来的恶果

糟糕的软件会陷入恶性循环。技术债务不断堆积,会议越来越多,完成的工作却越来越少。会议上净是些陈词滥调的方法和管理实践,却没有人懂。糟糕软件就像癌症,大多数时候在最后阶段才显现出来,它会带来非常严重的后果,它也会降低工作效率,让人失去动力。软件工程是一项充满创造性的工作,但糟糕的软件会把工程变成维护工作。花在 Bug 修复上的时间比花在为改善终端用户体验上的时间要多。公司内部的一些问题开始渗透进来。虽然糟糕的软件是源于失败的团队,但是没有人承担责任,大家开始相互指责,在此情况下很容易滋生腐败,最终让员工备受煎熬。简而言之,糟糕的软件就是糟糕的企业文化的缩影。



Bug 是软件工程中不可避免的存在,但是如果 Bug 一直存在下去,那就是危险的信号,它会产生连锁反应。由于没有动力和缺少奖励,情况会变得更糟,在一切以交付为首要目标的情况下,鲜有人会对软件进行改进或在其中增加新的特性。它变成了一个没人敢碰的、失控的烂摊子,后患无穷。


如何改善劣质软件?

如何将糟糕的软件变成优秀的软件?这是个棘手的问题。我虽然不是专家,但我也愿意在这里与读者分享我的观点。首先,它变得如此糟糕,很大程度上说明了该组织的文化也出现了严重问题。改变文化比改变代码要难得多。文化是一个组织的支柱,即使有望改善它,也要面临很大的阻力,因为已经投入的资源是一个更大的问题,预防胜于治疗。


关于这个主题的文章不多。也许这个行业发展得太快了,以至于人们都来不及进行反思,或者与其把精力浪费在写作上,不如去解决其他紧迫的问题。总有更多的东西被发明,更多的问题等待着我们去解决,更多的工具要开发,但投入一点时间反思将有助于整个行业的发展。


原文链接:


https://techimadions.com/the-misery-of-bad-software/


2020 年 3 月 31 日 16:142752

评论 1 条评论

发布
用户头像
糟糕的代码真的有可能让所有努力付之东流
2020 年 04 月 01 日 14:11
回复
没有更多了
发现更多内容

架构实战营 - 模块 6- 作业

泄矢的呼啦圈

架构实战营

架构师实战营 模块六作业(拆分电商系统为微服务)

好吃不贵

业务架构

备战618!分布式电商项目:天猫Java亿级高并发架构设计笔记

Java架构追梦

Java 阿里巴巴 架构 面试 亿级架构

Dajngo网站开发---Task2

IT蜗壳-Tango

6月日更

Java常用的几个Json库,性能强势对比!

xcbeyond

性能优化 6月日更

简单实现springmvc中的请求处理

赵镇

springmvc

科技进步道阻且长,仍未来可期

架构精进之路

科技 6月日更

【架构实战营】第 6 模块作业

swordman

架构实战营

经济日报刊评:数字人民币应用场景拓展

CECBC

太为难我了,阿里面试了7轮(5年经验,拿下P7岗offer)

Java 程序员 架构 面试

JSON转Excel

入门小站

工具分享

Kubernetes手记(16)- 网络通信

雪雷

6月日更

架构实战营模块6作业

Vic

架构实战营

模块6作业 拆分电商系统为微服务

TH

架构实战营

webpack编译原理

法医

大前端 webpack 6月日更

解读SpringBoot和SpringMVC中配置类的@Impot等导入是如何解析的

赵镇

spring

Three.js杂记(十二)—— VR全景效果制作·中

空城机

大前端 three.js 6月日更

[译] R8 优化:Null 数据分析 (第一篇)

Antway

Angular | 浅谈Angular错误处理方式

devpoint

angular.js angular 6月日更

【Vue2.x 源码学习】第十八篇 - 根据 render 函数,生成 vnode

Brave

源码 vue2 6月日更

Python——命名元组 (namedtuple)

在即

6月日更

四个决策树让你彻底掌握 HTTP 状态码

看山

HTTP 6月日更

金融科技加速经济低碳转型 但面临政策、市场、技术等多方挑战

CECBC

软件技术从1996年以后就停滞不前了!?难道软件技术难返“春天”了么?

三掌柜

试用期 签约计划 人气作者 TOP10

JAVA面向对象(六)--类和对象

加百利

Java 6月日更

1年半经验,2本学历,Curd背景,竟给30K,我的美团Offer终于来了

Java 程序员 架构 面试

Nike上货提醒:监控到商品尺码SKU

木头

Nike监控 上货监控 SKU监控

【Flutter 专题】100 何为 Flutter Widgets ?

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 6月日更

微服务的由来

卢卡多多

微服务 6月日更

[译] R8 优化:Null 数据分析 (第二篇)

Antway

6月日更

被劣质代码“残害”的这些年_语言 & 开发_Ankit Singh_InfoQ精选文章