垃圾进,垃圾出
![本页使用了标题或全文手工转换](http://upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
垃圾进,垃圾出(英語:Garbage in, garbage out,缩写:GIGO),或译为废料进,废品出,是计算机科学与信息通信技术领域的一句习语,说明了如果将错误的、无意义的数据输入计算机系统,计算机自然也一定会输出错误、无意义的结果。同样的原则在计算机外的其他领域也有体现。
历史
[编辑]本习语产生于计算机的早期时代,1957年11月10日,一篇报纸文章介绍了美国陆军的数学家所做的计算机工作,[1]其中一名军队专家威廉·D·梅林解释说,计算机自己不能思考,因此输入粗劣的数据将不可避免地产生错误的输出。甚至早在十九世纪,计算机的先驱查尔斯·巴贝奇就已经意识到了这条编程的基本原则:
“ | 我曾兩度被問到:“请问巴贝奇先生,如果給机器輸入错误的数字,它能得出正确的结果吗?”我完全想不透,思维何等混乱的人才問得出这種问题。 | ” |
——查尔斯·巴贝奇,《哲学家的生命旅程》(Passages from the Life of a Philosopher)[2] |
之后,英国海上事故调查局也得到了相似的结论:
“ | 舰载计算机实用而有效地保证轮船安全航行。然而,计算机的输出信息是否准确,取决于输入信息是否准确。 | ” |
——英国海上事故调查局(Marine Accident Investigation Branch),《霍伊格·大阪货轮事故简报》(SAFETY FLYER Hoegh Osaka)[3] |
本习语可能是从先进先出和后进先出这两个术语中派生出来的。[4][5]
例子
[编辑]数字化
[编辑]将低质量的老旧模拟录音或视频数字化,是清理信号、改善质量的第一步,然而数字化的过程本身并不能改善质量。原始模拟信号中录制的瑕疵会原封不动地保留下来。 [6]
统计学
[编辑]在统计学中,如果分析的原始数据是错误的、不准确的,那么统计的结论也就是不可信的。[7][8]
编程语言
[编辑]有些编程语言,主要是动态类型的编程语言,对待调用函数时参数的类型和数值的正确性采取无所谓的态度。比如JavaScript函数parseInt。当输入无意参数时,比如parseInt("4个人去喝酒", "哈哈哈~"),会得到返回值「4」,其逻辑是尽量从垃圾输入中提取看上去说得过去的信息,哪怕输出的是无意义信息,也不愿报错。这种设计理念,就被称作「垃圾进,垃圾出」。
通常而言,垃圾进垃圾出的语言设计理念被认为是贬义的,因为不报错就等于悄悄出错,这导致计算错误或者被忽视,或者在其后的计算中引起连锁反应,前者使得错误本身难以发现,后者使得错误根源难以定位。[9]及时报错的处理方式是受到学术和工业界广泛认可的设计思路。[10]现代语言设计者和委员会,包含维护Javascript的委员会TC39本身都在尽可能的消除这种设计。
参见
[编辑]参考文献
[编辑]- ^ Work With New Electronic ‘Brains’ Opens Field For Army Math Experts. The Hammond Times. : 65 [March 20, 2016]. (原始内容存档于2016-08-09) –通过Newspapers.com.
- ^ Babbage, Charles. Passages from the Life of a Philosopher. Longman and Co. 1864: 67. OCLC 258982.
- ^ MAIB. SAFETY FLYER (PDF). 英国海上事故调查局. 2016-03-17 [2016-06-01]. (原始内容存档 (PDF)于2017-01-16).
- ^ Quinion, Michael. Garbage in, garbage out. World Wide Words. 5 November 2005 [2012-02-26]. (原始内容存档于2012-02-29).
- ^ Rubbish Clearance Finsbury Park N4. Big Ben. [2024-04-16]. (原始内容存档于2024-06-29).
- ^ Junk Removal. [2022-06-30]. (原始内容存档于2024-02-27).
- ^ 存档副本. [2016-06-02]. (原始内容存档于2016-06-13).
- ^ 存档副本. [2016-06-02]. (原始内容存档于2016-08-04).
- ^ 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).
- ^ 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).