跳至內容

垃圾進,垃圾出

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

垃圾進,垃圾出(英語:Garbage in, garbage out,縮寫:GIGO),或譯為廢料進,廢品出,是計算機科學信息通信技術領域的一句習語,說明了如果將錯誤的、無意義的數據輸入計算機系統,計算機自然也一定會輸出錯誤、無意義的結果。同樣的原則在計算機外的其他領域也有體現。

歷史

本習語產生於計算機的早期時代,1957年11月10日,一篇報紙文章介紹了美國陸軍的數學家所做的計算機工作,[1]其中一名軍隊專家威廉·D·梅林解釋說,計算機自己不能思考,因此輸入粗劣的數據將不可避免地產生錯誤的輸出。甚至早在十九世紀,計算機的先驅查爾斯·巴貝奇就已經意識到了這條編程的基本原則:

之後,英國海上事故調查局也得到了相似的結論:

本習語可能是從先進先出後進先出這兩個術語中派生出來的。[4][5]

例子

數字化

將低質量的老舊模擬錄音或視頻數字化,是清理信號、改善質量的第一步,然而數字化的過程本身並不能改善質量。原始模擬信號中錄製的瑕疵會原封不動地保留下來。 [6]

統計學

統計學中,如果分析的原始數據是錯誤的、不準確的,那麼統計的結論也就是不可信的。[7][8]

編程語言

有些編程語言,主要是動態類型的編程語言,對待調用函數時參數的類型和數值的正確性採取無所謂的態度。比如JavaScript函數parseInt。當輸入無意參數時,比如parseInt("4個人去喝酒", "哈哈哈~"),會得到返回值「4」,其邏輯是儘量從垃圾輸入中提取看上去說得過去的信息,哪怕輸出的是無意義信息,也不願報錯。這種設計理念,就被稱作「垃圾進,垃圾出」。

通常而言,垃圾進垃圾出的語言設計理念被認為是貶義的,因為不報錯就等於悄悄出錯,這導致計算錯誤或者被忽視,或者在其後的計算中引起連鎖反應,前者使得錯誤本身難以發現,後者使得錯誤根源難以定位。[9]及時報錯的處理方式是受到學術和工業界廣泛認可的設計思路。[10]現代語言設計者和委員會,包含維護Javascript的委員會TC39本身都在儘可能的消除這種設計。

參見

參考文獻

  1. ^ Work With New Electronic ‘Brains’ Opens Field For Army Math Experts. The Hammond Times. : 65 [March 20, 2016]. (原始內容存檔於2016-08-09) –透過Newspapers.com. 
  2. ^ Babbage, Charles. Passages from the Life of a Philosopher. Longman and Co. 1864: 67. OCLC 258982. 
  3. ^ MAIB. SAFETY FLYER (PDF). 英國海上事故調查局. 2016-03-17 [2016-06-01]. (原始內容存檔 (PDF)於2017-01-16). 
  4. ^ Quinion, Michael. Garbage in, garbage out. World Wide Words. 5 November 2005 [2012-02-26]. (原始內容存檔於2012-02-29). 
  5. ^ Rubbish Clearance Finsbury Park N4. Big Ben. [2024-04-16]. (原始內容存檔於2024-06-29). 
  6. ^ Junk Removal. [2022-06-30]. (原始內容存檔於2024-02-27). 
  7. ^ 存档副本. [2016-06-02]. (原始內容存檔於2016-06-13). 
  8. ^ 存档副本. [2016-06-02]. (原始內容存檔於2016-08-04). 
  9. ^ Cantrill, Bryan. Debugging Under Fire: Keep your Head when Systems have Lost their Mind. GOTO Conference 2017. 10 May 2017 [2022-11-20]. (原始內容存檔於2023-03-14). 
  10. ^ Cantrill, Bryan. Zebras all the way down: The engineering challenges of the data path. Uptime Conference 2017. 24 October 2017 [2022-11-20]. (原始內容存檔於2022-11-01).