论坛首页 编程语言技术论坛

我开始不喜欢ruby了

浏览 71877 次
该帖已经被评为良好帖
作者 正文
   发表时间:2008-04-08  
在ruby版发用这样的标题发这个帖子纯粹是找抽,不过即便如此我还是要发。
接触ruby也有段时间了,或许是我没有真正的认识到ruby的精妙之处,总之,使用ruby让我感觉很痛苦。ruby强调了程序员的快乐编程?我没感觉到。
首先是类库太混乱,比如IO,可以直接open(file),可以File.open,还可以File.new,测试文件可以通过FileUtils,也可以File,都是完成相同的事情,何必搞这么功能一样的东西出来呢,增加阅读类库的工作量。完全违背了最小接口的原则。还有方法别名,这有必要吗?

其次大量乱七八糟的运算符,||和OR除了优先级不同还有别的区别吗,为什么要让它们有不同的优先级?还有运算符重载,你无法确切的知道某个运算符表达了什么含义。

曾经有人说“C++的魔幻导致代码可读性差,ruby的魔幻导致代码可读性好”,理由是什么?为什么我觉得ruby的代码可读性也很差。我从来不愿意看别人的ruby代码,即使是书上的示例。

最后,也是最严重的,是运行时的对象扩展,比如defind_method和undef等,这使得良好的接口说明成为了不可能。你无法知道正在使用的类到底有那些方法。

使用ruby写一些小程序的时候的确很爽。但个人感觉还是不适合做大。对于一个java框架,看看入门教程和api文档,我大致就可以知道各个部分是如何工作的,每一部分,如何进行高级应用。但是rails,我从来都离不开敏捷web开发这本书。rails2.0出来了,我不知道当我在routes.rb中加上一句map.resources :news之后,会使哪些地方发生了什么变化。


-----------------------------------------------

看了后面的回复,感觉这帖子真的要编程语言之争了。这并不是我的本意。首先,ruby有很多亮点,这是不可否认的。我也也很喜欢ruby,使用ruby写程序也觉得很爽。真正让我觉得痛苦,实在接触到rails之后。如果只是使用rails,当然会觉得rails很易用,也很强大。但是如果想弄清楚rails的运作机理,深入的理解rails,恐怕比理解任何一个java框架都要困难。ruby很强大,但似乎有点太强大了。
动态对象扩展就像盐,如果没有,做出来的饭淡而无味,如果放的太多,做出来饭也无法下咽。
它就是一把双刃剑,想goto一样,不能滥用。
可能有人要说,语言本身虽然提供了这个功能,但你可以不用。
其实不提供做好,为什么java就没有提供goto多重继承之类。
ruby并没有停止发展,我只是希望ruby能做的更好,让程序易写,更易维护。而不是争论ruby好不好。
   发表时间:2008-04-08  
开始骂说时进步了
再下来就是自己改rails了
0 请登录后投票
   发表时间:2008-04-08  
工业语言就只提供给你一种“选择”,比如java,但用太久了就感觉有点腻。ruby则给你太多选择,提供不少让你展示技巧的机会(有人就好这口),各有各的风格,不觉得是坏事。反倒觉得ruby趣味十足。
0 请登录后投票
   发表时间:2008-04-08  
这也许就是牛人和我们这些普通人的区别吧,或者说是门外汉与我们这些普通人的区别吧,呵呵,有点人能够写好八股文,但是写好八股文的却不是文学巨匠啊, 世事如此,想起了RIFE作者Geert Bevin来
0 请登录后投票
   发表时间:2008-04-08  
楼主适合写八股文,仅此而已。各有所好吧。
0 请登录后投票
   发表时间:2008-04-08  
dennis_zane 写道
楼主适合写八股文,仅此而已。各有所好吧。


编程不是艺术,诚然,我们能从编程中体验到快乐。
编程不是获得诗歌的华丽,而是为了获得应用文的实用。

如果你是为自己写程序,那么你怎么写都无所谓。
0 请登录后投票
   发表时间:2008-04-08  
普遍的观点是: ruby语言复杂, 编写rails应用简单.
你抱怨的都是语言及核心库级的东西,最后说要查敏捷web开发那本书,觉得很怪。
对比这三者,我个人觉得ruby语言本身很美,能承载rails这样的框架和其它一些极具创新性的项目,足以证明它的优秀。
一个进行过长期java web开发的人,切换到rails时也足可体会rails带来的实惠。
ruby的类库,比如楼主说的IO,FileUtils,没有保持概念一致性或遵循API设计上的惯例,这种情况也不少。大概是最初发展比较松散,类库设计者背景各不相同等原因吧。
我遇到的类似情况还有Date和DateTime之间的差异等。
最小接口和人本接口在ruby上的选择,martin fowler很早有篇博客讲的很好。
至于运算符重载,我倒觉得问题不大,大概也有少数几个滥用的,象Dir.glob和Dir[]同义,我怎么看都别扭。不过运算符重载的好处享受了很多很多。
||和or的问题,是语言提供的一种尽可能的灵活性,绝大多数情况,人们或者同时用||和&&,或者同时用and和or。将它们混起来用的时候很少。
运行时扩展,是ruby强悍的标志性特性。动态语言在运行时才能完全正确的inspect,这是它的局限。编写扩展的人,都会刻意让它更易读易记,不然就让使用者困扰。一个应用中,有哪些代码对哪些地方进行了扩展,是应该也必须能被编程人员理解和掌握的,如果失控,只能说明你们选择的第三方包有问题(自己选择不当),或自己写的扩展不好(设计不当),或基础不好或培训不到位(java一样有这个问题)。

map.resources做了什么,读文档或直接读源码,内部培训/互相交流.
假定让你写七八行类似map.connect实现同样的功能,你可能明白map.resources是做了什么.但如果告诉你只能写这七八行代码,你不一样要疯掉吗?


0 请登录后投票
   发表时间:2008-04-08  
SunMicro 写道
工业语言就只提供给你一种“选择”,比如java,但用太久了就感觉有点腻。ruby则给你太多选择,提供不少让你展示技巧的机会(有人就好这口),各有各的风格,不觉得是坏事。反倒觉得ruby趣味十足。


我喜欢工业语言这个词, ruby也在证明自己是种工业语言.

0 请登录后投票
   发表时间:2008-04-08  
“或许是我没有真正的认识到ruby的精妙之处” -- 楼主自己诊断得十分正确。

正如我觉得java实在难用,那肯定是因为我没有认识到java的精妙之处。

我使用C++也写过不少东西,但始终觉得不如C来的痛快淋漓,但我的一位朋友则相反,他可以把C++用得出神入话...归根结底,对于一门语言,如果你不能体会到这种的美,那么你肯定不会习惯它。
0 请登录后投票
   发表时间:2008-04-08  
孟岩曾经撰文说:ruby,c++这些都属于魔幻语言.自认为很贴切.
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics