阮一峰的网络日志

科技爱好者周刊#292:所有代码都是技术债

这里记录每周值得分享的科技内容,周五发布。

本杂志开源[1],欢迎投稿[2]。另有《谁在招人》[3]服务,发布程序员招聘信息。合作请邮件联系[4]([email protected][5])。

封面图

Image

意大利佛罗伦萨新机场,宣布了设计方案。候机楼顶部将有一个7.7公顷的葡萄种植园,用来酿造当地著名的葡萄酒。(via[6])

所有代码都是技术债

代码是公司的资产,公司总是鼓励大家多写代码。但是,很多人(尤其是管理层)没有意识到,代码也是负债。

代码越多,债越多,这就是程序员常说的“技术债”。

Image

今天我想谈谈,什么是“技术债”?为什么你拥有的代码太多,不是一件好事。

“技术债”(technical debt)源自著名程序员沃德·坎宁安(Ward Cunningham)的一篇文章[7]。他写了一句话:“交付代码就像负债累累。”

Image

你的代码一旦进入生产环境,就像背上一笔债务,将来需要不断支付利息,除非代码不再使用。

这个比喻获得了共鸣,人们把代码带来的负担,称为“技术债”。

为什么代码好比负债累累?这有两个原因。

第一个原因是,由于各种限制,代码的实现有问题,包含了 Bug,或者选择了有问题的组件,后期需要修改或重写。

第二个原因是,即使代码是完美的,但由于技术进步,它会逐渐腐化过时,后期需要不断维护和更新,这通常比原始开发成本更高。

这意味着,无论多么小心,上线的代码总是有“技术债”。 可以这样说,所有的代码都是技术债[8]。

Image

“技术债”的可怕之处,在于你必须按时偿还,如果拖着不还,它就会像雪球一样越滚越多,维护成本越来越高,直到再也无法维护,只能放弃这段代码。

既然所有代码都是技术债,程序员写代码时,就必须考虑到它的长期成本,尽量减轻自己或别人日后的负担(利息)。

一个基本的事实是 代码越少,技术债越小;没有代码,就没有技术债。从这个角度看,软件开发的正确做法是下面两点。

(1)冗余的代码都要删除。

(2)只实现那些必须实现的功能,除非绝对必要,不要引入新功能。新功能必然带来新的代码,而且新功能一旦添加,就很难废除,总是会保留下来。

葫芦 AI

主流的 AI 模型,目前都是收费制。如果同时使用多个模型,每月是一笔不小的费用,而且过程很麻烦。

•GPT-4:20美元/月•文心一言:49.9元人民币/月•Midjourney:10美元/月•DALL-E:每张图片0.02美元

国内新出的“葫芦 AI”(HuLu AI),尝试解决这个问题。它在同一个界面,提供上面四个模型的访问,相当于“四合一”的国内镜像。

这个服务刚刚推出,目前处在推广期,优惠力度很大,只要298元,就可以永久无限量使用,免除逐一访问 GPT4 / 文心一言 / Midjourney / DALL-E 的麻烦,而且访问速度快。

Image

葫芦 AI 希望通过周刊,向国内的开发者介绍自己。推广期结束后,他们将恢复原价498元。

它有试用点数,只要扫描上方海报的二维码,就可以免费试用。大家觉得效果满意,再考虑付费。

如果你对 AI 还不熟悉,葫芦 AI 还免费赠送学习资料。扫描上方二维码时,微信添加助理,就可以领取 【Sora 入门手册】 + 【ChatGPT 提示词大全】 + 【AI 变现案例实战手册】 的 AI 资料包。

科技动态

1、USB 止痒器[9]

市场上出现了一种奇特的 USB 设备,当你被蚊虫叮咬后,它可以用来止痒。

Image

你把它插入手机的 USB-C 口,然后用 App 可以控制它的发热。

Image

当它发热以后,将其贴在被咬处,等同于热敷,很快就不痒了。

Image

这么一个小玩意,在亚马逊的售价居然为30英镑(270元人民币)。

2、无音爆的超音速客机[10]

目前,世界上没有超音速客机,因为超音速飞行会产生音爆,影响城市居民的生活。

美国宇航局正在开发一种没有音爆的超音速客机,并且已经生产出了一架原型机。

Image

这架飞机长约30米,细长的圆锥形机头几乎占其整架飞机的三分之一。据说这种结构可以消除导致音爆的冲击波。

由于它的机头太长,驾驶室几乎位于整机二分之一的位置。这样的超音速飞机即使没有音爆,也载不了多少乘客吧。

3、单叶片风力发电机[11]

传统的风力发电机有三个叶片。

Image

一家荷兰公司发明了单叶片的风力发电机。

Image

它装在浮标上面,水底下是一个大桶,通过铁链固定在海床上。

Image

因为它是浮动的,根据风力和风向的不同,它跟海平面的角度也在随时发生变化。

Image

它的优点主要是,制造和安装的成本低。目前处于测试阶段,顺利的话将会大规模部署。

4、车贷防拖欠专利[12]

汽车贷款逾期不还,怎么办?福特汽车申请了一项专利,专门对付不还车贷的人。

Image

在贷款偿还期前后,车辆会发出多次付款提醒。如果置之不理,车辆就会开始失去一些功能,比如空调、GPS、车窗控制等等。

每当车主出现在车内时,车辆就发出语音提醒,要你还款。

Image

如果车主还是不还车贷,这个专利还有一个终极大招:车辆会自动开回停车场或者拖车点,让福特公司拖走回收。

文章

1、OpenAI 回应马斯克的长文[13](中文)

马斯克起诉 OpenAI[14],称后者违背开源承诺,成为微软的盈利性子公司。

Image

这篇是 OpenAI 长篇回应的中文翻译(英语原文[15]),透露了很多内幕。主要内容是 AI 需要大量算力和资金,所以不得不成立盈利性部门,马斯克当年对此知情,并表示支持。

2、Perplexity 会是“搜索的未来”吗?[16](中文)

Image

英伟达 CEO 黄仁勋向媒体透露,他每天都使用 AI 工具 Perplexity 进行搜索。本文介绍这个对话式搜索引擎。

3、入行 15 年,我还是觉得编程很难(中文)

腾讯技术专家对其15年程序人生的思考,总结了8点经验看法。

4、100万级安装量的开源作品,一年有多少打赏收入?[17](中文)

作者在自己的开源作品里面,放了一个赞赏码,一年带来330元的收入。(@xxxily[18] 投稿)

5、HTML 的 Switch 控件[19](英文)

Image

Safari 17.4 引入了一个新的表单控件“滑块开关”(switch),从而将 iPhone 的这个控件带入了网页。

6、为什么我选择 Tauri 而不是 Electron[20](英文)

Image

作者本来使用 Electron 开发跨平台桌面应用,后来改成了 Tauri。本文讲述了原因,以及他的感受。

7、text-wrap 的换行控制[21](英文)

Image

长文本的自动换行,由 CSS 的 text-wrap 属性控制。本文讨论如何使用这个属性,让标题产生更美观的自动换行。

8、计算机从哪里获取时间?[22](英文)

Image

计算机从 NTP(时间服务器)获取当前时间,但是 NTP 的时间又从何而来?本文图文形式地介绍人类如何确定时间。

9、如何在 Windows 上测试 Safari[23](英文)

Image

苹果的 Safari 浏览器现在没有 Windows 版,本文教你一种方法,依然可以在 Windows 上测试这个浏览器。

工具

1、Ente[24]

Image

一个云相册软件,Google Photos 和 iCloud Photos 的替代品,以前是闭源产品,最近刚刚开源。

它的主要特点是提供端对端加密。其他的云相册软件,还有 Immich[25] 和 PhotoPrism[26]。

2、Earthly[27]

Image

一个开源的 CI/CD 框架,可以在本地架设自动构建服务。

3、Vikunja[28]

Image

一个开源的代办事项(to-do)App,提供多种视图,有 Web 版和桌面版,还可以自己架设。

4、日语短文排版小工具[29]

Image

一个在线工具,生成漂亮的日文排版,支持横竖版式、自动假名标注、深浅两种主题、字体配置、高亮、下划线、字体等。(@miusuncle[30] 投稿)

5、Web-Check[31]

Image

开源的网站分析工具, 可以分析网站的 IP 信息、SSL 链、DNS 记录、Cookie、域名信息、服务器位置、网站性能等,查看 Demo[32]。(@WFANG12719[33] 投稿)

6、ImageTools[34]

Image

AI 一键抠图(去除背景)的在线工具。(@handsometong[35] 投稿)

7、zz-plan[36]

Image

甘特图/横道图的在线制作工具。(@lizhichao[37] 投稿)

8、Windows in container[38]

Docker 容器里运行 Windows 系统,可选择 Win7,Win10,Win11 等,支持自动激活,还支持远程桌面连接。(@wrenashe[39] 投稿)

9、Rsdoctor[40]

Image

一个 JS 构建器的分析工具,能够查看构建产物的模块关系,并分析构建器对代码的更改,支持 Rspack 和 Webpack。(@easy1090[41] 投稿)

10、Photo Relay[42]

Image

一个封面图片制作的在线工具。 Demo[43]。(@zobor[44] 投稿)

11、opfs-tools[45]

浏览器私有文件系统 OPFS API 的一个封装库,提供更简单好用的 API。(@hughfenghen[46] 投稿)

12、ast-grep VSCode[47]

一个使用正则表达式进行代码搜索、替换的 VSCode 插件。(@HerringtonDarkholme[48] 投稿)

掘金动手实验室

学习新技术,最重要的就是动手实操,但是这样的机会比较少,你不一定能遇到让你尝试的场景。

本周有一个好消息,掘金动手实验室(JUEJIN Code Lab) 正式推出啦!

它是一个新技术实操为主题的系列活动,致力于理论知识转化为实际应用,并让参与者之间进行技术交流。

它由稀土掘金技术社区精心策划,与众多领先的工具和平台厂商携手合作,将涵盖多个技术领域,确保每一位参与者都能找到自己感兴趣的内容。

Image

第一期活动的主题,就是现在最热门的 AI,由稀土掘金社区和扣子(coze.cn)共同发起。本次活动通过动手实操的方式,让你的想法和创意在 AI 的帮助下落地。

活动分为3月16日的北京场[49]和3月30日的深圳场[50],地点就在北京/深圳的字节工区。

所有线下参与的同学,除了能够接触 AI 开发以外,还都有机会获得掘金的丰富礼包、以及扣子(coze.cn)的官网推荐、API 内测和官方访谈。

欢迎大家点击链接[51],或者扫码海报的二维码,报名参与,进行 AI 开发实操。

资源

1、一译[52]

Image

用户可以在该网站搜索或者上传 arXiv 论文(暂时只支持 HTML 版本的论文),它会自动机器翻译,提供对照阅读。(@yiyibooks[53] 投稿)

2、京墨[54]

Image

一个开源的安卓 App,随身的古诗文、歇后语、成语、绕口令等等的图书馆。(@hefengbao[55] 投稿)

3、OpenMoji[56]

Image

这个项目收集各种开源的 Emoji,开发者和设计师可以提交自己的作品。

4、Docker Compose Examples[57]

这个仓库收集各种常用的 Docker Compose 配置文件。

5、学习 x86-64 汇编语言[58]

Image

一本英文的汇编语言入门教材,以 Ubuntu 平台为例。

图片

1、落叶艺术[59]

一个欧洲艺术家在公园里,把落叶整理成各种奇怪的形状,让公园有了更多的趣味。

Image

Image

Image

2、最后的快车[60]

《最后的快车》(The Last Express)是上个世纪末发行的一款电子游戏。

Image

它讲述了一个美国人在1914年,登上最后一班从巴黎到伊斯坦布尔的“东方快车”的故事。

整个游戏场景,都发生在车厢内。下面是真实车厢的历史照片。

Image

游戏设计师根据这张照片,进行建模,以数字形式还原了当时的场景。

Image

Image

文摘

1、有些人就像 ChatGPT[61]

大家都说 ChatGPT 像人,但是我觉得,还有另一方面,那就是有些人很像 ChatGPT,尤其是在学术界。

Image

ChatGPT 不理解任何材料,但可以利用这些材料,快速找到问题的合理答案。它会综合和模仿,有时表现得非常令人信服,就像某个知识渊博的人在谈论某个主题。

学术界的很多人也是这样,他们很聪明,吸收了说话和构建理论的方法,并且善于听起来令人信服。

但是,如果你问一个探索性的问题,就会发现他们的理解很少,一切侃侃而谈都是表面的,没有深度。这都是模仿而不是真正的思想,他们只是故意让别人觉得似乎有道理。

许多领域的许多人,表现得就像 ChatGPT 的真人版,特别是在那些不做太多实证工作、不涉及对事实或假设进行检验的学科。他们制造的文本越多,就越危险。

这种人有很多明显迹象,比如使用非常笼统的术语,以及听起来巧妙的表述或行话,内容里面很少有事实,例子也很少或者很随意,没有真实的感受,而且通常也不会足够清楚地说出他不同意什么。

我现在意识到,我不理解某人在说什么,有时很可能是他们不知道自己在说什么,表现得像 ChatGPT。

我将其称为“吹泡泡”,即没有实质内容但能让他人信服的说话能力。这是很多大学领导的重要技能。

现在,ChatGPT 向我们展示了尽管不理解,但将大量材料合成为可信的文本流,是完全可以做到的。也许这是不可避免的,但真是一种非常不健康的恶习——人们应该走出去,观察事物,清晰说出自己的真实感受。

我明确意识到,自己更愿意被那些行为不像机器人的人包围,更愿意倾听那些有原创思想的人的声音。

言论

1、

如果你没有时间集中精力学习新知识,那么就花时间复习已经学过的内容。

-- Hacker News 读者[62]

2、

浏览器地址栏兼作搜索输入栏,这一定是史上最值钱的 UI 控件。谷歌为了成为这个控件的默认搜索引擎,每年支付 Firefox 4亿美元,Safari 150-200亿美元。

-- 《史上最值钱的 UI 控件》[63]

3、

一切都是模糊的,直至你试图使其精确时,你才会发现,我们日常表达出来的精确与真正的精确相距甚远。以至于当我们说话时,你无法假设这就是对方真正的意思。

-- 伯特兰·罗素[64](Bertrand Russel),英国哲学家

4、

忒修斯之船(Ship of Theseus)是公元一世纪的希腊作家普鲁塔克提出的哲学问题:如果雅典国王忒修斯的船的木头逐渐被替换,直到所有的木头都不是原来的木头,那这艘船还是原来的那艘船吗?

-- 维基百科[65]

5、

每一个最佳实践的背后都有一个恐怖的经历。

-- Julia Evans[66]

往年回顾

摩天大楼是反人类的(2023 #245)

你做过不在乎结果的项目吗?(2022 #195)

大家不出门,经济怎么办?(2021 #145)

远程办公暴露冗余岗位(2020 #95)

(完)

References

[1] 开源: https://github.com/ruanyf/weekly
[2] 投稿: https://github.com/ruanyf/weekly/issues
[3] 《谁在招人》: https://github.com/ruanyf/weekly/issues/4075
[4] 邮件联系: mailto:[email protected]
[5] [email protected]: mailto:[email protected]
[6] via: https://www.euronews.com/travel/2024/02/14/wine-meets-travel-florences-new-airport-will-have-a-vineyard-on-its-roof
[7] 一篇文章: https://queue.acm.org/detail.cfm?id=2168798
[8] 所有的代码都是技术债: https://www.tokyodev.com/articles/all-code-is-technical-debt
[9] USB 止痒器: https://shkspr.mobi/blog/2023/12/usb-c-cures-mosquito-bites/
[10] 无音爆的超音速客机: https://techxplore.com/news/2024-01-nasa-lockheed-martin-reveal-quiet.html
[11] 单叶片风力发电机: https://newatlas.com/energy/touchwind-floating-wind-turbine/
[12] 车贷防拖欠专利: https://www.thedrive.com/news/future-fords-could-repossess-themselves-and-drive-away-if-you-miss-payments
[13] OpenAI 回应马斯克的长文: https://finance.sina.com.cn/stock/usstock/c/2024-03-06/doc-inamkuik5589602.shtml
[14] 起诉 OpenAI: https://finance.sina.cn/2024-03-01/detail-inakvvhe8160978.d.html
[15] 英语原文: https://openai.com/blog/openai-elon-musk
[16] Perplexity 会是“搜索的未来”吗?: https://wallstreetcn.com/articles/3709779
[17] 100万级安装量的开源作品,一年有多少打赏收入?: https://juejin.cn/post/7341593721100451880
[18] @xxxily: https://github.com/ruanyf/weekly/issues/4092
[19] HTML 的 Switch 控件: https://webkit.org/blog/15054/an-html-switch-control/
[20] 为什么我选择 Tauri 而不是 Electron: https://aptabase.com/blog/why-chose-to-build-on-tauri-instead-electron
[21] text-wrap 的换行控制: https://clagnut.com/blog/2424
[22] 计算机从哪里获取时间?: https://dotat.at/@/2023-05-26-whence-time.html
[23] 如何在 Windows 上测试 Safari: https://james.darpinian.com/blog/safari-on-windows
[24] Ente: https://github.com/ente-io/ente
[25] Immich: https://immich.app/
[26] PhotoPrism: https://github.com/photoprism/photoprism
[27] Earthly: https://earthly.dev/
[28] Vikunja: https://vikunja.io/
[29] 日语短文排版小工具: https://miusuncle.github.io/japen/
[30] @miusuncle: https://github.com/ruanyf/weekly/issues/4080
[31] Web-Check: https://github.com/Lissy93/web-check
[32] Demo: https://web-check.xyz/
[33] @WFANG12719: https://github.com/ruanyf/weekly/issues/4086
[34] ImageTools: https://ai-image.tools/home
[35] @handsometong: https://github.com/ruanyf/weekly/issues/4087
[36] zz-plan: https://zz-plan.com/
[37] @lizhichao: https://github.com/ruanyf/weekly/issues/4088
[38] Windows in container: https://github.com/dockur/windows
[39] @wrenashe: https://github.com/ruanyf/weekly/issues/4091
[40] Rsdoctor: https://github.com/web-infra-dev/rsdoctor
[41] @easy1090: https://github.com/ruanyf/weekly/issues/4095
[42] Photo Relay: https://github.com/zobor/photo-relay
[43] Demo: https://www.duelpeak.com/pages/poster
[44] @zobor: https://github.com/ruanyf/weekly/issues/4094
[45] opfs-tools: https://github.com/hughfenghen/opfs-tools
[46] @hughfenghen: https://github.com/ruanyf/weekly/issues/4099
[47] ast-grep VSCode: https://marketplace.visualstudio.com/items?itemName=ast-grep.ast-grep-vscode
[48] @HerringtonDarkholme: https://github.com/ruanyf/weekly/issues/4100
[49] 北京场: https://www.bagevent.com/event/8791420?bag_track=ryf
[50] 深圳场: https://www.bagevent.com/event/8796081?bag_track=ryf
[51] 点击链接: https://www.bagevent.com/event/8791420?bag_track=ryf
[52] 一译: https://yiyibooks.cn/
[53] @yiyibooks: https://github.com/ruanyf/weekly/issues/4083
[54] 京墨: https://github.com/hefengbao/jingmo
[55] @hefengbao: https://github.com/ruanyf/weekly/issues/4081
[56] OpenMoji: https://github.com/hfg-gmuend/openmoji
[57] Docker Compose Examples: https://github.com/Haxxnet/Compose-Examples
[58] 学习 x86-64 汇编语言: http://www.egr.unlv.edu/~ed/x86.html
[59] 落叶艺术: https://kottke.org/23/09/artistic-leaf-raking
[60] 最后的快车: https://www.filfre.net/2023/10/the-last-express/
[61] 有些人就像 ChatGPT: https://www.geoffmulgan.com/post/human-chatgpts-and-the-vices-of-foggy-thinking
[62] Hacker News 读者: https://news.ycombinator.com/item?id=38676257
[63] 《史上最值钱的 UI 控件》: https://blog.jim-nielsen.com/2023/most-profitable-ui-element-ever/
[64] 伯特兰·罗素: https://siddhesh.substack.com/p/projects
[65] 维基百科: https://zh.wikipedia.org/wiki/%E5%BF%92%E4%BF%AE%E6%96%AF%E4%B9%8B%E8%88%B9
[66] Julia Evans: https://buttondown.email/hillelwayne/archive/advice-for-new-software-devs-whove-read-all-those/