寫軟件不是造汽車
英文原文:Writing Software is not like Building a Car
寫軟件和做其他事情是不一樣的。當我們制造別的東西的時候——像汽車、玩具、椅子、畫作、甚至包括數字產品如平面圖片和 3D 模型——我們做出來的成品就是最終的結果。而開發軟件則不是,我們做出來的產品永遠不可能有最終的結果——我們需要向計算機解釋如何根據任意的輸入來輸出 任意可能的結果。
寫軟件不像造汽車,或者可以這么說,它更像是建立一個汽車裝配生產線。
我們很容易了解汽車制造的設計觀念,產品設計師只要拿著一張設計圖紙,說一聲“照這個做”,然后工程師們就可以開工了,開始制造一個看上去真實存在的東西。
假設我們的產品設計師需要給一個網站開發一個用戶資料管理系統,一個簡單而完美的設計也許就是在布局好的頁面中放置幾個占位符文本,用來顯示用 戶名、用戶頭像和一些基礎資料數據。然而,這僅僅是開發軟件過程中的假設階段,實際操作很復雜。比如用戶如何編輯這些字段?窗口頁面太窄了怎么辦?頁面如 何在各種屏幕的閱讀器中展示不錯的效果?產品設計師只是假設了一些理想狀況下的頁面,但是開發者卻需要將每一種可能遇到的情況都考慮到。
回到剛才打的“汽車裝配生產線”這個比喻,產品設計師提出一些看上去很簡單的需求,就像“可以把駕駛室的車門顏色由紅色替換成藍色嗎?”這樣的 需求。這是一種誤導——做一輛紅色車門的汽車看起來很簡單,但實踐起來卻非常困難——我們需要調整生產線上的配色系統以便讓其支持噴刷多種顏色的油漆,這 就要增加一些局部噴色的邏輯,并且需要增加配置選項以允許人們在生產線上可以選擇需要噴刷的油漆顏色。還有就是需要購買一些新的噴漆嘴,因為紅漆比藍漆流 動更快一些。而且需要安排更好的健康保險,因為一旦銷售人員知道你制造的汽車只有一扇門是紅色的,他們會瘋狂地扔東西。
在軟件開發中也會發生類似的事情。“嘿,這個用戶管理系統看起來很不錯,可以在用戶生日的時候發送一條祝福消息嗎?”于是你又接收到了一條看似簡單的需求。
當你在開發軟件的時候,你并不是在構建用戶管理系統中的一個頁面,而是在創建一條裝配生產線,它由一堆的零部件組成,而且可以每次生成正確的用戶管理頁面。
譯文鏈接:http://news.html5tricks.com/coding-not-like-make-a-car.html
翻譯作者:蔣麗麗