泰安APP開發(fā):軟件完*按照我們的指示行事。軟件失敗的原因在于我們告訴它做了錯誤的事情。
關(guān)于工程失敗我們標(biāo)準的思維框架是在二戰(zhàn)后不久形成的(在軟件出現(xiàn)之前,針對機電系統(tǒng))。其想法是通過把部件做得可靠(比如引擎可承受40000次起飛與降落周期)以及為那些部件故障做好預(yù)案(準備2個引擎)來把東西做得可靠。但軟件不會壞掉。Intrado的錯誤閾值不像導(dǎo)致飛機失事的缺損鉚釘。軟件完*是按照人的吩咐行事的。實際上軟件執(zhí)行得非常完美。它失敗的原因在于它被告訴做了錯誤的事。軟件失敗是理解的失敗以及想象的失敗。Intrado其實是有個備份的路由器的,如果能自動切換過去的話,幾乎**能恢復(fù)911服務(wù)。但“當(dāng)時發(fā)生的情況是應(yīng)用邏輯并沒有要執(zhí)行自動修正行動!
這*是通過代碼而不是實體做東西的麻煩。如Leveson總結(jié)那樣:“復(fù)雜性是肉眼看不見的!
現(xiàn)在正在進行的改變軟件制作方式的嘗試似乎都始于同*個前提:代碼實在是太難琢磨了。那么在試圖理解這些嘗試之前,弄清楚為什么會這樣是值得的:是什么讓代碼對大腦那么陌生,跟之前的東西那么不*樣呢?
技術(shù)進步往往會改變世界的樣子——你可以看著道路鋪設(shè)下去,你可以看到天際線的崛起。但在今天你很難說出什么東西進行著了再造,因為這些東西經(jīng)常是由代碼重構(gòu)的。比方說,當(dāng)你踩了汽車油門時,你不再直接控制任何東西;腳踏板與風(fēng)門之間并沒有機械連接。相反,你只是給軟件提交了*條命令,給引擎補充多少空氣是由后者決定的。汽車*是你可以坐進去的計算機。方向盤和踏板*樣可以是鍵盤的按鍵。
跟*切其他東西*樣,汽車也被計算化以促進新功能。當(dāng)*個程序負責(zé)風(fēng)門和剎車時,在你距離另*輛車太近時它可以放慢車速,或者控制燃油噴射來幫助你省油。當(dāng)它控制轉(zhuǎn)向器時,它可以在你開始漂移時保持在自己車道內(nèi),或者引導(dǎo)你進入停車區(qū)。沒有代碼你實現(xiàn)不了這些功能。你可以試試,沒有代碼的汽車*會變成龐大的、重達40000磅但無法移動的發(fā)條裝置。
軟件讓我們做出了有史以來*復(fù)雜的機器。但是我們幾乎都沒注意到,因為所有的復(fù)雜性都被包裹進小小的芯片里面以及數(shù)百萬行的代碼之中。但僅僅因為我們看不見復(fù)雜性并不意味著它*沒有了。
*的荷蘭計算機科學(xué)家Edsger Dijkstra在1988年曾經(jīng)寫到:“必須思考*個頭腦此前從未面臨過的概念層級! Dijkstra把這當(dāng)成*種警示。隨著程序員熱切地想要把軟件植入到關(guān)鍵系統(tǒng)當(dāng)中,軟件日益成為建造世界的關(guān)鍵——Dijkstra認為他們已經(jīng)高估了自己。