開發者時間大解密:為何大部分工作都在「理解系統」上?

開發者時間大解密:為何大部分工作都在「理解系統」上?
Photo by Christopher Gower / Unsplash

在軟體開發的世界裡,有一個現象一直存在卻鮮少被深入討論:開發者將大部分時間花在「理解系統」上。這個現象值得我們深入探討,因為它直接影響著開發效率和成本。

軟體開發的時間分配:40年來的驚人不變

早在1979年,Zelkowitz、Shaw和Gannon在《軟體工程與設計原則》一書中就指出,開發者67%的時間都花在了維護上。這已經暗示了理解現有代碼是開發工作的主要部分。

快轉到2018年,Xia、Bao等人在《測量程式理解:與專業人員進行的大規模現場研究》中透過詳細的數據分析發現,程式理解佔據了開發者約58%的時間。更值得注意的是,「導航」(在代碼間跳轉查找信息)單獨就佔了24%的時間,這部分甚至不包括在「理解」的範疇內!

這意味著,經過40多年的技術進步,開發者仍然將大部分時間花在理解系統上。唯一的變化可能只是我們更精確地測量了這些「理解時間」。

為何這個問題如此重要?

如果理解系統是軟體開發中最大的時間消耗,那麼它理應成為我們首要優化的目標。然而,我們的討論往往集中在如何編寫代碼,如何構建系統,卻很少談論如何高效地「理解系統」。未被討論的問題就不會被明確定義,未被明確定義的問題也就無法被有效優化。

目前,「理解系統」主要通過閱讀代碼實現。事實上,前面提到的研究也將理解與閱讀視為基本同義詞。這引發了一個重要問題:閱讀真的是理解系統的最佳方式嗎?

重新定義問題:從閱讀到決策

為什麼開發者要閱讀代碼?根本目的是為了收集足夠的信息,以便知道下一步該做什麼。從這個角度看,閱讀代碼本質上是一種決策前的信息收集過程。

閱讀恰恰是從數據中收集信息的最手動、最低效的方式。這為我們提供了一個巨大的優化空間。

在我多年前創立的人性化評估理念中,我將「理解系統以知道下一步該做什麼」的過程稱為「評估」(assessment)。我認為,我們應該圍繞這一過程優化開發工作流。

從閱讀到工具化:可塑性開發的誕生

經過十年的探索,我和同事們發展出了「可塑性開發」(moldable development)的概念。這一理念認識到:閱讀是從數據中提取信息的最手動方式,它不僅無法擴展,還會導致信息不完整和不確定性。

軟體開發已經足夠困難,不了解當前系統的狀態不應該成為方程式中的一個變量。一個手繪的關於當前系統的圖只是一種信念,而工程決策絕不應該基於信念。

一旦我們接受系統本質上是數據的觀點,就應該像處理數據那樣處理它。數據科學告訴我們,應該先從問題出發,然後通過與上下文匹配的工具進行推理。

可塑性工具:適應上下文的解決方案

由於軟體高度依賴上下文,我們無法預測具體問題,只能預測問題類型。為了應對這一挑戰,可塑性開發的核心理念是:工具應該在了解問題後可以被塑造,以便處理上下文中重要的事情,並代替開發者完成枯燥的閱讀工作。當然,為了使這一方法實用,創建自定義工具的成本必須很低。

我認為,在開發過程中為每一個具體問題構建自定義工具將是軟體開發的下一個重大飛躍。

十年後,我們不應該再以閱讀來衡量「理解系統」的時間。我們應該將精力集中在解決實際問題上。要實現這一目標,我們應該從討論如何「不閱讀代碼」開始。我們負擔不起不這樣做的代價。

Glamorous Toolkit:可塑性開發的具體實踐

為了啟動「如何不閱讀代碼」的對話,我們創建了Glamorous Toolkit。這是一個可塑性開發環境,它使得以低成本創建關於軟體系統的自定義工具成為可能。

例如,假設你需要理解一個複雜的數據處理管道。傳統方法需要你閱讀數百行代碼並在腦中構建流程模型。而使用Glamorous Toolkit,你可以快速創建一個視覺化工具,直接展示數據如何在管道中流動,哪些轉換發生在哪裡,以及可能的瓶頸在哪裡。這不僅節省了理解時間,還提供了更準確的系統視圖。

為普通人解釋:為什麼這很重要?

即使你不是軟體開發者,這個話題也與你息息相關。想像一下,如果建築師花67%的時間試圖理解已有的建築結構,而不是設計新建築;或者醫生花58%的診斷時間查閱過去的病歷,而不是與患者互動和制定治療方案。這聽起來效率極低,對吧?

這正是軟體行業面臨的現實。結果是什麼?軟體開發成本高昂,交付緩慢,質量不穩定。作為軟體的使用者,你可能經歷過緩慢的更新、持續存在的錯誤或過高的軟體價格。這些問題很大程度上源於開發者在理解系統上花費過多時間。

可塑性開發提供了一種新思路:不是更快地閱讀代碼,而是通過創建針對特定問題的工具來避免大量閱讀。這就像從用放大鏡手動檢查地圖,進化到使用GPS導航系統。結果將是更快、更便宜、更可靠的軟體開發。

Read more

當輸入為空:探討技術開發中的空值處理與意義

當輸入為空:探討技術開發中的空值處理與意義

在軟體開發的世界裡,我們經常會遇到一個看似簡單卻深具哲學意味的問題:當輸入為空時,我們該如何處理?這個問題不僅是技術層面的挑戰,更反映了我們對於「無」這個概念的理解。今天,讓我們深入探討這個在程式設計中無處不在,卻又常被忽視的重要議題。 空值的本質:從哲學到程式碼 當我們談論「空」時,我們究竟在談論什麼?在程式設計的領域中,空值可以有多種表現形式:null、undefined、空字串、空陣列、空物件等等。每一種形式都代表著不同的含義和使用情境。null 通常表示「有意的空缺」,代表我們知道這個位置應該有值,但目前沒有;而 undefined 則更像是「尚未定義」,暗示著這個變數可能還沒被初始化或賦值。這種微妙的差異在實際開發中至關重要,因為它們會影響我們如何設計 API、如何處理錯誤,以及如何與使用者溝通。在東方哲學中,「空」並非單純的虛無,而是一種充滿可能性的狀態,就像老子所說的「無為而無不為」。同樣地,在程式設計中,正確處理空值往往能為系統帶來更大的靈活性和健壯性。當我們面對一個空的輸入時,

By Eric Lau
AI 是否做得越來越少?從全自動到混合架構的演化之路

AI 是否做得越來越少?從全自動到混合架構的演化之路

當我們談論人工智慧的進步時,通常期待它能處理越來越多的任務。但在實際應用中,一個有趣的現象正在發生:許多開發者發現,隨著 AI 系統的成熟,真正需要 AI 介入的部分反而越來越少。這不是退步,而是一種更精明的進化。本文將深入探討這個看似矛盾的趨勢,以及它對未來 AI 應用開發的啟示。 從完全依賴 AI 到混合架構的轉變 六個月前,當開發者開始建構 AI 代理系統時,最直覺的做法是讓大型語言模型(LLM)處理所有事情。每一個任務、每一個決策點都交給 AI 來判斷和執行。這種做法看似充分利用了 AI 的能力,但實際運作後卻發現了許多問題。LLM 確實會自信地推進各項任務,但準確性並不總是令人滿意。更重要的是,這種全 AI 的架構在成本、速度和可預測性上都存在明顯的瓶頸。於是,一個重要的轉變開始發生:開發者逐漸意識到,不是所有任務都需要 AI 的「智慧」

By Eric Lau
代理商務守門問題:平台如何成為新時代的聚合者

代理商務守門問題:平台如何成為新時代的聚合者

在電商與人工智慧交織的新時代,我們正見證一個前所未有的變革:代理商務協議的崛起。但這場變革背後,隱藏著一個值得深思的問題——那些曾經標榜開放、賦能商家的平台,正悄然轉變為控制流量與數據的聚合者。這不是陰謀論,而是商業邏輯演進的必然結果。當 Shopify、Stripe 這些我們熟悉的平台開始在 AI 購物表面扮演中介角色時,商家們需要清醒地認識到:你要麼掌握自己的命運,要麼成為別人棋盤上的棋子。 代理商務協議的新遊戲規則:開放但我先行 讓我們先理解一個基本事實:今天的代理商務協議與過去的網際網路標準有著根本性的不同。回想 TCP/IP 這個支撐整個網際網路通訊的核心協議,它經歷了委員會討論、RFC 文件、多年的審議過程。那個年代的開放標準是真正「民主」的,在公開透明的環境中發展。但在當今的 AI 場景中,協議的演進方式已經完全改變了。 無論是 OpenAI 的代理商務協議(ACP)還是 Google 的通用商務協議(UCP),它們從一開始就帶著完整的合作夥伴生態系統登場。OpenAI 與

By Eric Lau
當輸入為空時:探討系統邊界條件處理的藝術

當輸入為空時:探討系統邊界條件處理的藝術

在軟體開發的世界裡,我們經常專注於處理正常的業務邏輯和功能需求,卻容易忽略一個至關重要的問題:當系統接收到空值或無效輸入時,應該如何反應?這個看似簡單的問題,實際上揭示了軟體設計中最基本卻也最容易被忽視的一個面向。今天,讓我們深入探討當輸入為空時,技術系統應該如何優雅地處理這種邊界條件,以及這對整體系統設計的深遠影響。 理解空值的本質與意義 空值並不僅僅是「什麼都沒有」這麼簡單。在不同的程式語言和系統架構中,空值可能代表著截然不同的意義。在某些情況下,它可能表示資料尚未被初始化;在另一些場景中,它可能意味著使用者刻意選擇不提供任何資訊;還有時候,它可能是系統錯誤或網路中斷的結果。這種多重性使得空值處理成為一門需要細緻思考的藝術。從技術角度來看,空值可能以多種形式出現:null、undefined、空字串、空陣列、空物件等等。每一種形式都有其特定的使用場景和處理方式。優秀的開發者需要能夠區分這些不同類型的空值,並根據具體情況採取適當的處理策略。更重要的是,我們需要理解空值在業務邏輯中的含義,而不僅僅是從技術層面來看待它。例如,在電子商務系統中,購物車為空可能意味著新用戶剛進入網站,

By Eric Lau