阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

某些编程语言更容易出错?研究人员提出质疑

  • 2019-02-11
  • 本文字数:1876 字

    阅读完需:约 6 分钟

某些编程语言更容易出错?研究人员提出质疑

在人们的印象中,使用某些编程语言往往更容易出现 bug,但是这种印象基本还处于比较“唯心”的阶段,在近来的研究中几乎没有发现有力的证据。


在 2014 年软件工程基础(FSE)大会上发表的一篇学术论文“A Large Scale Study of Programming Languages and Code Quality in Github”声称,某些计算机编程语言具有更高的代码错误率,并由此引发了一场开发者大讨论。


这篇论文由加州大学戴维斯分校计算机科学家 Baishakhi Ray、Daryl Posnett、Vladimir Filkov 和 Premkumar Devanbu 共同撰写,论文指出,使用 C 语言、C++、Objective-C、JavaScript、PHP 和 Python 编写的代码比其他语言包含了更多的缺陷。


来自马萨诸塞州阿默斯特大学、美国东北大学和布拉格捷克技术大学的计算机科学家们试图重现这项研究结果。


在最近的一篇题为“On the Impact of Programming Languages on Code Quality”的 ArXiv 论文中,Emery Berger、Celeste Hollenbeck、Petr Maj、Olga Vitek 和 Jan Vitek 重新回顾了 2014 年论文中的四个主要发现,以此来评估有关编程语言设计重要性的假设。


但他们并没有发现任何有力的证据。他们尝试重现 2014 年的研究成果,但大多以失败告终。他们的分析表明,C++代码中实际出现的缺陷比它们应该出现的频率更高,但即便如此,他们认为,这从统计学方面来看仍然是无关紧要的。

相关性和因果关系

马萨诸塞州阿默斯特大学计算机科学教授 Emery Berger 在接受“The Register”的电话采访时表示,最重要的是要区分重现失败的含义和实际情况之间的区别。


他说,最初的研究旨在建立编程语言与缺陷之间的相关性,而人们误将这种相关性看成是一种因果关系。


Berger 说,“这并不意味着它就是不对的,只能说明他们的很多说法站不住脚。在数据科学家们当中流行着一个玩笑——如果你对数据进行足够长时间的折磨,它们最终会说话。仅仅因为拥有数据并不意味着它们就是建立某些特定主张的正确数据。GitHub 代码库的数据是一个很好的资源,但并不能通过分析这些数据来确定所有的事实”。


2014 年分析 GitHub 代码得出的发现还包括:


  • “某些语言与缺陷的相关性比其他语言更高,尽管效果没有那么明显。”

  • “语言类别和缺陷之间存在着一个很小但却很重要的关系。函数式语言与缺陷的相关性比过程式语言或脚本语言要小一些。”

  • “领域和语言缺陷倾向之间不存在一般性关系。”

  • “缺陷类型与语言密切相关。”


但是,当研究人员试图重现早期的研究结果时,大多数情况下却做不到。对于第一个命题,他们在编程语言与其缺陷数量关系方面发现了一些细微差别,但这并不重要。


他们无法重现其余三个命题的结果,最后两次试图重现结果的努力因数据缺失而以失败告终。

这是一门科学

Berger、Hollenbeck、Maj 和 Vitek 在他们的论文中写道:“我们已经发现 FSE 研究中存在很多问题,这些问题导致其关键结果无效。我们的目的不是要责备谁,基于大规模代码库对编程语言进行统计分析本来就是一件很困难的事情”。


未能重现结果并不意味会得出相反的结果:无论是使用函数式、过程式还是面向对象编程语言并不重要,语言是静态类型的还是动态类型、是强类型的还是弱类型的也不重要。实际上,数据并没有告诉我们这些信息。


Berger 表示,除了这项研究之外,更重要的是编程语言是否会产生影响。


他说:“我心里是这么认为的,但在现实当中不可能通过实验来证实”。


他说,使用 Haskell 的程序员比普通 Python 程序员受过更多的学术训练,“我们假设 Haskell 程序的错误更少,可能是因为使用 Haskell 的程序员大都拥有博士学位”。


换句话说,有很多上下文信息没有被纳入到 GitHub 的数据分析中。


结果的反面是科学的运作方式、实验结果应该针对可重复性进行测试,但这种情况通常不会发生。《自然》杂志 2016 年发布的一份报告显示,在接受调查的 1576 名科学家中,有一半甚至无法重现自己的研究成果。


值得称赞的是,研究人员最初预见了工作中存在缺陷的可能性,并指出了在结论有效性方面存在的几个潜在威胁。


这些研究人员对数据科学陷阱提出了警告,并强调了通过自动化研究来实现可重现研究的必要性。


他们总结说:“虽然统计分析与大数据语料库相结合是一种强大的工具,可以用来解答最难的研究性问题,但这些研究所涉及的工作量以及出错的可能性是巨大的”。


英文原文:https://www.theregister.co.uk/2019/01/30/programming_bugs


学术论文 A Large Scale Study of Programming Languages and Code Quality in Github:http://web.cs.ucdavis.edu/~filkov/papers/lang_github.pdf


学术论文 On the Impact of Programming Languages on Code Quality:https://arxiv.org/pdf/1901.10220.pdf


2019-02-11 10:316078
用户头像

发布了 731 篇内容, 共 433.6 次阅读, 收获喜欢 1997 次。

关注

评论 1 条评论

发布
用户头像
C++又中枪
2019-07-12 09:41
回复
没有更多了
发现更多内容

Hello World!!!

小太阳

HashData携手中国移动 共筑通信技术数字化之路

酷克数据HashData

数据库 解决方案

价值感知:如何评价企业IT项目的价值?

boshi

价值传递 七日更 项目经验

【20万大奖】参加APICloud3.0案例与AVM组件大赛,赢现金大奖

YonBuilder低代码开发平台

开发者 大前端 APP开发 APICloud

2021最新快手面经主动分享:Java面试神技/技术知识集合(10个专题详细介绍)

比伯

Java 编程 架构 面试 程序人生

Python 变量类型

依旧廖凯

28天写作 3月日更

ARTS - Week 6

Khirye

Java LeetCode arts

Nacos配置安全最佳实践

Robert Lu

nacos 配置中心

终于有人把 "高可用" 说清楚了

架构精进之路

3月日更

【笔记】第七周 第1课

Geek_娴子

一名优秀的女程序员是如何炼成的?我们跟爱奇艺的五位工程师姐姐聊了聊

爱奇艺技术产品团队

Wireshark数据包分析学习笔记Day7

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

FutureTask源码解析

程序员星星toC

多线程 Future future设计模式

如何破解区块链人才的结构性问题?

CECBC

区块链

还不懂云数据库Redis是什么?快上车,一张图带你了解!

浪潮云

云数据库

为什么选择python

张鹤羽

28天写作 3月日更

Yarn日志聚合优化—摆脱HDFS依赖

笨小康

大数据 YARN

JAVA中的I/O模型-多路复用

Java 架构 计算机

Python 基础语法

依旧廖凯

28天写作 3月日更

关于写东西的一点思考

道伟

28天写作

项目截图

赝品

深读golang中map后思考和借鉴

ninetyhe

源码 Go 语言

如何带团队?

石云升

程序员 28天写作 职场经验 管理经验 3月日更

已经整整10年了,经济学人分析日本福岛核泄漏事故带来的沉重影响

wbliu85

翻译:《实用的Python编程》04_04_Defining_exceptions

codists

Python

【动态规划/路径问题】强化 DP 分析方法练习题 ...

宫水三叶的刷题日记

面试 LeetCode 数据结构与算法

数字货币持币生息钱包系统开发搭建

薇電13242772558

区块链 数字货币

华为不养猪,小米没造车,“巨头错觉”是怎么来的?

脑极体

引爆40亿播放的抖音春节道具,背后是怎样的技术?

字节跳动技术团队

震荡的比特币:区块链的“照妖镜”

CECBC

数字货币

LeetCode题解:125. 验证回文串,双指针,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

某些编程语言更容易出错?研究人员提出质疑_语言 & 开发_Thomas Claburn_InfoQ精选文章