关于计算机科学:一个Python程序员学习Ruby会得到什么?

What will a Python programmer gain by learning Ruby?

我将在大学里学习鲁比、哈斯克尔和普罗洛。现在,我想知道我应该注意什么。我有半年的时间来完成这三项任务,这意味着我需要决定一种语言来获得课外时间。其他的我将在课程中学习到足够好的。

我对Haskell和Prolog非常熟悉,知道学习它们将教会我一些非常重要的计算机科学概念。我对鲁比不太确定。

通过一些教程和介绍,我觉得Ruby有很多肤浅的魔力。现在我问红宝石人:如果我决定不再使用它,在我花了半年的时间学习之后,我会得到什么,那Python还没有教我。

这个问题并不是要为Ruby"开诚布公",尽管我意识到这是一个很有争议的潜在话题。

我现在使用python完成所有的cs工作。我也用它做了很多函数式编程。我也已经熟悉了面向对象的编程(在爪哇,Python和C.*)。如我所说,我将用prolog做一些逻辑编程。

还有什么留给鲁比教我的?

为了进一步淡化这个问题:

  • 我对写作不感兴趣程序或酷的Web应用程序。我只是对电脑感兴趣科学的点点滴滴实现算法、数据结构等。(尽管玩得开心肯定不会有伤害)

  • 理想情况下,讨论的概念需要在大约1000小时内学会。

  • 我对铁路一点也不感兴趣。在这种情况下,任何隐藏复杂性的技术都是有害的。

我忍不住要争论这个问题。但对于这个问题的一个理想答案将提到一个非常重要的理论计算机科学概念,Ruby帮助程序员使用和理解,以获得科学辅助知识。

对于我提出的候选人是元编程和多线程。我不知道Ruby是否特别擅长学习它们。


在大多数情况下,什么都没有。Ruby的大多数优点/缺点与Python的相同,只是Ruby的"功能性"稍高一些。但是,如果您有haskell作为选项,那么从haskell学到的函数式编程比从Ruby学到的要多得多。

第二,如果你从理论上的计算机科学的角度来看待事物,那么Ruby远不是一种可以选择的语言。Ruby和它的许多库打破了许多标准的OOP教条,我相信许多学者会觉得这很令人反感(这主要是基于我与不同教授谈论语言的谈话)。

从学术角度来看,我认为哈斯克尔对你的吸引力最大。如果你对人工智能或逻辑感兴趣,那么prolog也是一个很好的选择。


以下两个问题的答案总体上是相同的:

  • 如果我已经了解了python,我将从ruby中学到什么?
  • 如果我已经知道Ruby,我会从Python中学到什么?

两者的答案都是:

  • 没有什么重要的,除了一种稍微不同的做事方式。

它们都是动态OO语言。Ruby使自己的功能稍微更强大一些,而Python还有其他一些不错的功能(列表理解)。不过,总的来说,从一个到另一个,你不会学到很多通常适用于计算机科学的知识。


Ruby和python在真正的CS方面非常相似,你的大脑可以从中得到——它们之间的差异很大程度上是表面的和实用的。基本相同的区域:

  • 这两种语言都是强动态类型。
  • 两者都支持许多范例,如函数、面向对象等。
  • Ruby有更多的fluff/sugar(类似于Perl),而Python则认为显式优于隐式。

如果您对解释程序、框架和测试感兴趣,那么这两个方面的斗争是值得的,但是从理论上讲,您将从Haskell或Prolog中学到更多。


我已经专业编程20多年了,有许多不同的语言,从汇编语言和C语言到各种SQL语言。有了这个范围,我就有了一个很好的工具箱,当我需要做一些事情的时候可以从中挑选出来。

每一种语言都有它的优点,知道它们是什么会在你的职业生涯中帮助你。没有语言是最终的一切,成为所有的编程语言,你知道的语言越多,你就能完成的越多,你就越容易找到学习新语言的方法。


如果你想学计算机科学,那就去学斯卡拉。这就是未来的计算机科学语言。看看你是否能学会那一个;

否则,露比是一个很好的语言学习,如果你想在你的学习后更适销对路,因为它可能是最容易得到一份工作后。

算法和数据结构也都很好,但不要忘记架构和高级设计。这是非常重要的-能够设计大规模的东西,不臭设计不佳。在这3个选项中,Ruby有很多要向您展示。斯卡拉也是。

所有的语言都可以做CS的事情,所以我不知道一种语言会有多大的危害。当然,一种语言可能比另一种语言更优雅,但是人们习惯于在一天内用C和C++来表达CS级的东西,因此,如果你只是想学习概念,而不是用语言变得流畅,那么你就不会出错。

一旦你知道了一组概念,就很容易理解任何使用这些概念的语言。