首页 存档 技术 查看内容

编程语言的叛逃路线,猜猜 PHP 转投最多的是?

2018-3-30 13:00 |来自: 互联网 330 0

摘要: 本文图表尺寸很大,「程序员的那些事」先来解释如何读图: 左侧纵向语言是「叛逃的源语言」; 上方横向的语言是「叛逃的目标语言」; 例如:从 C 语言转到 C# 的数量为 3619,从 C# 转到 C 的有 37229; ( ...

本文图表尺寸很大,「程序员的那些事」先来解释如何读图:


  • 左侧纵向语言是「叛逃的源语言」

  • 上方横向的语言是「叛逃的目标语言」

  • 例如:从 C 语言转到 C# 的数量为 3619,从 C# 转到 C 的有 37229;



(点击上图,然后双指缩放,可以看到详细数字。以下类同)


有意思的部分来了。实际上我们可以把搜索结果数看作是编程语言之间转换的概率,从而得出一些关于未来编程语言的流行趋势的结论。一个关键点是,这个(编程语言转换过程)的平稳分布并不取决于它们的初始分布。事实证明,这只是矩阵的第一特征向量(first eigenvector)而已。所以没必要去假设现在哪种编程语言很流行,我们推测出的未来的平稳分布状态和初始状态是独立的。

我们需要把上述的联列表转化成转移矩阵(stochasticmatrix)的形式,用来描述从状态 ii 到状态 jj 的概率。非常简单想要把联列矩阵解释为转移概率的话,可以将联列矩阵的每一行正则化。这样就能得到从 X 语言到 Y 语言的粗略近似概率。

找出第一特征向量并不重要,我们只要把一个向量多次乘上这个转移矩阵,最终会向第一特征向量收敛。顺便说下,可以看看下面的注意事项,有关于我如何操作的更多讨论。

Go 是编程语言的未来(么?)

闲话少说,下表是平稳分布下排名前几的语言:

16.41% Go
14.26% C
13.21% Java
11.51% C
9.45% Python

根据未来流行度,我把转移矩阵按照编程语言做了排序(根据第一特征向量所做的预测)

(点击查看大图)



这图非常有意思,展示了在数据分析中 R 和 Python 之间的转化率。

JavaScript 框架

我对前端框架也做了同样的分析:

我预期 React 会脱颖而出成为第一,但有趣的是,Vue 也表现得非常好。我很惊讶于 Angular 的表现传闻大批的人似乎在逃离 Angular。

数据库

我开始留意共享单车 App,深度学习框架还有其他一些东西,但是数据太稀疏了,也不太可靠。有结果的话,会及时向大家公布的!

注意事项

  • 关于我这篇文章,看看网友们在Hacker News和/r/programming上的讨论;


  • 《为什么我从编程语言 1 转向编程语言 2》这篇博文也给我了启发;


  • 下面是如何抓取 Google 并获取搜索结果数的代码:

    defget_n_results_dumb(q):

    r=requests.get('http://www.google.com/search',

    params={'q':q,

    "tbs":"li:1"})

    r.raise_for_status()

    soup=bs4.BeautifulSoup(r.text)

    s=soup.find('div',{'id':'resultStats'}).text

    ifnots:

    return0

    m=re.search(r'([0-9,] )',s)

    returnint(m.groups()[0].replace(',',''))


    • 很不幸,Google 对查询的 IP 有速率**,但是我最终用Proxymesh抓取到了这 N*N 组合所需的所有数据。

    • 注意:我在搜索的时候将确切的查询语句放在双引号中了,比如:“switch from go to c ”

    • 细心的读者可能会问为什么 JavaScript 没有包含在分析中。原因是:(a)如果你在前端开发中使用它,那么你会一直坚持用下去,并没有转移的这个过程,除非你疯了,要做转译(transpiling,从一种编程语言到另一种编程语言的编译),这种情况太不常见了;(b)大家会把后端的 JavaScript 认作是 “Node”。

    • 对角线的元素又是怎么回事呢?当然了,有些人会只坚持使用一种编程语言,这也是有很大的可能性的。但是我选择忽略它,因为:(a)事实证明,像“stay with Swift”(坚守 Swift)的搜索结果 99% 都是和女明星 Taylor Swift 相关的;(b)平稳分布与添加一个常数对角(单位)矩阵是无关的(即添加一个常数对角矩阵结果不变);(c)这是我的博客,所以我想怎样就怎样 [坏笑]

    • 对于上一条的(b),e(αS (1α)I) = e(S)这个结论是对的,其中,e(…) 是第一特征向量,I 是单位矩阵。这个结论可能不完全符合现实,对于不同的编程语言,你坚持用它的概率可能是不相等的。

    • 重复相乘以得到第一特征向量的方法叫做幂迭代(Power iteration)。

    • 这个用特征向量表示的模型能不能对实际情况做超准确地描述呢?大概不能。我的脑海中浮现出了一句来自 George Box 的名言:“所有模型都有错,不过有些还是有用的”(All models are wrong, some are useful,意为没有模型能够完全准确地描述实际情况,但是可以用一些模型来解决问题。George Box是英国著名的统计学家)。

    • 我也知道还有一些其他的约束条件需要一一考虑,但是实际情况基本都是这样的。

    • 代码可以在Github 上找到:https://github.com/erikbern/eigenstuff


      关注我们

      1.官网:1ke.co(点击“阅读原文”即可进入)

      2.公众平台:在通讯录添加,查找公众号:“wow1ke”,回复“入会”小编拉你进入微信学习群

      3.个人账号:在通讯录添加,搜号码:“wow1kezhushou”,随时向我们提问,并关注我们的活动信息和状态更新


      声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

      路过

      雷人

      握手

      鲜花

      鸡蛋

      相关分类

      返回顶部