非引战,在我看来,两者性能和语法上差不多,ai 兴起的时候 rb 相对 py 还成熟些(毕竟 rails 成名很早了)
我认为可以划分两类基本人群来观察:
本身不研究 AI 的人
在 10~20 年前,大多数人应该都没了解过 AI。Web 成就了 Ruby,但是 Web 领域足够大,足够消耗一个人十年最青春的光阴,导致没有精力涉足 AI。
研究 AI 出身的人
这些人是领域知识的源头。他们的选择决定了该领域未来的走向。我怀疑最初选择 Python 来进行 AI 工作研究的人,压根都没有听说过或用过 Ruby,就像 Bjarne Stroustrup 身处欧洲,所以只知道同是源自欧洲的 simula
,对大洋另一岸的 smalltalk
毫不知情,所以创造出了 C++ —— 死气沉沉的对象模型。
除非让下一波技术人主动使用 Ruby,否则下一个浪潮依旧属于其它语言。所以,宣传很重要,各位不要再 偷偷摸摸 的用 Ruby 了,必须要让未来的从事各个领域技术方向的人在学生时期都能够了解、尝试 Ruby。如果其中的一两个人成为某类技术的领头人时,才有可能适当的用上 Ruby。
历史已经不可改变,唯有押注未来:即上述的,培育将 Ruby 用于其它领域的人才。而这第一步,就是增加 Ruby 的 Exposure(曝光度) 和 Accessbility(可及性、易及性). 社区的基础设施:本论坛,gems.ruby-china.com
镜像源,各种翻译资料,还有我维护的 rbenv for Windows,rbenv-cn 都是在刻意增加 Accessbility.
这两天,我将 https://rubyinstaller.cn/ 迁移到了国内服务器(接收捐赠,请访问站点首页右下角),就是因为有人反馈 GitHub Pages 访问太慢(PC 上慢的不行,手机上根本打不开)。我不想给别人造成一种 怎么这么慢,怪不得大家说Ruby慢
的刻板印象。
https://rubyinstaller.cn/ 打不开页面。 AI 选择 py,我理解有一个重要原因是两者的核心差异,ruby 太灵活,相对于 py 不那么适应大规模团队的协作,更适合于以一敌百的狮子,而 AI 需要不断的进化和团队协作,需要群狼、鬣狗。matz 和 dhh 创始人赋予了 ruby 这种基因。
这个问题我之前也 google 过,有这么个说法,当时 google 做科学计算的项目时候选用了 python,然后也继续优化了相关的库,大概生态形成了,然后科学计算的人继续涉及 AI 也就沿用了吧。
chatgpt 的答案
AI 领域选择使用 Python 而不是 Ruby 有以下几个原因:
综上所述,Python 在 AI 领域中比 Ruby 更具优势,因而选择了 Python 作为优先开发语言。
不得不承认,python 在某些方面就是优秀,python 更接近数学思维,一种问题只有一种解决方案,更利于多人交流沟通。
ruby 的内置方法很丰富很强大,但有一部分是多余的,根本就不需要的,徒增记忆成本、交流成本。
我的以下言论可能略显无礼,但是为了防止 Rumor Creep 我必须要对上述几个错误论述做出严厉的反驳,以免持续误人子弟以及潜移默化的对看到这个帖子的人进行洗脑。
一种问题仅有一种解决方案的优势论
:纯属胡说八道每次谈到 Python 比 Ruby 的优势,就会有人搬出这套言论,看都看烦了,相当老套无理的观点。
上述错误言论:一种问题只有一种解决方案,更利于多人交流沟通。
南橘北枳。.size
和 .length
互为alias
是公认的好设计。难道必须只用 size
吗?这是 包容性设计,Ruby 真正的为程序员减轻了负担。
一题多解,是绝对客观普遍的现象,是自然界体现出来的一种随处可见的模式
按 Matz 的话讲,Ruby 是一种自然的编程语言,当然应当体现出这种自然的模式。
如果你说 Ruby 中一个事情有多种技巧,大多数时候是你根本不知道两种技巧产生的副作用有何不同!
上述错误言论 1:python 是多範式語言,ruby 是 oo 語言,天生沒有函數,對數學的親和力差
上述错误言论 2:不得不承认,python 在某些方面就是优秀,python 更接近数学思维
Python 不是 OO 语言?Ruby 不是多范式语言?要所谓地完全地接近数学思维,怎么不用mathematica
,matlab
?
这种论点毫无根据。Python 作为一个 Wrapper,真正实现矩阵计算、数值计算等的是通过 Fortran,C++ 这种的语言干出来的,如果按你们的观点,那也是 Fortran 和 C++ 体现了数学思维,而不是 Python!
np.linalg.eig(E)
求矩阵特征值、向量:这个操作使用 Python,程序员自己需要写什么深不可测,玄之又玄 的数学运算过程了?体现出 Python 的亲和力了吗?
本末倒置:你在 Linux 上用 Python 写了一个操作 socket 的程序,成功运行!骄傲的告诉大家,Python 更接近 Unix 哲学——因为万物皆文件!Yay!
你自己不需要
,还是大家都不需要
?你代表了全社区吗?在 ruby-china 说 python 好,属于政治不正确。
不过,把 ruby 饭圈化,不利于 ruby 的推广,还好,这里不是官方社区。
你要反駁我可以 at 我的,ruby 只有 method 沒有 function 我覺得應該是 rubyist 的常識,function 的特徵是可以做 composition,但是 method 必須要轉換成 callable object 才能做 composition。callable object 在 ruby 裏是做不到 python 的 function 那麼自然的,會弄到到處都是.call
或者.()
。
不 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
了。
不,我坚定地捍卫你 在社区可以发表 Python 优于 Ruby 结论的权力,同时我也坚定地批判你 通过个人喜好原因直接推导出普适性结论 的思路。
是你在输出错误的观点,我就着你的论点逐个辩驳,你却不愿正面回答,反而用饭圈化这种字样来回应我。
你有没有看到这个帖子分类在 新手问题?你的错误言论也许导致另一个程序员放弃对 Ruby 的尝试,你的 python 在某些方面就是优秀 这种言论脱口而出,而不加任何具体例子才是 python 崇拜论的典型思维,试图以简单的 Python 优秀,所以 AI 选择 Python 来逃避。
如果承认 Python 优秀都被口诛笔伐,那么这个社区真的为了洽饭不顾吃相了。
PS:真怀疑某些内容是 ai 生成的,看上去头头是道,实则老太太裹脚布,又臭又长。
罗翔老师说“人类的理性是有限的”,而这个理性最常见的表现是“概念”(或者叫定义)的内涵和外延上面。题主问的问题是“差异性”,而不少答主自动转成了“优劣性”进行比较回复,这个算是偷换了概念,差异性≠优劣性。 大家聚在这里都是写代码的,都强调准确、理性,应当尽量避免这种与职业属性不一致的思维模式,应当精确的针对指令(问题)进行响应。
沒覺得[]
哪裏自然了,你要是覺得這個好用那你就把一切代碼都用 lambda 和 [] 寫好了,除了以前玩邱奇數我就沒見過誰這麼寫 ruby,而且要這麼寫我為什麼不用 python?ruby 真正有意義的構件都用不上。每一種抽象都有各自的長短處,如果你認為 ruby 選擇的抽象就是終極銀彈,我只能祝你好運。
自始自终,我没有说ruby 是银弹,我表达的观点是python 可以干的,ruby 完全可以干。AI 选择 python 的最初原因不是技术原因,而是历史、巧合、机遇原因。
我觉得没那么复杂,就是因为 Ruby 早期对 window 支持不好的缘故。我记得我因为学校当时要做 ruby 项目,专门把我的本本格了装上 linux。很多同学最后就放弃了。
组织代码当然要用 def,Python 有完全靠lambda
组织代码完全不用 def 的项目?
https://github.com/dry-rb/dry-schema
scheme
做的比python
好多了。完全不是 AI 领域选择 py 的理由。再者我已经强调,核心的计算操作都是 Fortran,C++,C,Assembly 完成。一个 wrapper 无法体现与数学的亲和。
就算不说scheme
,haskell
的表达比python
要”亲和数学“的多的多,流畅的多,而且完全开源,时间上也满足。
Ruby 生来就不是富裕的家庭,现在还能保持一定热度算是不错了。用饭圈的话说,至少火过,至少闯美成功了。
把 AI 领域换成少儿编程答案应该差不多吧。
python 的 def 定義的是 function,ruby 的 def 定義的是 method,method 要轉換成 object 才能被傳遞,別的語言的 function 隨意可以接受兩個 function 作為參數,ruby 卻只能帶一個 block,這本來就是設計 tradeoff。你提別的語言倒是提對了,這個領域就算沒有 python,輪 matlab 輪 julia 也輪不到 ruby
別的語言的 function 隨意可以接受兩個 function 作為參數,ruby 卻只能帶一個 block
更正一下:ruby 函数可以带任意多个 proc(function 要转一下),但是只能接受一个匿名 proc(block)。
另外 method 也不用转 object,也能直接调用,定义在 Kernel 下即可,如果要调用,在 Kernel 下的直接调用即可,不用传,如果不是,必然是带着 object 信息,所以。。
没有仔细查语法,只是凭记忆写的,欢迎更正。
我說的不是調用,是傳遞,ruby 的語法是對單個 block 優化的,這導致寫 dsl 很好看,但是如果需要傳入多個 block 就會要轉 lambda,其他語言沒有 block 的設計,但是 function 可以當第一公民傳遞,例如 js 裏function a(){}
之後 a
本身就能傳給其他函數,而 ruby 需要先method(:a)
轉成對象再傳
楼上是中什么毒了,一直在循环“恰饭 割韭菜 饭圈”几个词,但也不展开说一下这么讲的理由。。。
我不是很明白,400 一张票(包括万豪的自助午餐)是怎样把人割韭菜了,还是说其他语言社区都不搞类似交流会而只有 Ruby China 在搞?
卖书又是怎样割韭菜的?写书是一个罪过吗,这个事情难道不是接近于赔钱吗?亦或者说你看到了哪本 Ruby 书卖了千八百块钱一份 pdf?
其实我也觉得,也很理解人们都对自己喜欢的事物天然有一种“证实偏差”一样的症结,总有维护大于反思的倾向,但一个“歪曲事实”的帽子也未免太大。我全程看到的是 ccmywish 的观点回复(即便或许不能为所有人认同),但楼上则是在循环人身攻击。
所以楼上的立场到底是什么?是为了 Ruby 的发展吗?那么为什么不写一些你所认为的真正的反思给大家看呢(而是一直在别人的观点下面说割韭菜之类的词语)?那么是为了给 Ruby 喝倒彩?无法理解,你从中得到了什么快感吗?
在这个帖子下面我是没有看到 ccmywish 的人身攻击的,还是说在其他帖子中?
以及“潜规则”和氛围的评论,可以指个链接吗?
事实上,正好相反,对于我来说,我自己编译的 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 系列快那么一小点。
也许能编译出来,但是社区不友好,推荐的都是 Linux、Mac。 Windows 下跑 Ruby 的相关文章都很少,我是写过的,https://ruby-china.org/topics/38499Windows.。但是最终由于诸多原因还是放弃了
入门玩家需要的是海量的文档和文章,这样即使跑不起来,也会觉得很有希望。
@mizuhashi 过了几天再看这个帖子,觉得自己有部分话言重了,言语中的确夹杂了一些间接攻击的言论。向你表示歉意,我已删去部分比较不妥的评论。
至于 python 的某些部分亲和不亲和,纯属是不同的看法,我没有必要上升到对你技术层面的质疑。
再次向你表示歉意,以及因破坏了社区友好的讨论氛围向社区各位朋友致歉。
沒事,我很理解你的想法,因為我以前也覺得什麼都應該用 ruby 來做,不過對於沒有深入了解 oo 和消息傳遞這套機制的人來說,ruby 對他們並沒有很天然的吸引力,我想給數學朋友安利的時候也無法說清這比起他們現有的工具究竟有什麼優勢?但是對於業務程序員來說,ruby 的優勢是很明顯的,例如 rspec 就沒發現哪個語言有功能相當的替代品,這也是我對 ruby 依舊有信心的原因
松本的因素感觉次要一点,主要还是工具本身的使用门槛、本地社区的定位以及整体的社区活跃度。
工具方面,时间回到 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 的门槛相对还是高了点,不过国内可能没什么代表性,这里可以放一边不谈。
这里补充下关于 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 的云玩家
同意楼上意见,说到底就是仰望天空和扎根泥土的关系,新人入门亟需系统的“本地化支持”,从教材、文档、资源、安装、关联工具使用、应用场景等一站式支持,哪怕是碎片化、大杂烩的资源汇聚,只要对使用者有价值,都值得传播。“形而上”谓之“道”,“形而下”谓之“器”,道阻且长,需要更多的后来者行而不辍。
我觉得你们没有思考到更深层次的东西,编程的本质是什么,ruby 和 python 还有那些语法糖真的有那么重要吗,copilot 有着如此高准确率的代码补全预测,编程语言对计算机而言可能已经不那么重要的,未来我们不仅可以通过自然语言编程,甚至可以通过 MRI 读取大脑中想法(基于 diffusion 已经在 github 开源,就是那个 AI 画画的底层技术)让 AI 直接基于目标平台的生成二进制代码,人和计算机交互的新时代已经来临,讨论 python 和 ruby 对 AI 哪个更好,有点像是电车时代讨论自吸还是涡轮增压好。
说一个很简单的,对于一个完全没有接触过编程的人来说,python 的代码比 ruby 更易读,这种情况已经在我身边无数非科班的人身上验证过了。AI 更重要的是 idea 吧,我相信大多数人更愿意把时间花在实现 idea 上,而不是去钻研框架的使用方法 or 语言的语法
”编程的本质是什么“,写字?不太清楚。就您的贴子的内容,我乱讲一下。
所以,为什么一定要让机器代替我们思考?没其它的路可走吗?
我觉得是通用性的缘故哦。Python 不仅在 AI 和 ML 领域广泛使用,还在 web 开发、系统脚本等许多其他领域有广泛应用,用到人多了就会聚成社区,周而复始,更多的问题和解决方案可以在社区中找到答案。而 Ruby 主要在 web 开发领域使用,其在其他领域的应用相对较少,而且 python 有大量的库和框架,这些库专为数据分析、机器学习和深度学习设计。