最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

超越库和框架的技术创新

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:372537

评论 1 条评论

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

九月 NFT 行业解读:熊市情绪仍占上风

Footprint Analytics

区块链 NFT 链游

前端开发工具有哪些?17款前端工程师必备工具推荐!

彭宏豪95

效率 前端开发 开发工具 前端工程师 办公软件

低代码加速软件开发进程

树上有只程序猿

低代码开发 JNPF

经人行批准!华为旗下支付机构更名,进入负一屏“发现”页享华为支付

最新动态

Python 爬虫实战之爬拼多多商品并做数据分析

Noah

国外服务器入门:为何越来越多的企业选择海外托管?

一只扑棱蛾子

国外服务器

公链开发团队 公链钱包

西安链酷科技

公链开发 区块链开发链游开发

如何设计 API?看这一篇就够了

高端章鱼哥

API

百度何俊杰:扎根百度技术“黑土地”,造大模型“生态雨林”

Geek_2d6073

Scrum敏捷项目管理关键

顿顿顿

敏捷开发 敏捷项目管理 scrum敏捷工具

如何通过代码混淆绕过苹果机审,解决APP被拒问题

雪奈椰子

极光笔记 | 发送功能使用技巧分享

极光JIGUANG

营销 消息推送 邮件 邮件通知 海外市场

体育直播在线观看软件平台开发,建立常态化的促消费机制

软件开发-梦幻运营部

加入鲲鹏HPC训练营,一起引领高性能计算新潮流

科技热闻

如何优化模型渲染性能

3D建模设计

性能提升 渲染优化

平均检出率“

矩视智能

深度学习 机器视觉

DVD-Cloner 2023 for Mac(DVD刻录软件) v10.20.738中文激活版

mac

苹果mac Windows软件 DVD-Cloner DVD复制软件

白皮书编写中英文ppt、mg动画解说视频、多国多人会议视频制作、

西安链酷科技

DAPP系统开发 项目白皮书

1024程序员节(源聚一堂北京站)节目有奖征集!

开放原子开源基金会

XMind mac (XMind思维导图)v23.09中文激活版

mac

XMind 思维导图软件 苹果mac Windows软件

MatrixOne Logtail 设计解析

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne HTAP数据库

币圈项目媒体宣发资料 广告宣传推广 新闻媒体发文

西安链酷科技

宣发 包装 项目运营

金色财经发文、 区块链财经媒体发布文章

西安链酷科技

广告宣发

十几种排序算法的可视化效果,快来看看!

编程的平行世界

算法 可视化

如何选择适合自己的音视频产品

X2Rtc

开源 音视频 RTC

公链项目生态搭建 dao组织建设 合约开发 - DAPP开发

西安链酷科技

代币 公链开发

一键生成!盘点那些好用的3D建模AI生成工具!

Finovy Cloud

AI 3d建模

向量召回:深入评估离线体系,探索优质召回方法

汀丶人工智能

人工智能 自然语言处理 语义搜索系统 文本匹配 向量召回

链游开发需要多少钱 链游开发技术团队

西安链酷科技

链游开发

AGI 黑客松收官,Zilliz 向量数据库助力34支参赛队伍角逐大模型时代的Killer App

Zilliz

黑客松 Zilliz AGI 向量数据库

低代码:让软件开发不再遥不可及

互联网工科生

低代码 应用开发 JNPF

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