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