写点什么

回答问题的尝试:为什么有的语言成功了,而其他的却失败了?

  • 2012-07-09
  • 本文字数:3634 字

    阅读完需:约 12 分钟

来自 UC Berkeley 的两位研究人员从社会学的角度调查编程语言的推广情况。本文简要介绍他们的研究,然后对两位作者进行了专访。

Leo Meyerovich Ari Rabkin 都是 UC Berkeley 的研究人员,他们尝试回答“为什么有的语言成功了,而其他的却失败了”这个问题,提出一种基于社会学的编程语言理论,取名 Socio-PLT 。他们希望用“ Socio-PLT: Principles for Programming Language Adoption (PDF)”这篇论文令软件社群意识到,编程语言的推广不可以仅仅当作营销方面的题目,推广情况的背后有着社会学的科学理论,并据此提出继续深入研究各种语言接受现象的行动方案。

Meyerovich 和 Rabkin 的研究基础,包括针对数千名参与 Berkeley 在线课程的计算机科学专业学士的一次调查,包括超过 13,000 名 Slashdot、Hacker News、Reddit 用户参与的为时两年的编程语言在线调查,还包括 SourceForge 超过 300,000 个项目的仓库数据。研究者们目前还在消化收集回来的巨量数据,尚未给语言为何成功这个问题找到科学的答案。不过他们已经整理了一批问题和假说,希望有助于打开一条研究道路,运用社会学的研究方法,进一步探讨语言设计和接受问题。我们试举其中几条问题:

问题 3. 具体是什么东西说服程序员接受一种语言?

问题 5. 语言设计者应该跟踪观察什么数据?

问题 9. 我们如何利用社交网络去说服语言的实现者以及程序员采纳最佳实践?

问题 11. 程序员可以精通和略懂多少种语言?是否存在一种语言上的“饱和”概念,程序员只能期望达到一个适度的水平?

问题 16. 程序员对较长的编译、解释时间的敌视程度如何?他们对于用更长的时间换取更完善的错误检查意愿如何?

问题 21. 语言社区的价值观怎样随时间变化?例如,当语言变得较为流行之后,其设计者是对性能的重视程度是更高还是更低?对降低实现负担的重视程度是更高还是更低?

这里还有一些假说的例子:

假说 2. 编程语言的设计者和使用者都不能正确认识语言的性能和特性的实际表现。

假说 3. 开发者群体本身的人群分布会影响技术分析。

假说 4. 一种语言若不能紧追其竞争对手,及时解决对手已解决的用例,将被程序员抛弃。

假说 8. 相当比例的专业程序员知道函数式编程和并行编程,但并不实际使用。知识并不是接受的屏障。

假说 10. 用户更容易接受内嵌型的 DSL,更排斥非内嵌型的 DSL,且 DSL 与其所嵌环境越和谐,被接受的可能性越高。

假说 12. 测试一种语言的表达效果和能力,用它实现一个输入 - 输出库是好办法。

假说 13. 开源 codebase 往往可以代表性地反映其用户群体的整个世界。

假说 15. 许多编程语言特性,如模块化机制,与该特性的社会性用途紧密关联。

InfoQ 联系了 Rabkin 和 Meyerovich,谈谈他们研究的这个语言接受问题。

InfoQ:你们从研究中得到了哪些主要观点?它们有何意义?

AR:首先我应该说明这项研究还没完成,最多算刚起步。我们的确收集了不少数据,但分析工作才刚刚开始。

我可以拿一些传统智慧来回答你的问题,答案的依据只是我本人不科学的个人理解,没有可靠的数据基础。

我和同事 Leo 想搞清楚这么一个问题:语言设计者和编程语言研究群体,对于用户真正想要什么,是否有准确的认识。例如传统上一般认为静态类型的优点是善于捕捉错误,也有利于提高模块化水平。

可是当你去调查程序员的看法,他们不见得认同。有些程序员喜欢静态类型,往往是因为静态类型能起到文档说明的作用,还有静态类型比较容易重构。现在调试一般都结合单元测试来进行。很多情况下类型信息并不是必须的。
我们认为像这样的例子还有很多,程序员们关心的事情和设计者关心的事情有那么一点偏差。如果我们能找出这些情况然后记录下来,会是比较重要的贡献。

LM:还可以拔高一个层次来看:我希望从社会学角度去优化编程语言的研究和设计工作。

我们有相当部分的工作是先找到一些社会学理论,然后对程序员做意见调查,对语言设计者做访谈,看看双方的意见是否脱节,从而确定我们应该如何看待语言的功用。我们已经有证据提示说,在 DSL、程序模块、类型安全、语言 /API/ 程序演化等等基本的编程语言议题上,都存在着分裂的(社会性)基础。

我的第二个目标是开创一种新类型的、能充分利用社会学现象的编程语言。举例来说,能不能让程序随着使用者的增长,自动获得更高的速度和安全性?如果让代码和执行踪迹通过互联网共享,我们能不能将现在花 2~20 分钟搜索 API 用法的行为变成只花 1~2 分钟的智能代码补全?我们并不想盲目出击,所以一直在验证社会学家对于技术的一些想法。工作做得越多,我们越觉得这方面大有可为: )

InfoQ:程序员和编程语言之间存在什么样的社会关系?

AR:这个题目有一点特别吸引人,用户和语言之间的社会学关系不是单向的关系。程序员经常自创各种库,乃至自创各种专门用途的工具去改造手上的编程语言。大多数流行的语言都拥有一套完整的生态系统,可将语言改造为各种截然不同的面貌。例如 Python 配合 NumPy 库之后变成一种可承担高性能科学计算任务的语言,这种任务是 Python 语言本身完全不能胜任的。Ruby 如果没有后来发明的大量工具帮助它拿下复杂大型应用,尤其是 Web 应用的开发任务,它的吸引力不会有现在的那么高水平。

语言设计可以不经意地塑造库和工具的形态,这一点也很有趣。动态语言很容易做测试用的仿真代码,而 Java 就难得多。从这些方面看,“语言原本设计的样子”和它的程序员之间的关系很值得研究。

LM:这个问题的答案是开发性的,其中牵涉的人和过程非常多。

举个例子,我们应该把语言设计者和他们的资助者身份也纳入考虑。现在政府方面(如国家科学基金、国防部、能源部)的资助力度较弱,我们更多地看到企业界的影响(Microsoft、Intel 等等)。这种现象,影响了新语言的设计出来的特性。

单独一种语言范围内表现出来的关系也十分有趣。语言设计者和程序员之间的沟通边界线,因为网络的关系被抹平。这一方面是好事,另一方面(不具备代表性的)早期用户和声音比较大的少数人,很容易被误认为代表了真实的情况。当语言设计者是语言所属专门领域的专家的时候,可以相对缓解代表性失准的问题。初涉语言设计的人因为缺乏历练,不可避免地会在一些基本的设计问题和性能考量上重新发明轮子,同样不可避免地会搞错一些重要的方面。像 JavaScript,安全 / 语义 / 性能专家不得不在事后大动干戈地改造它,而成效有限。世上不如人意的事情太多: )

从我前面的观点可以看出来,我预料关系将会发生变化。例如当程序员之间的分享行为越来越普遍,可以想象语言和工具能做的事情也会更多。希望十年后,我们回过头来看今天上 Google 查开源代码,上 StackOverflow 问问题之类的行为,会觉得太幼稚。这样的变化将从社交和技术两个角度改变编程。

InfoQ:为什么有些语言比别的语言流行度高很多?

AR:关于这一点,我手上真的没有数据,所以只能说说观点而不是事实。

一种语言能流行,有的是因为出现了杀手级应用,有的是因为有深厚的业界支持。前一种情况的例子有 Ruby,因为 Rails 而取得成功。还有 C,在很长一段时间里,C 都是开发 Unix 和 Unix 工具最简单的高级语言。

后一种情况的例子如 Java 和 C#。这两种语言都没有什么特别创新的地方——只是在 Smalltalk 和 C/C++ 之间找的折中。它们真正突出的特点是良好的文档、完善的类库和跨平台实现。这几项都是开发成本高昂的特性,如果没有 Sun 和 Microsoft 建立“现代”语言平台的战略决策,是建立不起来的。

LM:说得对,而且不存在什么成功的保证。用简单的生态原理推导一下就知道,事情绝不会那么容易:每一种新语言都是对社会资源的一次分流。程序员需要花时间精力去掌握语言,花时间精力去建立各种库,时间精力都是资源。

Scala 是一种设计的时候就考虑了接受问题的语言榜样。Java 的政治版图前景不明,于是 Scala 把自己定位成 Java 的替代者(历史会证明的!)。虽然 Scala 根本就是一种通用语言,他的开发团队却花很多时间去照顾财经领域和初创企业的早期用户。财经领域和初创企业都是能给 Scala 带来声望的垂直细分市场。而且我猜想这类开发者学习新语言没有障碍,更换语言的成本较低。支持原有的 Java API 和 Java 遗留代码对开发者很有吸引力。Scala 语言拥有一些在学术上领先的先进特性,但它并不去刻意强调,而是明智地选择于己有利的意识形态战场。大多数程序员都不会注意这些方面。诸如此类我还可以继续说下去:)

InfoQ:为什么有些语言寿命比别的语言长很多?

AR:有个老笑话是这么说的,“我不知道 15 年后工程师会用什么语言,但他们管它叫 FORTRAN。”像 Basic、Fortran 这些古老的语言,从它们现在的模样已经完全认不出当初发明时的样子。很难回答“语言可以维持多长时间”。即便是 C 语言,自 K+R 1.0 以来也经历了持续不断地改进。

也许可以改为问人们什么时候开始不再在新项目里使用一种语言。很遗憾这方面的数据不多,我不知道怎么画一根曲线来回答“Modula-2 的使用量高峰是什么时候”。我还没找到好的答案。

查看英文原文: Trying to Answer the Question:Why Some Languages Succeed While Others Fail?

2012-07-09 14:423044
用户头像

发布了 225 篇内容, 共 64.1 次阅读, 收获喜欢 50 次。

关注

评论

发布
暂无评论
发现更多内容

JavaScript进阶(二)上

Augus

JavaScript 9月日更

一文揭示,DevOps与企业数字化究竟有何联系?

SoFlu软件机器人

DevOps 自动化 软件工程

“京东商城”亿级高并发秒杀系统到底是怎么设计的?自己做该如何下手?

Java架构师迁哥

诧异!GitHub上竟有阿里专家用800页笔记,只讲MySQL调优而且火了

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

网络攻防学习笔记 Day137

穿过生命散发芬芳

网络基础 9月日更

Flutter IM跨端架构设计和实现

OpenIM

北鲲云超算平台为何能够被高性能计算行业认可?

北鲲云

炸了!阿里又一力作上传GitHub,Spring Cloud Alibaba差距不止一点

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

由于太全被各大厂要求Github连夜下架

Java架构师迁哥

开源即巅峰!阿里首次分享:Java架构师全栈“成长笔记”

Java架构师迁哥

中原银行分布式批处理调度平台介绍

中原银行

分布式 批处理 中原银行

阿里P8手抄本惨遭泄露,并出现病毒式传播,致28人斩获大厂offer

Java架构师迁哥

足足541页!费了大力气才从GitHub上扒下的阿里Java优化“圣经”

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

Vue进阶(幺幺贰):package-lock.json 文件解析

No Silver Bullet

Vue 9月日更

云备份和恢复的优缺点

云计算

GitHub获120w+star的JDK源码剖析手册,竟出自Alibaba高管之手?

Java 程序员 架构 面试 Alibaba

真香!霸榜掘金首页第一,阿里内部Java性能调优笔记终于开源了

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

32岁的我裸辞了,八年Java老鸟,只因薪水被应届生倒挂,在闭关三个月后拿到阿里Offer,定级P7!

Java架构师迁哥

GitHub星标70K阿里大佬手写的Spring Boot实战手册

Java架构师迁哥

一位年薪 180 万的字节大佬扔给我的四份学习笔记

Java架构师迁哥

如何高效学习 Kubernetes 知识图谱?

阿里巴巴云原生

Kubernetes 容器 云原生

2021全球高性能云计算创新大赛,9月15日重磅启动!

亚马逊云科技 (Amazon Web Services)

云计算

网络协议之NAT穿透原理

Linux服务器开发

网络协议 p2p NAT Linux服务器开发 网络穿透

Filecoin算力矿池挖矿系统开发案例

薇電13242772558

区块链 IPFS

发布60分钟!霸榜Github的阿里面试参考指南,啃透涨薪10k

Java架构师迁哥

The Data Way Vol.4|开源是创造软件诸多方法中最好的一种形式

SphereEx

数据库 开源

牛客网论坛最具争议的Java面试成神笔记,看过的人都已经成功进入大厂

Java 编程 程序员 架构 面试

实时数据引擎系列(五): 关于 SQL Server 与 SQL Server CDC

tapdata

openGauss X ShardingSphere,分布式方案的另一种最佳实践

SphereEx

数据库 开源

探秘 JavaScript 世界的神秘数字 1.7976931348623157e+308

清秋

JavaScript 大前端 浮点数 引航计划 IEEE754

如何获取系统错误报告--Bug Report

Changing Lin

9月日更

回答问题的尝试:为什么有的语言成功了,而其他的却失败了?_编程语言_Abel Avram_InfoQ精选文章