首页 > 其他分享 >不要让你的代码面向未来

不要让你的代码面向未来

时间:2023-04-12 23:05:52浏览次数:22  
标签:不要 编写 代码 面向未来 构建 简单 未来

image.png

你认为可能发生的事情并不重要。

开发人员喜欢让他们的计划面向未来。他们想确保他们预测未来的需求并相应地编写代码。坏消息是:人类非常不擅长预测未来。

这是一个重要的教训。预期编码通常是浪费精力。

这是一个陷阱!

经验丰富的工程师和新手工程师都会掉入陷阱。

他们试图猜测接下来会发生什么。他们将这些更改应用到当前设计中。

实际上,这意味着向数据库添加一些额外的字段,重构现有逻辑以提高性能,或者创建可重用资源以应对更多未来请求。

事情是这样的……

那些额外的字段、逻辑更改和可重用资源不是免费提供的。

他们花费时间和精力。当您不断修改设计以满足预期需求时,您将需要更长的时间来交付第一个版本。

不幸的是,这些额外的努力可能会被浪费掉。

你不知道你认为你知道的

现在,您可能觉得自己了解企业未来的需求。

我可以保证,你不会。

如果幸运的话,您可以预测未来需求的概率可能是十分之一。

其他 9 次,你浪费了精力和复杂性来为将来会改变或不需要的东西设计。

这是一个很难学习的教训。许多高级工程师甚至还没有了解的一个。我们一次又一次地陷入陷阱。在预期某些未来状态的情况下编写代码。

一个永远不会存在的想象中的未来。

这是如何进行的

您编写了一些漂亮的、面向未来的功能。或者,也许您使用一组未完成的端点为未来的功能奠定了基础。

似乎一切都朝着那个方向发展。你搞定了!您将成为预测未来需求并优雅地处理它们的英雄。

但突然之间,业务重点发生了变化。

  • 在公司会议上,首席执行官宣布了最新的重大举措。他们正在淘汰您预期会使用面向未来的代码的产品。
  • 或者,也许客户与产品团队分享反馈。他们实际上并不需要您正在构建的功能。他们有内部工具来处理它。
  • 也许销售团队发现您构建的功能很方便,但没有好的方法可以将其货币化。客户不会为此付费,因此需要取消对该功能的开发优先级。
  • 另一个团队有一组类似的功能。当他们得知您正在构建自己的版本时,他们想要合并功能集。您需要支持遗留用例和许多与您最初计划不同的要求。
  • 也许您的项目没有任何问题,但出现了其他更紧迫的事情。这需要您的团队花费几个月的时间,而且您永远无法重新获得充分构建解决方案的动力。它永远处于半生不熟的状态。

无论发生什么,您为未来设计的漂亮代码和设计永远不会面世。

YAGNI原则!

你不会需要它——这应该是你的口头禅。

计划得太早是危险的,而且会适得其反。很有可能,该代码不会有用。

它最终会成为技术债务。Cruft 您的团队必须在半维护状态下忍受一段时间。

我知道这很诱人,但拜托了!不要构建没有人要求的东西。

仅针对要求构建并停止。

该怎么做

让我发表我的人生格言:

构建满足要求的最简单的代码版本。

小改动,开发很快。这就是要走的路。

如果你发现自己在做一些面向未来的事情,问问自己,“我怎样才能让它变得更简单?” 当您开始思考“在未来我们可能需要 x……”时,您应该立即意识到您未来的自己将需要一个简单的代码库来工作。

你能做的最好的事情就是构建一些简单的东西。

你未来的自己不会想要一个由还不了解需求的人编写的过度紧张的伪解决方案。

除非你有时光机,否则你无法完全知道未来的需求!

因此,只需根据您今天的要求进行构建。然后,停下来。

简单并不容易

编写最简单的代码来满足要求看似困难。

您必须清楚地模拟手头的问题,并使解决方案的每个部分都易于理解。优雅的代码看起来很明显,但它需要大量的思考。

您可以做的最好的事情就是编写可扩展的代码,而不是让您的代码面向未来。

这意味着简单的功能、定义明确的类和全面的测试。将来,当你需要一个新功能时,应该清楚在哪里以及如何添加它。

答案很简单。

你无法预测未来,所以停止尝试。相反,尽最大努力尽可能简单地满足当今的要求。

每日清单

喜欢你在这里读到的吗?我每天早上为 2,000 名软件开发人员写一些新东西。

如果你喜欢我的文章,点赞,关注,转发!

标签:不要,编写,代码,面向未来,构建,简单,未来
From: https://blog.51cto.com/u_12409319/6186341

相关文章

  • 由于我这个操作,导致爆亏3000多块,下次不要再犯了!谨记!
    【注】:趋势看错一定要止损!切不可加仓摊低成本!【赚钱操作】:第一笔做空逻辑:当时大饼、以太当天都大涨,所以想法做空,主要想博回调的利润,CFX涨幅第一名,又看了下日线,正好处于压力位,止损位应该放在破新高的位置。第一笔保证金100刀,赚6刀止盈,看到反弹力量强就止盈了!【亏钱操作】:......
  • NumPy 秘籍中文第二版:九、使用 Cython 加速代码
    原文:NumPyCookbook-SecondEdition协议:CCBY-NC-SA4.0译者:飞龙在本章中,我们将介绍以下秘籍:安装Cython构建HelloWorld程序将Cython与NumPy结合使用调用C函数分析Cython代码用Cython近似阶乘简介Cython是基于Python的相对年轻的编程语言。它允......
  • 【视频】随机波动率SV模型原理和Python对标普SP500股票指数预测|数据分享|附代码数据
    全文链接:http://tecdat.cn/?p=22546最近我们被客户要求撰写关于随机波动率SV模型的研究报告,包括一些图形和统计输出。什么是随机波动率?随机波动率(SV)是指资产价格的波动率是变化的而不是恒定的。 “随机”一词意味着某些变量是随机确定的,无法精确预测。在金融建模的背景......
  • 数据分享|R语言用RFM、决策树模型顾客购书行为的数据预测|附代码数据
    全文链接:http://tecdat.cn/?p=30330最近我们被客户要求撰写关于RFM、决策树模型的研究报告,包括一些图形和统计输出。团队需要分析一个来自在线零售商的数据该数据包含了78周的购买历史。该数据文件中的每条记录包括四个字段。客户的ID(从1到2357不等),交易日期,购买的书籍数量,以及......
  • 高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数
    全文链接:http://tecdat.cn/?p=23378最近我们被客户要求撰写关于高维数据惩罚回归方法的研究报告,包括一些图形和统计输出。在本文中,我们将使用基因表达数据。这个数据集包含120个样本的200个基因的基因表达数据。这些数据来源于哺乳动物眼组织样本的微阵列实验1介绍在本文中,我......
  • 12号敲代码1小时
    实验五:实验2:#include<iostream>#include<string>usingnamespacestd;classvector3D{private:floatx,y,z;public:vector3D(floata=0,floatb=0,floatc=0):x(a),y(b),z(c){}friendistream&operator>>(istream&,vector3D&);frie......
  • 摸鱼用python代码收集每天大瓜内容信息,并发送到自己的邮箱
    本篇文章内容主要为如何用代码,把你想要的内容,以邮件的形式发送出去内容可以自己完善,还可以设置一个定时发送,或者开机启动自动运行代码代理注册与使用注册账号并登录生成api将自己电脑加入白名单http://api.tianqiip.com/white/add?key=xxx&brand=2&sign=xxx&ip=输入自己电脑的ip地......
  • 蛇形方阵-只有代码
    #include<iostream>#include<cstring>usingnamespacestd;intmain(){inta[100][100]={},n,x,y,num=1,i=0;cin>>n;//memset(a,0,sizeof(0));x=0,y=n-1;a[x][y]=num;while(num<n*n){......
  • 玫瑰代码
    #include<stdio.h>#include<math.h> constintmax_iterations=128;constfloatstop_threshold=0.01f;constfloatgrad_step=0.01f;constfloatclip_far=10.0f; constfloatPI=3.14159265359f;constfloatPI2=6.28318530718f;constfloatDEG_......
  • SpringBoot启动后获取特定注解的Bean实例代码(转)
    来自:https://zhuanlan.zhihu.com/p/375973197本文研究的主要是Spring启动后获取所有拥有特定注解的Bean,具体如下。最近项目中遇到一个业务场景,就是在Spring容器启动后获取所有的Bean中实现了一个特定接口的对象,第一个想到的是ApplicationContextAware,在setApplicationContext中......