垃圾進,垃圾出

垃圾進,垃圾出(英語: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).