写点什么

超越库和框架的技术创新

Nils Norman Haukås

  • 2022-05-05
  • 本文字数:2385 字

    阅读完需:约 8 分钟

超越库和框架的技术创新

本文最初发布于 Nils Norman Haukås 的个人博客。


我认为,我们的眼光不应局限于库和框架,而应该重新发现模式和原则的价值,这样可以减少破坏性变化,让我们构建的东西更持久。


一段时间以来,我一直秉持“编写库而非框架”的理念。最近,我开始思考,似乎可以对这个观点做一个富有成效的扩展,即原则胜过模式,模式胜过库,库胜过框架。


让我们澄清一下这几个术语:


  • 框架:这(通常)是别人的代码调用你的代码。为了实现这样的调用,你的代码需要符合框架所定义的约束。通常,这些约束有非常明确的界限,编码时很难绕过。反过来说,在框架的约定和规范下编码,你往往会获得很多有用的功能,加快编码速度。

  • 库:这(通常)是从你的代码中调用别人的代码。与框架相比,库对你的代码施加的限制比较少。通过使用一个或多个库,你可以重用别人的代码来解决自己的问题。库更容易组合和互换,而同时使用不同的框架可能会带来麻烦。

  • 模式:这是一种描述性的、可重用的代码编写方法(见:软件设计模式)。模式在模糊性、适用性和规定性方面有很大的差异。举例来说,有尽早返回模式、构建者模式、行为者模型、模型 - 视图 - 控制器、洋葱架构、微服务、宏单体、单库和流式架构等。这些只是我能想到的一些模式,涉及编程模式的书很多。

  • 原则:这是一些一般指导原则或是以规则形式表达的理念(如经验法则),可以帮助你写好代码。尽管与几千年来一直在建造房屋的木工领域相比,编程是一个非常年轻的领域,但是开发人员已经设法提炼出一些有用的原则来帮助他们开展工作。举例来说,有 SOLID 原则、不要重复代码(DRY)、不要过度设计(YAGNI)、敏捷宣言、迪米特法则、海勒姆法则。还有很多,在我写这篇文章的时候,我刚刚发现了这个收集编程原则的网站,很不错!


这里我必须得补充一句:不要过度使用和 / 或在不适合的情况下使用它们(见:工具法则)。例如,这里有一篇题为“错误的抽象”的文章,开发者 Sandi Metz 对开发人员不惜一切代价应用 DRY 原则的倾向做了精彩的点评。

谁来维护维护者?


我在这里并不是说我们应该停止使用框架和库,但我们应该认识到,使用它们是一种权衡,我们付出一些成本并获得一些功能。比如说,保持更新的成本。代码库更新滞后可能会遭受漏洞攻击。相反,如果你不加辨别地安装最新的更新,就为供应链攻击(恶意代码被插入到一个或多个软件包中)打开了大门。


除了与安全有关的成本外,还有一个风险是,你所依赖的代码会因为作者倦怠或内部团队变化而被废弃。显然,一直都有各种各样的东西被停止使用。对此,你可能会反驳说:“它是开源的,我们可以创建分叉。”这倒是,但你会维护它吗?我认为,在添加任何特定的依赖时,问问自己:放弃这个依赖的可能性有多大?如果出现了这样的情况,我应该怎么做?维护它还是换掉它?至少,库往往更容易替换。


我们如何衡量一些代码项目是否有被放弃的风险?我们倾向于看最近的活动,只要试着在 Github 上搜索”is this dead“。面对问题的冲击,作者要么宣布项目破产并将其归档,要么不对问题做出回应并逐步淡出人们的视线,要么加速推出新的功能并扩大代码的适用范围,解决任何用户遇到的任何问题。屈服于这样的功能热,很快就会导致破坏性的变化,需要重构代码,记录升级路径,并对那些拼命想跟上所有变化的开发者的问题做出回应。任何成熟稳定的技术都有可能被宣布“死亡”,并被这个超级敏感的行业所剔除。关于这一点,我在文章“好代码之死”中提到过。


使用他人的代码也会带来隐性的变更成本,升级或放弃都会很痛苦。框架和库通常会引入它们特有的概念。换句话说,如果你决定转到另一个框架或库,那么你通过使用和调试这个工具所积累的所有经验可能都将变得毫无用处。而且,眨眼之间,你所依赖的框架就会发布一个重要的版本升级,删除旧版本中特有的概念,使你辛苦积累的所有经验都失去意义。再加上沉没成本悖论,这种成本很容易在不知不觉间加剧。

超越库和框架


我觉得,在我们寻找新的、更好的方法构建技术时,我们不应该把我们的思维局限在从库和框架中寻找答案。


但是,除此之外还有什么呢?


在开始回答这个问题之前,我想指出我在网络上偶然发现的一些有趣的暗流。首先,Adrian Holovaty 有一个有趣的演讲,题目是“一个框架作者的反框架故事”。他认为,在没有框架的情况下也完成可以构建出功能丰富的 Web 应用。其次,当读到 Remix Run 框架的理念时,我感到万分惊喜:


我们的抽象足以保证你的应用程序的性能 [......],而且不会隐藏底层技术。了解了如何在 Remix 中用 links 预取资产,就学会了如何在任何网站中预取资产。


这句话读起来就像是我上面提到的变更成本的解药。学习一些技术意味着学习可转移的知识,这是一个加分项。


第三,我了解了“Stackless Way”的概念,并阅读了 Elise Hein 写的一篇非常有趣的文章。她探讨了这种非正统的想法,即追求不设置构建步骤、不使用框架的“无栈(stackless )”。


当我创立网络组件工作室时,我也选择探索一下自己可以在多大程度上采用无栈方法。我发现,现代浏览器功能非常强大,可以在不引入外部代码的情况下编写出丰富的功能。我感觉这相当令人振奋和自由。是的,这种方法仍有一些不完善的地方。不过,这里所缺少的可能不是成熟的框架或库,而是一本模式和原则手册。


想象一下,因为我们投入时间去发现和建立模式与原则,而使得一个行业不再那么依赖库和框架。我相信,这样的未来可以减少维护者的倦怠,减少破坏性的变化,为我们带来更优秀、更长久的程序。

今后,你仍然会发现我在使用框架和库,我甚至会编写一些新的框架和库。不过,这种无栈方法、有用的模式和原则、可转移的知识,是我要寻求和探索的。


作者 Nils Norman Haukås 是 Netlife Bergen 的首席技术官,他负责删除代码,打造技术卓越的安全空间,并研究减少会议的新方法。


查看英文原文:


https://nilsnh.no/2022/04/09/innovating-beyond-libraries-and-frameworks/

2022-05-05 18:373360

评论 1 条评论

发布
用户头像
翻译的相当糟糕,甚至比不上机翻
2022-05-07 08:49
回复
没有更多了
发现更多内容

Sechunter移动应用隐私合规检测详解

华为云开发者联盟

移动应用 目标检测 隐私 Sechunter 隐私合规

模块四学习总结

Geek_1d37ea

架构训练营

0.99M,150FPS,移动端超轻量目标检测算法PP-PicoDet来了!

百度大脑

人工智能 百度

openGauss开源自动化测试框架Yat,增强社区测试能力

web技术分享| LRU 缓存淘汰算法

anyRTC开发者

缓存 音视频 WebRTC LRU web技术分享

和 VMware、深信服、天翼云、招商云专家一起聊聊云原生边缘计算

阿里巴巴云原生

阿里云 容器 云原生 KubeMeet 线下活动

售后支持领域的服务指标

Geek_utwige

方法论 技术管理 指标体系 数据指标 客户服务

Tapdata 在线研讨会:DaaS vs 大数据平台,是竞争还是共处?

tapdata

数据库

应用不停机发布的思考与初识

陈俊

高可用 技术架构 不停机发布

深入理解 WKWebView(入门篇)—— WebKit 源码调试与分析

百度Geek说

Webkit

[SpringBoot源码分析]SpringBoot如何启动

零点999

spring SpringBoot 2

奖金翻倍!Flink Forward Asia Hackathon 最新参赛指南请查收

Apache Flink

大数据 flink 编程 后端 hackathon

DevEco Testing,新增分布式测试功能|HDC2021技术分论坛

HarmonyOS开发者

HarmonyOS

压缩比达到7:1,TDengine助力校园智慧用电系统降本增效

TDengine

tdengine 时序数据库

稳若磐石的焱融 SaaS 服务平台背后,是数据生态的崛起

焱融科技

云计算 分布式 高性能 公有云 文件存储

数仓如何限制临时数据文件下盘量

华为云开发者联盟

sql 线程 GaussDB(DWS) 临时文件 落盘

模块四作业

Geek_1d37ea

架构训练营

Kubernetes 已经成为云原生时代的安卓,这就够了吗?

阿里巴巴云原生

阿里云 Kubernetes 云原生 学习资料 应用管理平台

一张图 GET 社交泛娱乐出海大招

融云 RongCloud

一文带你快速掌握PTN网络的路由计算

鲸品堂

又添权威认定,旺链科技通过可信区块链专项认证!

旺链科技

区块链 产业区块链 技术测评 数字化经济

软件开发除了23种设计模式,还有7个开发原则需要了解

华为云开发者联盟

设计模式 软件开发 开发 对象 SOLID

云原生时代:看 Apache APISIX 如何玩转可观测性

API7.ai 技术团队

云原生 可观测性 Skywalking API网关 Apache APISIX

WICC 花城登场,揭秘时代变局下通信服务新形态

融云 RongCloud

开发者 社交 元宇宙 泛娱乐 通信云技术大会

【概率】抽屉中的袜子

潮汐朝夕

概率

100行代码,轻松搞定文本编辑器中草稿箱

Tom弹架构

Java 架构 设计模式

HarmonyOS内核技术大揭秘|HDC2021技术分论坛

HarmonyOS开发者

HarmonyOS

Forrester发布首份《中国低代码平台发展报告》,有多少企业应用低代码?

J2PaaS低代码平台

敏捷开发 低代码 低代码开发 低代码平台 低代码报告

学不懂Netty?看不懂源码?不存在的,手把手带你阅读Netty源码

热爱java的分享家

Java 架构 程序人生 编程语言 经验分享

灵犀平台—API的全可视化开发

鲸品堂

开发者 工具

Meetup 报名|开源分布式数据库探索和应用

OceanBase 数据库

数据库 分布式 活动 技术交流 oceanbase

超越库和框架的技术创新_大前端_InfoQ精选文章