科技愛好者週刊(第 292 期):所有程式碼都是技術債

阮一峰發表於2024-03-08

本雜誌開源,歡迎投稿。另有《誰在招人》服務,釋出程式設計師招聘資訊。合作請郵件聯絡[email protected])。

封面圖

義大利佛羅倫薩新機場,宣佈了設計方案。候機樓頂部將有一個7.7公頃的葡萄種植園,用來釀造當地著名的葡萄酒。(via

所有程式碼都是技術債

程式碼是公司的資產,公司總是鼓勵大家多寫程式碼。但是,很多人(尤其是管理層)沒有意識到,程式碼也是負債

程式碼越多,債越多,這就是程式設計師常說的"技術債"。

今天我想談談,什麼是"技術債"?為什麼你擁有的程式碼太多,不是一件好事。

"技術債"(technical debt)源自著名程式設計師沃德·坎寧安(Ward Cunningham)的一篇文章。他寫了一句話:"交付程式碼就像負債累累。"

你的程式碼一旦進入生產環境,就像背上一筆債務,將來需要不斷支付利息,除非程式碼不再使用。

這個比喻獲得了共鳴,人們把程式碼帶來的負擔,稱為"技術債"

為什麼程式碼好比負債累累?這有兩個原因。

第一個原因是,由於各種限制,程式碼的實現有問題,包含了 Bug,或者選擇了有問題的元件,後期需要修改或重寫。

第二個原因是,即使程式碼是完美的,但由於技術進步,它會逐漸腐化過時,後期需要不斷維護和更新,這通常比原始開發成本更高。

這意味著,無論多麼小心,上線的程式碼總是有"技術債"。 可以這樣說,所有的程式碼都是技術債

"技術債"的可怕之處,在於你必須按時償還,如果拖著不還,它就會像雪球一樣越滾越多,維護成本越來越高,直到再也無法維護,只能放棄這段程式碼。

既然所有程式碼都是技術債,程式設計師寫程式碼時,就必須考慮到它的長期成本,儘量減輕自己或別人日後的負擔(利息)。

一個基本的事實是 程式碼越少,技術債越小;沒有程式碼,就沒有技術債。從這個角度看,軟體開發的正確做法是下面兩點。

(1)冗餘的程式碼都要刪除。

(2)只實現那些必須實現的功能,除非絕對必要,不要引入新功能。新功能必然帶來新的程式碼,而且新功能一旦新增,就很難廢除,總是會保留下來。

葫蘆 AI

主流的 AI 模型,目前都是收費制。如果同時使用多個模型,每月是一筆不小的費用,而且過程很麻煩。

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

國內新出的"葫蘆 AI"(HuLu AI),嘗試解決這個問題。它在同一個介面,提供上面四個模型的訪問,相當於"四合一"的國內映象。

這個服務剛剛推出,目前處在推廣期,優惠力度很大,只要298元,就可以永久無限量使用,免除逐一訪問 GPT4 / 文心一言 / Midjourney / DALL-E 的麻煩,而且訪問速度快。

葫蘆 AI 希望透過週刊,向國內的開發者介紹自己。推廣期結束後,他們將恢復原價498元。

它有試用點數,只要掃描上方海報的二維碼,就可以免費試用。大家覺得效果滿意,再考慮付費。

如果你對 AI 還不熟悉,葫蘆 AI 還免費贈送學習資料。掃描上方二維碼時,微信新增助理,就可以領取 【Sora 入門手冊】 + 【ChatGPT 提示詞大全】 + 【AI 變現案例實戰手冊】 的 AI 資料包。

科技動態

1、USB 止癢器

市場上出現了一種奇特的 USB 裝置,當你被蚊蟲叮咬後,它可以用來止癢。

你把它插入手機的 USB-C 口,然後用 App 可以控制它的發熱。

當它發熱以後,將其貼在被咬處,等同於熱敷,很快就不癢了。

這麼一個小玩意,在亞馬遜的售價居然為30英鎊(270元人民幣)。

2、無音爆的超音速客機

目前,世界上沒有超音速客機,因為超音速飛行會產生音爆,影響城市居民的生活。

美國宇航局正在開發一種沒有音爆的超音速客機,並且已經生產出了一架原型機。

這架飛機長約30米,細長的圓錐形機頭幾乎佔其整架飛機的三分之一。據說這種結構可以消除導致音爆的衝擊波。

由於它的機頭太長,駕駛室幾乎位於整機二分之一的位置。這樣的超音速飛機即使沒有音爆,也載不了多少乘客吧。

3、單葉片風力發電機

傳統的風力發電機有三個葉片。

一家荷蘭公司發明了單葉片的風力發電機。

它裝在浮標上面,水底下是一個大桶,透過鐵鏈固定在海床上。

因為它是浮動的,根據風力和風向的不同,它跟海平面的角度也在隨時發生變化。

它的優點主要是,製造和安裝的成本低。目前處於測試階段,順利的話將會大規模部署。

4、車貸防拖欠專利

汽車貸款逾期不還,怎麼辦?福特汽車申請了一項專利,專門對付不還車貸的人。

在貸款償還期前後,車輛會發出多次付款提醒。如果置之不理,車輛就會開始失去一些功能,比如空調、GPS、車窗控制等等。

每當車主出現在車內時,車輛就發出語音提醒,要你還款。

如果車主還是不還車貸,這個專利還有一個終極大招:車輛會自動開回停車場或者拖車點,讓福特公司拖走回收。

文章

1、OpenAI 回應馬斯克的長文(中文)

馬斯克起訴 OpenAI,稱後者違背開源承諾,成為微軟的盈利性子公司。

這篇是 OpenAI 長篇回應的中文翻譯(英語原文),透露了很多內幕。主要內容是 AI 需要大量算力和資金,所以不得不成立盈利性部門,馬斯克當年對此知情,並表示支援。

2、Perplexity 會是"搜尋的未來"嗎?(中文)

英偉達 CEO 黃仁勳向媒體透露,他每天都使用 AI 工具 Perplexity 進行搜尋。本文介紹這個對話式搜尋引擎。

3、入行 15 年,我還是覺得程式設計很難(中文)

騰訊技術專家對其15年程式人生的思考,總結了8點經驗看法。

4、100萬級安裝量的開源作品,一年有多少打賞收入?(中文)

作者在自己的開源作品裡面,放了一個讚賞碼,一年帶來330元的收入。(@xxxily 投稿)

5、HTML 的 Switch 控制元件(英文)

Safari 17.4 引入了一個新的表單控制元件"滑塊開關"(switch),從而將 iPhone 的這個控制元件帶入了網頁。

6、為什麼我選擇 Tauri 而不是 Electron(英文)

作者本來使用 Electron 開發跨平臺桌面應用,後來改成了 Tauri。本文講述了原因,以及他的感受。

7、text-wrap 的換行控制(英文)

長文字的自動換行,由 CSS 的 text-wrap 屬性控制。本文討論如何使用這個屬性,讓標題產生更美觀的自動換行。

8、計算機從哪裡獲取時間?(英文)

計算機從 NTP(時間伺服器)獲取當前時間,但是 NTP 的時間又從何而來?本文圖文形式地介紹人類如何確定時間。

9、如何在 Windows 上測試 Safari(英文)

蘋果的 Safari 瀏覽器現在沒有 Windows 版,本文教你一種方法,依然可以在 Windows 上測試這個瀏覽器。

工具

1、Ente

一個雲相簿軟體,Google Photos 和 iCloud Photos 的替代品,以前是閉源產品,最近剛剛開源。

它的主要特點是提供端對端加密。其他的雲相簿軟體,還有 ImmichPhotoPrism

2、Earthly

一個開源的 CI/CD 框架,可以在本地架設自動構建服務。

3、Vikunja

一個開源的代辦事項(to-do)App,提供多種檢視,有 Web 版和桌面版,還可以自己架設。

4、日語短文排版小工具

一個線上工具,生成漂亮的日文排版,支援橫豎版式、自動假名標註、深淺兩種主題、字型配置、高亮、下劃線、字型等。(@miusuncle 投稿)

5、Web-Check

開源的網站分析工具, 可以分析網站的 IP 資訊、SSL 鏈、DNS 記錄、Cookie、域名資訊、伺服器位置、網站效能等,檢視 Demo。(@WFANG12719 投稿)

6、ImageTools

AI 一鍵摳圖(去除背景)的線上工具。(@handsometong 投稿)

7、zz-plan

甘特圖/橫道圖的線上製作工具。(@lizhichao 投稿)

8、Windows in container

Docker 容器裡執行 Windows 系統,可選擇 Win7,Win10,Win11 等,支援自動啟用,還支援遠端桌面連線。(@wrenashe 投稿)

9、Rsdoctor

一個 JS 構建器的分析工具,能夠檢視構建產物的模組關係,並分析構建器對程式碼的更改,支援 Rspack 和 Webpack。(@easy1090 投稿)

10、Photo Relay

一個封面圖片製作的線上工具。 Demo。(@zobor 投稿)

11、opfs-tools

瀏覽器私有檔案系統 OPFS API 的一個封裝庫,提供更簡單好用的 API。(@hughfenghen 投稿)

12、ast-grep VSCode

一個使用正規表示式進行程式碼搜尋、替換的 VSCode 外掛。(@HerringtonDarkholme 投稿)

掘金動手實驗室

學習新技術,最重要的就是動手實操,但是這樣的機會比較少,你不一定能遇到讓你嘗試的場景。

本週有一個好訊息,掘金動手實驗室(JUEJIN Code Lab) 正式推出啦!

它是一個新技術實操為主題的系列活動,致力於理論知識轉化為實際應用,並讓參與者之間進行技術交流。

它由稀土掘金技術社群精心策劃,與眾多領先的工具和平臺廠商攜手合作,將涵蓋多個技術領域,確保每一位參與者都能找到自己感興趣的內容。

第一期活動的主題,就是現在最熱門的 AI,由稀土掘金社群和釦子(coze.cn)共同發起。本次活動透過動手實操的方式,讓你的想法和創意在 AI 的幫助下落地。

活動分為3月16日的北京場和3月30日的深圳場,地點就在北京/深圳的位元組工區。

所有線下參與的同學,除了能夠接觸 AI 開發以外,還都有機會獲得掘金的豐富禮包、以及釦子(coze.cn)的官網推薦、API 內測和官方訪談。

歡迎大家點選連結,或者掃碼海報的二維碼,報名參與,進行 AI 開發實操。

資源

1、一譯

使用者可以在該網站搜尋或者上傳 arXiv 論文(暫時只支援 HTML 版本的論文),它會自動機器翻譯,提供對照閱讀。(@yiyibooks 投稿)

2、京墨

一個開源的安卓 App,隨身的古詩文、歇後語、成語、繞口令等等的圖書館。(@hefengbao 投稿)

3、OpenMoji

這個專案收集各種開源的 Emoji,開發者和設計師可以提交自己的作品。

4、Docker Compose Examples

這個倉庫收集各種常用的 Docker Compose 配置檔案。

5、學習 x86-64 組合語言

一本英文的組合語言入門教材,以 Ubuntu 平臺為例。

圖片

1、落葉藝術

一個歐洲藝術家在公園裡,把落葉整理成各種奇怪的形狀,讓公園有了更多的趣味。

2、最後的快車

《最後的快車》(The Last Express)是上個世紀末發行的一款電子遊戲。

它講述了一個美國人在1914年,登上最後一班從巴黎到伊斯坦布林的"東方快車"的故事。

整個遊戲場景,都發生在車廂內。下面是真實車廂的歷史照片。

遊戲設計師根據這張照片,進行建模,以數字形式還原了當時的場景。

文摘

1、有些人就像 ChatGPT

大家都說 ChatGPT 像人,但是我覺得,還有另一方面,那就是有些人很像 ChatGPT,尤其是在學術界。

ChatGPT 不理解任何材料,但可以利用這些材料,快速找到問題的合理答案。它會綜合和模仿,有時表現得非常令人信服,就像某個知識淵博的人在談論某個主題。

學術界的很多人也是這樣,他們很聰明,吸收了說話和構建理論的方法,並且善於聽起來令人信服。

但是,如果你問一個探索性的問題,就會發現他們的理解很少,一切侃侃而談都是表面的,沒有深度。這都是模仿而不是真正的思想,他們只是故意讓別人覺得似乎有道理。

許多領域的許多人,表現得就像 ChatGPT 的真人版,特別是在那些不做太多實證工作、不涉及對事實或假設進行檢驗的學科。他們製造的文字越多,就越危險。

這種人有很多明顯跡象,比如使用非常籠統的術語,以及聽起來巧妙的表述或行話,內容裡面很少有事實,例子也很少或者很隨意,沒有真實的感受,而且通常也不會足夠清楚地說出他不同意什麼。

我現在意識到,我不理解某人在說什麼,有時很可能是他們不知道自己在說什麼,表現得像 ChatGPT。

我將其稱為"吹泡泡",即沒有實質內容但能讓他人信服的說話能力。這是很多大學領導的重要技能。

現在,ChatGPT 向我們展示了儘管不理解,但將大量材料合成為可信的文字流,是完全可以做到的。也許這是不可避免的,但真是一種非常不健康的惡習----人們應該走出去,觀察事物,清晰說出自己的真實感受。

我明確意識到,自己更願意被那些行為不像機器人的人包圍,更願意傾聽那些有原創思想的人的聲音。

言論

1、

如果你沒有時間集中精力學習新知識,那麼就花時間複習已經學過的內容。

-- Hacker News 讀者

2、

瀏覽器位址列兼作搜尋輸入欄,這一定是史上最值錢的 UI 控制元件。谷歌為了成為這個控制元件的預設搜尋引擎,每年支付 Firefox 4億美元,Safari 150-200億美元。

-- 《史上最值錢的 UI 控制元件》

3、

一切都是模糊的,直至你試圖使其精確時,你才會發現,我們日常表達出來的精確與真正的精確相距甚遠。以至於當我們說話時,你無法假設這就是對方真正的意思。

-- 伯特蘭·羅素(Bertrand Russel),英國哲學家

4、

忒修斯之船(Ship of Theseus)是公元一世紀的希臘作家普魯塔克提出的哲學問題:如果雅典國王忒修斯的船的木頭逐漸被替換,直到所有的木頭都不是原來的木頭,那這艘船還是原來的那艘船嗎?

-- 維基百科

5、

每一個最佳實踐的背後都有一個恐怖的經歷。

-- Julia Evans

往年回顧

摩天大樓是反人類的(2023 #245)

你做過不在乎結果的專案嗎?(2022 #195)

大家不出門,經濟怎麼辦?(2021 #145)

遠端辦公暴露冗餘崗位(2020 #95)

(完)

相關文章