get:程式設計主要是思考

banq發表於2024-06-14

這篇文章是 Tim Ottinger 在其部落格 "Agile Otter" 上發表的,標題為 "Programming Is Mostly Thinking"(程式設計主要是思考)。

文章討論了程式設計工作的本質,強調了程式設計不僅僅是編碼,更多的是思考和設計。

程式設計工作的本質:
程式設計工作很大一部分是思考,而不僅僅是打字或使用工具。即使在沒有寫程式碼的時候,程式設計師也可能在思考解決方案、設計架構或除錯程式。

軟體工廠的比喻:
生產實物商品時,幾乎所有可見的工作都是運動。人們軋鋼、衝壓、壓制、研磨、拾取和放置、螺栓/螺絲/鉚釘等。 

現代工廠使用計算機數控機器生產產品,這些機器可以生產出真實生活中可能不存在的原始模型的完美複製品。這些機器以抽象模型(實際上只是資料)為基礎,並執行完美的動作。人類負責操作機器,而不是手工加工木材。

軟體開發類似現代工廠,其中產品(軟體)的複製成本幾乎為零。一旦初始模型(資料)存在,就可以透過點選“複製”或“下載”按鈕來建立完美的副本。

一旦初始模型(實際上只是資料)存在,那麼所有完美副本的邊際成本基本上為零。是的,這只是複製而不是創造,但這就是工廠所做的。定製商店可能會生產獨特​​的物品(例如吉他),但工廠會製作原件的副本。

軟體工廠往往會給你一個進度條,這樣你就能直觀地看到位元的移動,但從很多方面來說,你可以說產品並不存在。

設計與製造的區別:
軟體開發更接近設計工作而非製造。一旦設計完成,機器可以幾乎零成本地複製資料模型。

在我與鮑勃·馬丁大叔共事的這些年裡,我聽到他不斷告訴客戶和學生,軟體開發不是製造操作,而是設計操作。一旦完成初始設計,所有重複工作都由機器完成,成本幾乎為零。

因此,程式設計師、測試員、產品負責人、Scrum Master 和軟體管理領域所做的一切(如果他們做得對的話)就是設計資料模型,該模型稍後將被工廠用來建立副本,供客戶、顧客以及該軟體所服務社群中的其他人使用。 

然而,工業時代將軟體開發視為工廠的機械化、工業化的理念仍然存在,開發人員盡職盡責地試圖讓它看起來像是在從事體力勞動,而這損害了整個過程。 

所有智力活動都難以觀察和監控。一個完成了 80% 的想法沒有實際表現。這只是一個想法,還沒有完成。有時我們會進行實驗或概念驗證程式碼或筆記,但它們無法像實際工作那樣給出準確的“完成百分比”數字。

  • 製造中的椅子在 50% 標記處看起來已完成約 50%。完成後,它看起來已完成。
  • 椅子的設計可能要等到完成 70% 以上才會在紙面上呈現出來。我們不知道它是否真的完成了 70%,因為它還沒有設計完成。

思考與編碼的關係:
程式設計師在編碼前會花費大量時間閱讀、研究、決定、確認、驗證,這些智力活動最終轉化為程式碼庫中少量的程式碼變更。

程式設計師一整天都在不停地打字。
在這 30 分鐘裡,他們要重現一天中寫過的、沒寫過的、編輯過的、返工過的所有工作的淨結果。這並不是他們付出的全部努力,而只是努力的殘餘。

程式設計師要儘可能避免Bug。
為了做到這一點,他們必須在編寫程式碼的過程中不斷對程式碼進行評估,假設可能會引入哪些缺陷或安全漏洞。畢竟,在共享程式碼庫中引入缺陷會受到最嚴厲的批評。

程式設計是一種有失真壓縮。
程式碼只說明程式執行時必須做的事情。程式設計師為什麼選擇一種特定的方式而不是其他方式,這種方式如何影響系統的其他部分,引入和刪除了哪些錯誤,以及避免了哪些陷阱,這些(一般)都不會出現在程式文字中。

大部分工作不在於進行更改,而在於決定如何進行更改。做出決定需要我們理解已有的程式碼。當程式碼雜亂無章或設計在原始碼中並不明顯時,這尤其耗費時間。

程式設計師是在社會環境中工作的,因為他們的所有成果都整合在一個共享程式碼庫中(大多數程式設計師都使用結對程式設計或其他 "多眼 "技術)。程式設計師可能會幫助其他程式設計師、測試人員或操作人員處理他們的工作。與他人聯絡和交流的好處和代價並不體現在程式碼中。

程式設計師會所做的工作就是閱讀、學習、理解,有時是猜測、研究、除錯、測試、編譯、執行、假設和推翻他們對程式碼應該是什麼樣子的想法。

總之,他們是在思考和決定。大部分工作都是腦力勞動。

文章提出其他要點:

  1. 對管理的啟示:文章建議,管理層不應僅僅關注程式設計師編碼的時間,而應提供有利於高質量思考的環境和流程。
  2. 社會化工作:程式設計師的工作是社會化的,因為他們的成果都整合到了共享的程式碼庫中,並且經常使用配對程式設計或其他“多眼”技術。
  3. 程式碼只是工作的殘留:程式碼只是程式設計師思考和決策過程的最終產物,而不是工作的全部。
  4. 提高生產力的方法:作者認為,提高生產力的關鍵在於構建促進共同思考和決策的系統,而不是簡單地增加編碼時間。

文章最後還包含了一些讀者的評論,他們分享了自己的觀點和經驗,進一步強調了思考在程式設計工作中的重要性。

banq注:程式設計師現在是和ChatGPT一起思考,不在孤獨 深入“人跡罕至”的上下文。
 

相關文章