为了账号安全,请及时绑定邮箱和手机立即绑定

过早的抽象

先,让我们定义一个你可能已经见过很多次的抽象概念

抽象是指通过隐藏复杂的实现细节,并仅展示理解和交互所需的关键特性和行为,来简化概念的过程。简单来说,抽象就是某个概念的简化表达

抽象概念可以有很多不同的形式,比如:

  • 接口:隐藏一个或多个实现的复杂性,提供一种与不同底层系统交互的一致方式。
  • 模块:封装一组相关的功能或类,提供一个清晰简化的交互界面,同时隐藏内部细节。
  • 函数:简化代码块中的复杂性,让我们专注于函数的作用,而不是实现细节。
过早地进行抽象化

你也许已经听说过术语‘过早优化’。这是 Donald Knuth 提出的一个概念:

程序员浪费了大量的时间去琢磨或担忧程序中非关键部分的效率,而这些追求实际上在调试和维护时产生了强烈的负面影响。我们应该忽略那些细微的效率提升,大约97%的时间里,我们不需要考虑:过早优化是万恶之首。然而,在那至关重要的3%里,我们不应错过。

虽然这个陈述是正确的,但在许多代码库中存在一个更加严重的问题:过早的抽象化

一个过早的抽象是在不完全的猜测基础上进行的假设。猜测是基于不完全事实的看法或结论。例如:“在未来,我们可能需要做X,所以我们要让函数Y足够灵活”或“我们可以设计一个灵活的数据结构以适应未来可能出现的需求”。

过早构建抽象或在设计时过于关注未来的可能性通常是在浪费时间。

为什么过早地进行抽象会这么糟糕?它可能导致各种问题,比如浪费精力,增加复杂度,如果抽象设计不恰当,灵活性也会降低,并且开发速度会变慢,从而影响整体进度。

我记得在以前的一家公司里,我们花了一个冲刺周期使我们的代码库尽可能通用以适应我们预见到的未来需求……但这些需求却从未出现,导致了大量的开发时间和精力被浪费。

在这里,我并不是说所有的通用解决方案或所有的抽象都不好。我只是指出,作为软件工程师,我们倾向于过早行动,这种情况非常常见。通常,应该在实际需要这些功能时才去实现,而不是在预见到它们可能需要时就去实现。

记得:过早地抽象化是所有问题的根源

这篇帖子摘自《Coder Cafe》 电子报 (第1期的 ).

![](https://imgapi.imooc.com/670dc3320998633704000400.jpg)

被无尽的技术内容淹没了?在Coder咖啡馆,我们每天为程序员奉上一个核心概念。由谷歌的一位资深软件工程师撰写,就像为你早晨咖啡精心调制的一样,帮助你深入提升编程技能。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消