程式設計總不容易

發表於2012-08-16

最近讀了一篇文章 Software Runs the World: How Scared Should We Be That So Much of It Is So Bad? ,這篇文章沒什麼可說,但是評論卻很有趣,特別是很多電腦科學的博士表示,使用一些規範的方法,可以讓軟體變的更好,還有規範、認證、授權。

對於這些想法,我只能說“祝你好運”。我寫程式碼寫了30年,我可以很肯定的說“沒有銀彈”,沒有神奇的方法或者論文可以保證讓軟體變得完美,沒有 bug。

事實上,我們甚至很難定義一個程式,就更別提如何開發一個完美的程式了。軟體在太多領域存在,有太多的程式語言,業務需求,還有執行環境,並且要和各種不確定的系統互動。你覺得你的 iPhone 遊戲,股票交易系統,烤麵包機還有火星登陸器有什麼共同之處嗎?你覺得給彙編,C,Java,PHP,Fortran,LIST 和 Erlang 頒發證照可行嗎?還有各種混合語言 web 應用,以及分散式系統。

你需要正式的描述太多的東西,光列出所有的程式語言似乎就不可能,更不用說如何用這些語言寫出完美的程式了。

我喜歡人們拿程式和社會工程對比。建造一座橋的基礎在過去的兩千年中沒有改變過:你需要考慮重力,風力,下雨以及炎熱還有很多基本的材料。這些東西羅馬的工程師就知道了。但是程式設計不一樣,我們為每個程式創造一個獨立的世界,或者說我們把各種世界元素整合在一個世界中,然後在這個世界中建造幾百座不同的橋,它們要同時良好的工作,還要考慮到我們創造的世界會不可預知的改變。

還有,我們造一座橋需要經過幾年的規劃和建造,然後使用幾十年,上百年而不用進行任何修改。而軟體在一直的變化當中,不管是在開發的時候還是開發完以後。美國在過去的兩百年間建造了60萬座橋。但是過去五年中我們就創造了一百萬個 iPhone 的應用。應用程式可以從幾行到幾千萬行程式碼,並且在現代生活的每一個角落存在。

real programmers code in binary

讓程式設計如此困難的原因是它無處不在,可以影響一個人或者10億人,可以執行幾十年或者只需要執行一次。它跟造橋完全不一樣。最近的火星登陸器是用幾百萬行C程式碼寫的,並且只執行一次。而高速股票交易系統一秒鐘就要被執行無數次。

認為世界上存在一套標準的方法可以讓你保證開發的程式是完美的這種想法很可笑。即使這種完美的奇蹟存在,它的開銷也會讓它無法實際實施。好吧,你可以證明一段程式碼沒問題,但是它執行在哪裡呢?你能控制作業系統嗎?還是其他公司提供的 WebService 介面?你不能控制使用者的互動,你也不能控制 CPU,那麼你如何保證這段完美的程式碼可以完美的執行?

我寧願相信你發明了時間機器也不願意相信你的標準流程可以在這個混亂的世界行得通。

另外一個“善意的謊言”是我們可以通過標準的測試和認證來證明一個程式設計師可以編寫完美的程式碼。程式設計師不是管道工,管道工和水,管道,氣體還有閥門打交道。這些東西幾乎不會改變。它們遵循物理規律,是經過認可的科學,它們不會莫名其妙的變成另外一個東西。

我認識一個程式設計師通過了各種 Java 認證,但是還是沒有能力編寫實際的應用程式。想象一下,要為一個人進行所有語言的認證,所有程式的認證,從麵包機到宇宙飛船。要麼你創造一些非常基礎而無用的認證,或者非常細節的認證而沒有人在乎。考慮到所有這些,還有不斷變化的需求,當你需要開發一些新東西的時候你怎麼辦?把所有人炒了,然後僱傭新的人?

我在工作中和一位 UX 設計師一起培訓一組 Java Web 程式設計師開發 iOS 程式。即使一個有經驗的開發者突然做一些不一樣的開發也是很困難的。但是假如我們一定堅持要正規的流程和經過認證的 iOS 程式設計師才能在市場上競爭,那麼我們可能已經關門了。

我們三個人花了兩個月時間開發了一個新的 iPhone 應用。我們只有不斷快速的迭代開發才能在不斷變化的需求和競爭中勝出。期望一個正規的流程在釋出前驗證所有的程式碼是噩夢。在產品釋出幾年後公司可能都不存在了,誰有在乎這個程式是否被認證過呢?

現實是殘酷的。30多年的程式設計經驗,可以讓我非常自信的說我寫的程式碼還不錯。在 1987-1994 年間,我領導開發並且要最終敲定釋出的二進位制碼。我們通過軟盤的形式釋出了三個 Mac 應用,11個主要版本,沒有一次大的事故(要知道每次釋出的硬體成本就是100萬美元)。我們釋出的程式碼很完美嗎?我們是經過認證的 Mac OS 開發者/設計師嗎?不是!但這些應用解決使用者的問題了嗎?是的。

我說的這些能證明任何東西嗎?不能。但是好的程式碼確實存在,並且常常出自沒有證照,沒有學歷,沒有被證明過的程式設計師之手。

也許有一天機器人可以代替人來開發軟體,並且保證不出錯。人類就可以幸福的生活在完美的軟體創造的世界中了。

但是我更相信時間機器會先出現。並且軟體是由人類編寫的。

相關文章