Python开发人员在学习Ruby时应该知道什么?[关闭]


16

我从事Python程序员工作大约18个月,其中包括一次实习和一些附带项目,我认为自己对这种语言非常满意。

但是,在编程领域似乎对Ruby有很多关注,但对Python则不再关注。

因此,在学习Ruby时,是否会有Python风格的东西只是Ruby中的不良做法?我应该注意什么,应该避免什么?


4
如果我应该学习Python,我一直都认为自己是Ruby程序员,因为所有人都在谈论它:P
Earlz 2011年

尽管有嗡嗡声,但似乎Python的使用率仍是Ruby的两倍(至少根据TIOBE-> tiobe.com/index.php/content/paperinfo/tpci/index.html)。
Daniel Scocco

10
而不是成为“ Python程序员”或“ Ruby程序员”,您应该尝试成为一名出色的程序员。然后,您可以使用所需的任何语言,并在适当的时候使用新的语言。
BlackJack

Answers:


31

我在2003-5年做Plone / Zope顾问时就使用Python。然后在2006年,我开始学习Ruby。我从来没有回头。我认为不同的人会更适应不同的编程语言和文化,但是对我来说,Ruby比Python感觉好很多。

我个人认为,与Ruby相比,Python是可靠的主力,碰巧也有些呆板和乏味。Ruby更有趣。这是一种外观漂亮的语言,可以做很多有趣而时髦的事情,令其从业者赞叹不已。我听说Python人士攻击Ruby太危险了,他说重新打开类并执行诸如此类的野蛮不负责任的工作太容易了。但这就是让Ruby对我来说就像是动作冒险喜剧爱情片的部分原因。相比之下,Python更像是宜家家具:令人愉悦,舒适和可靠-但它永远不会令您惊讶并喘不过气来。

在我看来,关于Ruby的两件最好的事情是使它与Python明显区别的两件事。首先,Ruby受Perl影响很大。Python似乎以成为反Perl感到自豪。但是Ruby从Perl借来的东西具有很大的实用价值。以正则表达式为例。在Ruby中,您可以自然地编写正则表达式,例如if mystring =~ /^\s+hello word!/ ...。在Python中并不需要那么多,因为Python非常注重使所有内容遵循统一可预测的语法。在Ruby中,您可以使用立即获得STDIN input = STDIN.read。在Python中,您必须import sys然后然后 sys.stdin.read()。这只是两个例子,其中Python努力使自己与Perl保持距离并如此可预测地规律化的努力被Ruby愿意在每种情况下做正确的事情所击败。

Ruby与Python区别的另一点是Ruby与Lisp更加接近,而Python几乎是一种命令式编程语言。我认为这对Ruby有利。

Ruby有许多类似Lisp的功能,使得用更少的代码(比使用Python)做更多的事情成为可能。例如,Ruby中的每个语句和控件结构都返回一个值:无需使用该return语句就可以在Ruby中逃脱。甚至if语句的值都是一个值,因此您可以编写如下内容

result = if output == 'hello'
           [some code here]
           "world"
         else
           [some other code here]
           "there"
         end

在Python中,您必须编写

if output == "hello":
  [some code here]
  result = "world"
else:
  [some other code here]
  result = "there"

Python使您键入result =两次。那不是很干(不要重复自己)。在许多这样的实例中,由于其类似Lisp的特性,Ruby将比Python更干燥。Ruby的创建者Matz来自Lisp背景。

有人说Ruby在元编程(又名动态编程)中也发挥了Python的作用。Python人士通过说元编程太危险,或者说从理论上说,您可以用不同的方式完成Ruby在Python中可以完成的元编程工作来回应。但是每个人都同意的一件事是,元编程在Python中远没有在Ruby中常见。那太糟糕了,因为元编程是一次旅行。

我认为在一天结束时Ruby和Python都可以完成工作,这可能是对的。与C和Java相比,Ruby和Python几乎是同一回事。它们是富有表现力,富有成效的高级语言。

所以归结为你的个性。

您是否希望事情是可预测的,定期的和安全的?您喜欢命令式编程风格吗?您是否想为Google工作?您认为Perl是混乱的地狱产物吗?坚持使用Python。

您是否很高兴找到绝对最简洁的方法来完成某些编程结果?您是否对规则性和统一性感到厌烦?您是否想自由地以自己的风格编写代码,并有足够的空间提出自己的绝妙技巧?您对Lisp的亲近感是否比对C的亲和力好?您是否对Perl对软件编程的划时代的贡献感到钦佩,但只希望它可以少一点神秘和丑陋?您是否像其他人对诗歌那样思考代码?试试Ruby。


11
“那太糟糕了,因为元编程是一次旅行”……就像一次旅行一样,这对一个晚上来说很棒,但是最终您早晨醒来却忘记了所做的事情。我认为在Ruby中过分强调了元编程,相对于Python,我更喜欢Ruby。Ruby对于语法问题的大多数解决方案是“您可以通过元编程解决它”
Earlz

23
什么?result = "world" if output=="hello" else "there"是完全有效的Python(短3个字符)。
蒂姆·皮茨克

3
@Tim OK,谢谢你纠正我。但是,您是否可以使用if / elsif / elsif / else语句来做同样的事情-即Python中的if / elif / elif / else?即使if或else子句中有多个语句,您也可以做同样的事情吗?

1
等一下,Python没有三元运算符?
PP。

3
“ Python的创建者Matz来自Lisp背景。” 等等... AFAIK Matz是Ruby的创造者...
Eimantas 2011年

6

这取决于。

对我来说,python比ruby容易上手,而且两种语言都有不同的用途。

Python更像是一门经典的语言,具有许多底层的东西,例如,与C相比,Python保持简洁易用。Python没有Ruby的野心,对我而言,Ruby具有很多高级功能。

学习Ruby不会伤害您,您会发现很多新事物,但是要知道,Python比起更简单的编程范例更能使C成功,并且提高了生产力。Ruby对于那些希望在编程概念上走得更远的人更有用:Scheme和所有这些“高级”语言。


3

简短的回答:是的,是的。

学习一种新语言几乎总是有用的,特别是对于Ruby来说,因为Rails仍然很流行。是的,非常了解Python将使您轻松选择Ruby。它们在命名上有一些语法上的区别和约定,但是也有很多共同点。

这不是一笔大的时间投资,并且在工具箱中拥有更多的工具总是有好处的,所以继续吧!

(我已经使用Python大约十年了,去年使用了Ruby。目前在RoR项目中全职工作)


2

一切都有一个利基。例如,Python(django)是GoogleApp Engine的一等公民,而Python是许多生物信息学项目的语言或选择。Python确实具有很大的市场价值(我之所以获得许多主动提供的工作机会,仅仅是因为我在Python上做了大量工作),但是Ruby也是如此-在不同的领域。毫无疑问,您已经在这里多次听到了,它将始终帮助您学习更多的语言,是的,学习Ruby。会复杂吗?它比学习COBOL复杂得多,因为可用的语言和框架彼此相似。一个例子是Ruby的gems和python的pip

请记住,语言是工具,每种工具都是有目的的。您知道的工具越多,您可以更快,更轻松,更正确地构建树屋。


我想按同样的方式回答,希望您不要介意...
Dimitrios Mistriotis 2011年

2

我应该学习红宝石吗?是。

学习一门新语言总是值得的(特别是如果它采用与您所熟悉的编程范例不同的编程范例),有时即使您使用其他语言编程也可以使您更加精通。例如,我学习了Lisp掌握的大多数功能编程,并在需要时将其应用于Python和Ruby。

会很难吗?如果您已经学习过Python,那么您当然也可以学习Ruby。

如果您现在正在寻找工作,它也很有用,它表明您对技术有好奇心,并且可以自己学习。

c2.com上,Ruby和Python之间有很好的比较。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.