沒有完美的軟件:編程永遠不容易

摘要:很多人想用十全十美來修飾一樣東西,比如軟件,對于客戶來說,當然希望他們的軟件能做到完美。雖然很多專家說利用一些規范可以讓軟件達到更好!但是在現實開發中,真的會有那么完美的軟件嗎?

最近讀了一篇文章 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的應用。應用程序可以從幾行到幾千萬行代碼,并且在現代生活的每一個角落存在。

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

認為世界上存在一套標準的方法可以讓你保證開發的程序是完美的這種想法很可笑。即使這種完美的奇跡存在,它的開銷也會讓它無法實際實施。好吧,你可以證明一段代碼沒問題,但是它運行在哪里呢?你能控制操作系統嗎?還是其他公司提供的WebService接口?你不能控制用戶的交互,你也不能控制CPU,那么你如何保證這段完美的代碼可以完美的運行?

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

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

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

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

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

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

我說的這些能證明任何東西嗎?不能。但是好的代碼確實存在,并且常常出自沒有證書,沒有學歷,沒有被證明過的程序員之手。

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

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

英文出自: Software Runs the World: How Scared Should We Be That So Much of It Is So Bad?

譯文來自:oschina


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450848.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450848.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450848.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Eclipse斷點調試出現Source not found

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 我的情況是和網上說的都不一樣,我真的也沒有想到這么坑, 我居然無意寫了一個死循環,dao/mapper調sql…

Memory Compression這到底是個什么東西?

Memory Compression這到底是個什么東西? Memory Compression這個進程,經過我的查詢說是內存壓縮功能,作用是壓縮內存讓內存占用更低,但是為什么這個進程瘋狂占用我的內存,我用的Win10 8G,通過資源監視器查看…

MySQL 5.6 for Windows 解壓縮版配置安裝

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 MySQL是一個小巧玲瓏但功能強大的數據庫,目前十分流行。但是官網給出的安裝包有兩種格式,一個是msi格式&#xf…

safari的一些問題

1、圖片過大時,在webview中是不會加載顯示的。2、如果是通過一個地址返回的base64數據給image,記住要在后臺進行base64_decode解析數據,這樣才是真實的圖片數據,后臺保存數據的時候不要保存"data:image/png;base64,"這一…

代碼審查“思維導圖”

摘要:隨著人們對軟件質量要求的不斷提高,軟件開發的每一個環節都應該得到十足的重視,俗話說:“細節決定成敗”,就此,本文提供了一個代碼審查“思維導圖”,希望對所有碼農們有所幫助。 代碼審查&…

thinkCMF----導航高亮顯示

導航高亮顯示&#xff0c;有多種方法&#xff0c;這里給出一個簡單的表示下&#xff1a; <a href"__ROOT__"><span class"text db">網站首頁</span><span class"eng db">HOME</span> </a> …

The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 tomcat啟動報務后訪問頁面報錯&#xff1a; org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/co…

優秀程序員和一般程序員差別在哪?

摘要&#xff1a;在這個世界上有兩種程序員&#xff1a;Day Programmers&#xff08;白班程序員&#xff09;和Night Programmers&#xff08;夜貓子程序員&#xff09;&#xff0c;你知道優秀程序員和一般程序員有哪些差別嗎&#xff1f;你又是哪一類型的呢&#xff1f;俗話說…

7. Oracle數據加載和卸載

在日常工作中&#xff1b;經常會遇到這樣的需求&#xff1a; Oracle 數據表跟文本或者文件格式進行交互&#xff1b;即將指定文件內容導入對應的 Oracle 數據表中&#xff1b;或者從 Oracle 數據表導出。其他數據庫中的表跟Oracle數據庫進行交互。若是少量數據&#xff1b;可選…

Navicat工具導出mySQL數據庫某個視圖結構的.sql腳本

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 用Navicat工具怎么都導不出來mySQL數據庫的某個視圖.sql腳本&#xff0c;即使導出來也只是包含視圖記錄&#xff0c;不包含視圖結構。經…

瞧瞧蘋果OS X如何干掉Linux

摘要&#xff1a;如果你去過Facebook或者其它一些創業類科技公司&#xff0c;你會發現隨處可見的Mac&#xff0c;無論是CEO還是開發者&#xff0c;都可能在使用Mac。而以往很受IT人士青睞的Linux好像在消失&#xff0c;這是真的嗎&#xff1f;蘋果OS X是如何干掉Linux的&#x…

超全十大經典排序算法及其分析

文章目錄0.算法概述0.1 算法分類0.2 算法復雜度0.3 相關概念1. 冒泡排序&#xff08;Bubble Sort&#xff09;1.1 算法描述&#xff1a;1.2 圖解演示1.3 代碼實現1.4 優化過程1.5 性能分析2. 選擇排序&#xff08;Selection Sort&#xff09;2.1 算法描述&#xff1a;2.2 圖解演…

eclipse安裝JAVA反編譯插件

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 前言&#xff1a;在實際的開發中幾乎都會使用到一些框架來輔助項目的開發工作&#xff0c;對于一些框架的代碼我們總懷有一些好奇之心&a…

noip2014生活大爆炸版石頭剪刀布

題目描述 石頭剪刀布是常見的猜拳游戲:石頭勝剪刀,剪刀勝布,布勝石頭。如果兩個人出拳一 樣&#xff0c;則不分勝負。在《生活大爆炸》第二季第8集中出現了一種石頭剪刀布的升級版游戲。 升級版游戲在傳統的石頭剪刀布游戲的基礎上,增加了兩個新手勢: 斯波克:《星際迷航》主角之…

初識react(二) 實現一個簡版的html+redux.js的demo

回顧 初識react(一) 揭開jsx語法和虛擬DOM面紗初識react(二) 實現一個簡版的htmlredux.js的demo初識react(三)在 react中使用redux來實現簡版計數器初識react(四) react中異步解決方案之 redux-saga初識react(五) 數據流終極解決方案 dva(零配置)前言 首先糾正個誤區&#xff0…

12個有趣的C語言面試題

摘要&#xff1a;12個C語言面試題&#xff0c;涉及指針、進程、運算、結構體、函數、內存&#xff0c;看看你能做出幾個&#xff01; 1.gets()函數 問&#xff1a;請找出下面代碼里的問題&#xff1a; #include<stdio.h> int main(void) { char buff[10]; memset…

超全Typora快速入門

文章目錄一.Typora快速入門1.代碼塊2.標題3.字體4.引用5.水平分割線6.圖片插入7.超鏈接8.列表9.表格10.任務列表11.數學表達式12.生成目錄13.表情符號14.定義腳注15.文件導出16.主題修改17.修改主題背景圖片18.設置背景透明度19.Typora 插入圖片調整大小20.字體和顏色21.頁內跳…

聊聊畢業設計系列 --- 系統實現

效果展示 github moment-server github地址 moment github地址 moment-manage github地址 articles 聊聊畢業設計系列 --- 項目介紹 聊聊畢業設計系列 --- 系統實現 前言 在上一篇文章中&#xff0c;主要是對項目做了介紹&#xff0c;并且對系統分析和系統設計做了大概的介紹。…

求職小記(持續更新)

自16年春正式工作以來也有兩年半了&#xff0c;也許是對現在leader的不滿。也許是想要折騰一下&#xff0c;也許還有也許&#xff0c;決定換一份工作&#xff0c;結束兩年零四個月的第一家it工作。從8月份的離職到十月底的offer經歷了很多&#xff0c;外面天慢慢的涼了&#xf…

js 實現用window.print()打印頁面中的部分內容,局部打印

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 如下方法&#xff1a; function printProof(){var printData document.getElementById("forPrint").innerHTML; // 只打印 f…