新手问题 什么差异导致了 AI 领域选择了 py 而不是 rb?

ytp · 2023年06月14日 · 最后由 MasutaaDAO 回复于 2023年07月25日 · 3343 次阅读

非引战,在我看来,两者性能和语法上差不多,ai 兴起的时候 rb 相对 py 还成熟些(毕竟 rails 成名很早了)

https://rubyinstaller.cn/ 打不开页面。 AI 选择 py,我理解有一个重要原因是两者的核心差异,ruby 太灵活,相对于 py 不那么适应大规模团队的协作,更适合于以一敌百的狮子,而 AI 需要不断的进化和团队协作,需要群狼、鬣狗。matz 和 dhh 创始人赋予了 ruby 这种基因。

这个问题我之前也 google 过,有这么个说法,当时 google 做科学计算的项目时候选用了 python,然后也继续优化了相关的库,大概生态形成了,然后科学计算的人继续涉及 AI 也就沿用了吧。

python 是多範式語言,ruby 是 oo 語言,天生沒有函數,對數學的親和力差

就一点,Windows 不友好

chatgpt 的答案

AI 领域选择使用 Python 而不是 Ruby 有以下几个原因:

  1. 生态系统:Python 拥有庞大的生态系统,有很多著名的机器学习框架支持 Python,如 TensorFlow、PyTorch、SciPy 和 Scikit-learn 等,这使得 Python 成为科学计算和数据分析的首选语言。相比之下,Ruby 生态相对较小,机器学习社区也没有像 Python 那么活跃。
  2. 性能:Python 具有很好的性能表现,因为 Python 有很多高效的数值计算库,而且又可以利用 C 语言编写的扩展库来优化性能。Ruby 的性能也很不错,但是在大数据处理时 Python 更适合。
  3. 学习曲线:Python 的学习曲比较平缓,易于入手,适合初学者。Ruby 的学习曲线较陡峭,需要较长时间的学习和实践才能掌握。由于 AI 领域有很多初学者,Python 更适合广大开发者学习和使用。

综上所述,Python 在 AI 领域中比 Ruby 更具优势,因而选择了 Python 作为优先开发语言。

不得不承认,python 在某些方面就是优秀,python 更接近数学思维,一种问题只有一种解决方案,更利于多人交流沟通。

ruby 的内置方法很丰富很强大,但有一部分是多余的,根本就不需要的,徒增记忆成本、交流成本。

在 ruby-china 说 python 好,属于政治不正确。

不过,把 ruby 饭圈化,不利于 ruby 的推广,还好,这里不是官方社区。

ccmywish 回复

你要反駁我可以 at 我的,ruby 只有 method 沒有 function 我覺得應該是 rubyist 的常識,function 的特徵是可以做 composition,但是 method 必須要轉換成 callable object 才能做 composition。callable object 在 ruby 裏是做不到 python 的 function 那麼自然的,會弄到到處都是.call或者.()

https://thoughtbot.com/blog/proc-composition-in-ruby 供參考

看来「以上错误观点」并不包括「Windows 不友好」

mizuhashi 回复

不 at 你是因为无意冒犯。

以 thoughtbot 文章为例,

pay_tax = -> sal { sal * (1-0.4) }
subtract_benefit = -> sal { sal - 100 }

# compose
subtract_benefit_then_pay_tax = -> sal { pay_tax[subtract_benefit[sal]] }

subtract_benefit_then_pay_tax[10_000]

你可能忘了还有更自然的 []。这个 issue 根本不是一个 AI领域选择py而非ruby 的根本性原因。

@ironboxer Ruby 是在 1995 年才公开发布,而同年,numpy 项目的前身启动。这也印证了我说的,搞这个的人,压根就没用过 Ruby,也不可能在此时有机会使用 Ruby。Ruby 直到 2000 年以后才开始进入西方,这时numpy的一套生态系统已经开始完善。

归纳一下:Stroustrup 的研究基于simula是由于地理隔离,接触不到smalltalk,那么可以说 numpy 的研究基于python是由于时间 + 地理隔离,接触不到ruby.

说一种很没有意义的假设:如果是在 2005 年那些搞数学库的人去选择一个语言,他们也可能会选择 ruby,那时,就叫做numrb了。

完了,已经开始思考历史是偶然随机的,还是有必然性的。

gaicitadie 回复

不,我坚定地捍卫你 在社区可以发表 Python 优于 Ruby 结论的权力,同时我也坚定地批判你 通过个人喜好原因直接推导出普适性结论 的思路。

是你在输出错误的观点,我就着你的论点逐个辩驳,你却不愿正面回答,反而用饭圈化这种字样来回应我。

你有没有看到这个帖子分类在 新手问题?你的错误言论也许导致另一个程序员放弃对 Ruby 的尝试,你的 python 在某些方面就是优秀 这种言论脱口而出,而不加任何具体例子才是 python 崇拜论的典型思维,试图以简单的 Python 优秀,所以 AI 选择 Python 来逃避。

如果承认 Python 优秀都被口诛笔伐,那么这个社区真的为了洽饭不顾吃相了。

PS:真怀疑某些内容是 ai 生成的,看上去头头是道,实则老太太裹脚布,又臭又长。

gaicitadie 回复

我已拉黑你,因为我现在意识到,不是楼主的问题在引战,反而是你这种不讲逻辑的评论在引战。

用几个小号发一些似是而非的大道理来保持社区的“高端感”,然后组织所谓的“大会”卖票恰烂钱。

真是对技术社区的侮辱,对技术的侮辱👎

楼上的两位大佬别吵啦,我只是个没学习 rb 多久的新手,这个问题也是偶然想到的,大佬们的观点对我都很有帮助,也希望大佬们能求同存异,谢谢!

罗翔老师说“人类的理性是有限的”,而这个理性最常见的表现是“概念”(或者叫定义)的内涵和外延上面。题主问的问题是“差异性”,而不少答主自动转成了“优劣性”进行比较回复,这个算是偷换了概念,差异性≠优劣性。 大家聚在这里都是写代码的,都强调准确、理性,应当尽量避免这种与职业属性不一致的思维模式,应当精确的针对指令(问题)进行响应。

ccmywish 回复

沒覺得[]哪裏自然了,你要是覺得這個好用那你就把一切代碼都用 lambda 和 [] 寫好了,除了以前玩邱奇數我就沒見過誰這麼寫 ruby,而且要這麼寫我為什麼不用 python?ruby 真正有意義的構件都用不上。每一種抽象都有各自的長短處,如果你認為 ruby 選擇的抽象就是終極銀彈,我只能祝你好運。

ccmywish 回复

你找個用 lambda 來組織代碼而不是 def+block 的 ruby 項目給我看看?我還真想看看這麼寫多有吸引力

我觉得没那么复杂,就是因为 Ruby 早期对 window 支持不好的缘故。我记得我因为学校当时要做 ruby 项目,专门把我的本本格了装上 linux。很多同学最后就放弃了。

mizuhashi 回复

组织代码当然要用 def,Python 有完全靠lambda组织代码完全不用 def 的项目?

https://github.com/dry-rb/dry-schema

scheme做的比python好多了。完全不是 AI 领域选择 py 的理由。再者我已经强调,核心的计算操作都是 Fortran,C++,C,Assembly 完成。一个 wrapper 无法体现与数学的亲和

就算不说schemehaskell的表达比python要”亲和数学“的多的多,流畅的多,而且完全开源,时间上也满足。

Ruby 生来就不是富裕的家庭,现在还能保持一定热度算是不错了。用饭圈的话说,至少火过,至少闯美成功了。

把 AI 领域换成少儿编程答案应该差不多吧。

ccmywish 回复

python 的 def 定義的是 function,ruby 的 def 定義的是 method,method 要轉換成 object 才能被傳遞,別的語言的 function 隨意可以接受兩個 function 作為參數,ruby 卻只能帶一個 block,這本來就是設計 tradeoff。你提別的語言倒是提對了,這個領域就算沒有 python,輪 matlab 輪 julia 也輪不到 ruby

mizuhashi 回复

別的語言的 function 隨意可以接受兩個 function 作為參數,ruby 卻只能帶一個 block

更正一下:ruby 函数可以带任意多个 proc(function 要转一下),但是只能接受一个匿名 proc(block)。

另外 method 也不用转 object,也能直接调用,定义在 Kernel 下即可,如果要调用,在 Kernel 下的直接调用即可,不用传,如果不是,必然是带着 object 信息,所以。。

没有仔细查语法,只是凭记忆写的,欢迎更正。

y9info 回复

dhh 的部分能展开点吗 hhh 想多了解点 纯追星

gaicitadie 回复

数学不鼓励一题多解吗

mizuhashi 回复

哈哈 有营养的辩论 先马克文章

ccmywish 回复

有理有据 不是“冒犯”

ruby 社区很包容

就怪 ruby 早期文档大部分都是日语导致欧美开发者不情愿接受所以开发慢楼

ericguo 回复

我說的不是調用,是傳遞,ruby 的語法是對單個 block 優化的,這導致寫 dsl 很好看,但是如果需要傳入多個 block 就會要轉 lambda,其他語言沒有 block 的設計,但是 function 可以當第一公民傳遞,例如 js 裏function a(){} 之後 a 本身就能傳給其他函數,而 ruby 需要先method(:a)轉成對象再傳

再这样搞饭圈,圈地卖票卖书搞钱,还能留住多少“真”用户,为了恰饭,不惜歪曲事实,当然割韭菜是不在乎“真”用户的。

楼上是中什么毒了,一直在循环“恰饭 割韭菜 饭圈”几个词,但也不展开说一下这么讲的理由。。。

我不是很明白,400 一张票(包括万豪的自助午餐)是怎样把人割韭菜了,还是说其他语言社区都不搞类似交流会而只有 Ruby China 在搞?

卖书又是怎样割韭菜的?写书是一个罪过吗,这个事情难道不是接近于赔钱吗?亦或者说你看到了哪本 Ruby 书卖了千八百块钱一份 pdf?

其实我也觉得,也很理解人们都对自己喜欢的事物天然有一种“证实偏差”一样的症结,总有维护大于反思的倾向,但一个“歪曲事实”的帽子也未免太大。我全程看到的是 ccmywish 的观点回复(即便或许不能为所有人认同),但楼上则是在循环人身攻击。

所以楼上的立场到底是什么?是为了 Ruby 的发展吗?那么为什么不写一些你所认为的真正的反思给大家看呢(而是一直在别人的观点下面说割韭菜之类的词语)?那么是为了给 Ruby 喝倒彩?无法理解,你从中得到了什么快感吗?

zhandao 回复

罔顾事实了哦,我是一直被人身攻击,就是因为我指出了这里面的一些潜规则,这氛围根本就不像一个真正的技术社区。

gaicitadie 回复

在这个帖子下面我是没有看到 ccmywish 的人身攻击的,还是说在其他帖子中?

以及“潜规则”和氛围的评论,可以指个链接吗?

nine 回复

事实上,正好相反,对于我来说,我自己编译的 ruby 在 windows 下从 2.0 到现在的 3.2 都没有问题,x86 和 x64 都可以,当然 C 代码只需要修改一小部分,mingw 的 gcc 版本从来没超出过 4.9,一般来说<=2.7 版本的使用 4.7 左右的就够了,一般 4.4 也可以胜任,gcc 3.4.5 一直编译到 ruby 2.5,但是反观 python,用 gcc 编译到 windows 下非常困难,必须用 vc 系列,我并不认为 python 对 windows 比 ruby 友好,从解释器的代码看,ruby 的代码比 python 好很多,2.x 开始一直比 python 3 系列快那么一小点。

DarkSpy 回复

也许能编译出来,但是社区不友好,推荐的都是 Linux、Mac。 Windows 下跑 Ruby 的相关文章都很少,我是写过的,https://ruby-china.org/topics/38499Windows.。但是最终由于诸多原因还是放弃了

入门玩家需要的是海量的文档和文章,这样即使跑不起来,也会觉得很有希望。

nine 回复

我是不是应该把我编译的或者分享出来,或者写个文章啥的

DarkSpy 回复

那肯定是多多益善啦,社区完善靠大家

DarkSpy 回复

支持写文章

一个是流行度,在 ai 没火之前,python 的流行度就不是 ruby 可以比的。 二是生态的完善度,numpy,pandas 这些库质量太高了。

Because they are both bullshit!

kikyous 回复

还有一点松本这个人太佛系了

mizuhashi 回复

@mizuhashi 过了几天再看这个帖子,觉得自己有部分话言重了,言语中的确夹杂了一些间接攻击的言论。向你表示歉意,我已删去部分比较不妥的评论。

至于 python 的某些部分亲和不亲和,纯属是不同的看法,我没有必要上升到对你技术层面的质疑。

再次向你表示歉意,以及因破坏了社区友好的讨论氛围向社区各位朋友致歉。

ccmywish 回复

沒事,我很理解你的想法,因為我以前也覺得什麼都應該用 ruby 來做,不過對於沒有深入了解 oo 和消息傳遞這套機制的人來說,ruby 對他們並沒有很天然的吸引力,我想給數學朋友安利的時候也無法說清這比起他們現有的工具究竟有什麼優勢?但是對於業務程序員來說,ruby 的優勢是很明顯的,例如 rspec 就沒發現哪個語言有功能相當的替代品,這也是我對 ruby 依舊有信心的原因

谁的字多,我相信谁。。。😂

mizuhashi 回复

很多时候一门语言是否流行,真的就是各种基机遇巧合,javascript 和 nodejs 例子就是证明啊。

ccmywish 回复

對呀 真誠次是最好的

松本的因素感觉次要一点,主要还是工具本身的使用门槛、本地社区的定位以及整体的社区活跃度。

工具方面,时间回到 2013 年,那时候在 Windows 上跑 ruby 也不是不行,不过有一种常见情况,github 上翻到一个貌似不错的库,结果往下翻 readme 发现暂不支持 Windows。以及当时 Windows 上的 irb 启动比 py27 的 repl 还要慢一点点,这里可以参考为什么有的人选择了 lua 而不是 python。torch 最初也是 lua 写的,lua 跟 c 结合很容易,runtime 小,后面还有了 jit,所以讨论科学计算的时候没办法忽略性能问题。python 虽然性能也很拉,但官方实现跟 c 结合很紧密(个人感觉),numpy 的诞生应该可以说明这一点。至于科学计算本身,我记得有本 2012 年出版的中文书叫《python 科学计算》,这个比较能说明社区方面的问题。

正文的疑问,概括回答就是,回到 2012 年的时间点,哪个开源工具占领了 Windows 这个基本盘,就相当于抢占了 AI 的近未来。当然,加入老黄的显卡对 Linux 支持足够友好,Windows 可能也不那么重要,但还不够。除非说高校教学里能把 Windows 排除在外(连带 Windows 破解版 MATLAB 等等),才可以把这个因素挤掉。而除此之外另一个重要的因素就是,谁愿意先把脏活干完。

至于社区问题,整体上太跟潮流有时候不一定是好事,容易短视、或顾此失彼,我只能这么说。现在应该看到的另一个问题是,虽然 rust 起步相对晚,却已经在部分新兴领域占了一席之地。而 python 的问题,一方面类似 Windows,另一方面生态丰富也是门槛低的表现,这不是坏事。而 ruby 的门槛相对还是高了点,不过国内可能没什么代表性,这里可以放一边不谈。

bp3730 回复

这里补充下关于 ruby 社区的看法,因为跑题,所以分开来写。

和 python 相比,ruby 社区是很缺本地化支持的。这种缺乏不只是汉化文档缺失,在推广倾向上 ruby 做得也不够接地气(或者说有点太 international)。给人推荐 macbook 是好心,但大部分人买不起;教人用 git 是好意,但这类工具对部分新手来说又过于复杂、分散精力;more importantly,虽然 py 和 rb 社区都有很多人喜欢让人 rtfm,但 python 传入早,汉化资料和教学视频还是有点(早期你甚至能在贴吧跟人正常讨论 python),ruby 就不同了,一是中文资料真的少,二是部分视频教程需要泛墙。

诚然,在 v2ex 这类社区里,持 'google 都用不了 (不会用) 还写个屁代码' 观点者大有人在,但实际上很多人可能真的不需要这么 standard 的流程。有时候觉得,如今互联网烂成现在这个样子,也不能全怪懒人。csdn 这样的平台能冥土追魂,如果没有平台给发东西的人蝇头小利,复制粘贴也未必有人乐意。而最后,垂危的成了博客园,不是 csdn;简书早早叛变,知乎专栏改版如市政修路。在这样的背景下,思否至今没死,堪称'奇迹'。这里就免不了想吐槽 segmentfault,一开始好好起个名,2~3 个汉字,或许都会比现在像个样子。至于 csdn,虽然自己老瞧不起 csdn,人除了'公务'好歹也做了点'实事',虽然在 AI 这块没什么直接贡献,不过间接方便了不少生环化材专业的跨考转码及跨学科打公仔,四舍五入当腾讯做公益来看待了(方便指 打理起来比微信公众号省事,搜起一些基础的奇葩问题来有时候比 google 管用(在没有 chatgpt 之前))。

然后对比 go 和 rust,这两个在国内起步相对晚,go 的情况没什么参考价值,有 Google 光环加成,有 docker,本身性能优势,和 py 一样门槛低,还有 CNCF 上一堆参考。rust 之于 go 的情况反而有点类似 ruby 之于 python,不过本地化这块 rust 比 ruby 做得好一些,ruby 的文档本地化给我感觉实在一言难尽,标准库没有可以接受,其他的 ruby koan 什么的也没有,ja ruby 给的非英语链接也没几个(不过底下有旧版本的文档打包)。所以如果说松本太佛系,那社区的大多数人在这方面也是旗鼓相当了。💤

回到社区建设,我支持进一步深化 ruby 本地化的工作。虽然这块可以理解为脏活,但就文档来说,机翻比以前方便了,起码会省事点。这时候就不需要纠结必要性了,确实有需要的人自学看不懂也可以自己手动机翻,但最开始的搜索也会成问题,不过这种本地化工作最好能跟官方文档对上,docs.python.org 的标准库直接切换中文,虽然完成度不到 100%,但也能方便不少人。总之像翻译这种内容生成的活,与其让贴满广告的 content farm 继续污染环境,不如先把剩余位置占了(比如实在不行可以发 csdn)。

PS:翻译不一定要翻译成简体中文(还可以是其他亚洲语言),现在国内仇日的人比以前多太多了,比较蛋疼。

以上,来自一个多年没碰 ruby 的云玩家

bp3730 回复

同意楼上意见,说到底就是仰望天空和扎根泥土的关系,新人入门亟需系统的“本地化支持”,从教材、文档、资源、安装、关联工具使用、应用场景等一站式支持,哪怕是碎片化、大杂烩的资源汇聚,只要对使用者有价值,都值得传播。“形而上”谓之“道”,“形而下”谓之“器”,道阻且长,需要更多的后来者行而不辍。

我觉得你们没有思考到更深层次的东西,编程的本质是什么,ruby 和 python 还有那些语法糖真的有那么重要吗,copilot 有着如此高准确率的代码补全预测,编程语言对计算机而言可能已经不那么重要的,未来我们不仅可以通过自然语言编程,甚至可以通过 MRI 读取大脑中想法(基于 diffusion 已经在 github 开源,就是那个 AI 画画的底层技术)让 AI 直接基于目标平台的生成二进制代码,人和计算机交互的新时代已经来临,讨论 python 和 ruby 对 AI 哪个更好,有点像是电车时代讨论自吸还是涡轮增压好。

说一个很简单的,对于一个完全没有接触过编程的人来说,python 的代码比 ruby 更易读,这种情况已经在我身边无数非科班的人身上验证过了。AI 更重要的是 idea 吧,我相信大多数人更愿意把时间花在实现 idea 上,而不是去钻研框架的使用方法 or 语言的语法

assyer 回复

”编程的本质是什么“,写字?不太清楚。就您的贴子的内容,我乱讲一下。

  1. AI 不学习是不会编程的,它从哪学?无中生有,会思考会自我演进的 AI 那可能不是我们现在讨论的这个 AI。
  2. 在很长时间里(50 年)AI 编程需要程序员结对或指导。那程序员和 AI 交流也要有个语言,自然语言肯定不太合适,机器语言更不合适。这种语言会有什么特点?书面语可读性好,口语精确,表达力强。您可能可以听一段程序来作 review。
  3. 在机器人成为一个种族之前,程序员都有自己的饭碗。
  4. 在机器人成为一个种族之后,程序员 + AI 也是机器人族的一个重要制约方。
  5. 机器人族统一世界,是不是所有人类没有生存的必要?

所以,为什么一定要让机器代替我们思考?没其它的路可走吗?

kikyous 回复

numpy,pandas 这些库质量太高了?

mizuhashi 回复

说到“消息傳遞”机制 我就想吹一波 objective-c

mizuhashi 回复

我是觉得传 block 挺帅,不过我觉得我们可以脑洞一下传多个 block 的语法。技术上是没问题的吧?

zzz6519003 回复

如果 ruby 有'高质量'的类似 numpy、pandas 的工具库,这个帖子有可能就不会出现了

我觉得是通用性的缘故哦。Python 不仅在 AI 和 ML 领域广泛使用,还在 web 开发、系统脚本等许多其他领域有广泛应用,用到人多了就会聚成社区,周而复始,更多的问题和解决方案可以在社区中找到答案。而 Ruby 主要在 web 开发领域使用,其在其他领域的应用相对较少,而且 python 有大量的库和框架,这些库专为数据分析、机器学习和深度学习设计。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号