瞎扯淡 Rails 其实有点像 Delphi.

zw963 · 2012年08月04日 · 最后由 tassandar 回复于 2012年08月12日 · 9319 次阅读

上期 Ruby Tuesday, 和一个朋友讨论起一个 Python 下的 Web 开发框架,叫做 Pyramid. 有一些感触,再加上刚刚看了一篇有关Learn Ruby The Hard Way有什么说法 的帖子,有感而发,不过发现回复太长了,干脆新开个帖子好了,这样更多的人可以看到。以下只代表我的一家之言的瞎扯蛋,仅供参考呀~~

我觉得 Rails 就像 Delphi, 因为太容易上手了,所以反倒很难深入,看似较低的门槛,但是,事实上是增加了提高的门槛,很多人往往只是看到优秀的框架光鲜的外表,而完全忽略了这个框架的精髓 (即,底层的实现语言),

因为大多数人都是直接来写应用,少了很多从一开始,从底层 小步前进hard way, 所以,本身这种实现方式,让 Rails 易学难提高,就像当年的 Delhpi 一样,永远没有成为最主流的开发工具,相反,Virtual C++ 没有那么 OO, 但是因为你不了解很多细节,你无法开发出一个成功的产品,换句话说:往往使用 VC, 都是经历了一个从点到面,一个长期的艰苦过程,(hard way), 所以一旦掌握了它,你会感觉非常得心应手,無所拘束。

事实上就难度上来说,不见得 Delphi 比 Virtual C++ 的 MFC 难多少 (虽然前者更 OO,), 我觉得主要还是 Delphi 这个框架,给你做的太多了,使你一开始,就不会努力去深入进去,正因为如此,你用的越久,你会发现你越难提高,因为从一开始你就忽略了太多不应该忽略的细节,到真正需求大爆炸的时候,你会懵掉,你会发现其实你最后还是不了解Rails, 还是不了解Rails底层的那个叫做Ruby的语言.

最后我想说的是:其实也许从一开始,小步前进,稳扎稳打的话,真正了解并掌握 Ruby, Rails(就如同学习 VC 一样), 也不是那么难,难的是你一开始对待 Rails 的的态度。难道你照着 DHH 的那个视频,15 分钟内写出一个 blog, 就表示你会 Rails 了吗?

我也是一上来就 rails,ruby 会的不是很多

工具确实会给使用者带来极大的影响啊,功能多了吃不透, 但是没有强大的语言效率又很难提上去。 总之,能做出漂亮的东西是一方面,程序员的内功修为也很重要~ 像 C 啊,lisp 这种本身并不复杂的语言就很适合用来练内功~

表面越是简单的东西,内部越是复杂。 表面越是复杂的东西,内部越是简单。

我认为 Delphi,曾经一度是 快速开发领域的 最主流的开发工具。

我觉得 Rails 的很多问题,归结于,其背后没有一个,强大的公司为其支撑。 VC 那么烂,但是却活到今天,完全是因为微软在支撑。 社区虽然很强大,但依然无法和资金雄厚的企业相比。

如果像真正想掌握 Rails,那么必须精通 Ruby, 如果只是想试试 Rails,那么你可以不了解 Ruby。 这个道理,我觉得适用于任何技术框架。

匿名 #4 2012年08月04日

#3 楼 @ery 我觉得 Rails 的很多问题,归结于,其背后没有一个,强大的公司为其支撑。

这句话确实说出现在 ruby 的现状,不像 python 有 google 啊

#4 楼 @yggg Java 有 Oracle IBM SUN(曾经) 甚至 Google(android) VC C# ASP 有 MS Objective-C 有 苹果

#3 楼 @ery 反过来说,C#社区只有微软的用户,ObjC社区只有苹果的用户。

有公司支持的语言现在活的都挺不错,比如说 cobol 现在都还活跃在各种小型、大型机上

#7 楼 @ywjno 那你会去用 cobol 吗?

#9 楼 @hysios 赞同,语言只是工具,不赞同语言膜拜论~

#10 楼 @fresh_fish 我认为,当一个程序员只熟悉一种语言的或者框架的时候,才会有膜拜论的现象,随着时间的推移,当其熟悉多余语言和框架以后,膜拜论不攻自破。

#3 楼 @ery #9 楼 @hysios

我觉得公司很重要,社区也很重要,但是,我认为语言自身也同样重要。哈哈

p.s. 我现在还处在对一两个语言膜拜的阶段。典型的:Ruby, Lisp...

楼主真是有点“瞎扯淡”,什么叫做入门简单,却反倒很难深入?当然,rails 框架确实复杂,能够深入掌握是有难度的,但是也不是不可能的,@kenshin54 就是一个敢于深入的人。世间道理都是如此,入之愈深,其进愈难,而其见愈奇。关键在于人是否有这样的猎奇心和毅力。rails 的核心开发者中,鲜有华人,更别说中国人!也许国人性格内敛,不屑张扬,高手如云,也未可知。

#14 楼 @googya

本来就是瞎扯蛋...

不是性格内敛, 不屑张扬, 我觉得主要原因还是在于国情. 这样的国情下,大家都没有造轮子的动力。 如果唐宋也是当下,就不会有中国古代诗词歌赋的繁荣与昌盛。我记得那本书说的,北宋年间,中国创造的 GDP 以及拥有的钱财占世界的一半,老百姓也富裕,闲的没事儿干,就研究这个研究那个。但是宋朝之后就不行了。

扯这么多,就是为了讲明白,为什么美国还有北欧那么多天才程序员?一方面是教育,另一方面,他们富裕。 国情不同。

少说多学多做

#14 楼 @googya 既然提到了 很难深入, 我想说,我觉得 rails 的代码, 有些部分写的挺烂的, 所以读起来,很难懂,很晦涩。

真正的好代码,应该是简洁明了,清晰易懂。 就好比书,写的好的书,读起来都是那么的顺畅,绝不晦涩。

rails 代码中,有些地方根本就不需要用元编程, 结果非要用元编程,搞得代码可读性特别差。

觉得 rails 有些代码很烂的请举手,有木有?

#17 楼 @ery 举个例子啊!或者在 github 上面可以做代码评论,让作者解释一下原因等。这样随便说说就把 Rails 说成代码烂,实在是缺少根据。

#18 楼 @hooopo 请等一下,我给你找啊。

我记得很早以前,这段代码不是用 class_eval 实现的 当时我用 CTags 还能定位过去, 现在 CTags 根本定位不过去。

#8 楼 @Rei 我还真用过 cobol 半年,那是一个保险项目

#21 楼 @ery 没找到很早以前怎么实现的。 但是我真没看出来这段代码从可读性可维护性角度有什么问题,即使用了 class eval。不但可读性好,还 DRY,注释也很清晰。当然如果你的衡量标准是 ctag 能否定位过去。。那显然作者没考虑到。即使你和他提他也不会把这点作为首要的因素。

我看过一点 Rails 的代码,也认真看过一些 Rails core team 对某些 issue 的讨论,还有一些批评 Rails 的文章。总体感觉是: 1.Rails3 的代码比 Rails2 好很多 2.Rails3 以后的各版本的兼容性已经很好了。 3.如果 Rails 的代码算烂的,那么整个 Ruby 社区找不出来什么好代码了

#23 楼 @hooopo 我认为,就这个段代码而言, 如果为了 DRY,而使用class eval , 是不是有点过了,我觉得不值得, 完全可以展开写。

作为一个框架,如果其目之一, 不是让程序员快速定位到源码的话, 那么,我认为他不够友好。

虽然这个问题不是很严重, 但是这是个原则问题。

另外,你真的觉得 Ctag 不重要吗? 那你平时怎么查源码,grep? ack? document?

#24 楼 @ery DRY 很重要呀 这也是 Rails 框架的最求之一。DRY 意味着更少,更快,更简洁,更容易修改。 如果三个组方法写 9 遍不觉得罗嗦么?至于过于不过是度的问题,每个人都有自己的衡量。这就没法讨论了。

快速定位源码真不是目的啊。框架是直接面向开发者,大部分程序员不需要去了解 Rails 的内部实现,或者去读源码,修改 Rails。他们需要的是使用 Rails。

我有时候用 ack 有时候用 tracer,还有时候直接去 github 上沿着目录找,觉得应该在什么地方就去看。

#25 楼 @hooopo 3 个极其相似的函数 写 3 遍,的确很罗嗦, 而且维护起来也是问题,也不够 DRY, 而且这样的函数还同时有 3 个,我理解作者的初衷。

但是我依然认为,即使如此,也不应该用class_eval, 因为class_eval不是最好的解决方案, 我觉得,可以写 9 个函数, 每个函数里面只有一行代码,只是参数不同。 我认为这才是 更优雅的解决方案。

还有你为什么不用 Ctags,多好用啊? 有了他,你根本不用花时间思考,这个函数在什么地方, 因为,你可以直接跳过去,省时又省力。

还有class_eval的代码没有高亮, 程序员喜欢高亮。

楼歪了...

不过歪的很精彩!!

#27 楼 @zw963 对不起,一不小心,就歪了。

#28 楼 @ery 不要指望 ctags 那个很久没更新的东西了,如果你愿意维护的话,我支持你。

请用 ack

其实代码的话,

我觉得 redis,lua 的代码很不错。

ruby, rails 的源码有点烂,(rails 我就看过 2.0 的)

乱和烂,两个字要分清楚!

楼歪了。

其实我觉得楼主的比较我是支持的,只是楼主说 Delphi,估计其实指的是 VCL 吧,是框架(CBC 也用的),对应于 MFC 吧。有了好的 framework,国人往往做的东西都是用很 easy 的部分就可以解决问题了,这部分的类别是很恰当的。

但是 Delphi 和现在的 Rails 不一样。Delphi 严重依靠 windows,结果 MS 不让它活,Borland 转到 linux 又没怎么成功,就挂了。Rails 天生是社区的文化,不存在对 MS 的依赖(linux 和 mac 开发为主),形势是不同的。

不过没干爹的确是个问题。

MFC 比 Delphi 恶心多了。搞了一大堆宏,就为了实现 Object Pascal 里 dynamic 关键字一样的效果。离开了 IDE,完全就没法开发了。

成了 MFC 的吐槽帖了,呵呵。 其实如果从 API 一步一步开始写,会感觉 MFC 还是不错的。 但是看看 VCL 就感觉不是一个 generation 的框架。

35 楼 已删除

Ruby 看起来没公司支持,而实际上 Ruby 社区一直都有 Engine Yard, 37signals, Heroku, New Relic, Twitter 等公司鼎力支持的

#26 楼 @ery 请教一下那段代码(继续歪楼),用 class_eval 的目的貌似是为了使用字符串内插吧?用 define_methodfilter.to_sym 不就行了?

#37 楼 @fenprace 应该可以, 不过虽然,define_method可以做到代码高亮, CTags 依然失效。

元编程 感觉就像 C++ 中的 模板 和 宏, 虽然功能极其强大,但是副作用也非常强大。

MFC 很烂的一个重要原因,就是宏用的太多了, 使用宏以后,代码量虽然减少了,但是可读性却下降了(人类根本无法读)。 而且宏代码也无法调试。

元编程和宏实在是太像了。

如果要拿 MFC 和 VCL 比,(虽然我觉得他们不是一类框架) 那么我觉得 MFC 就像是 塞班,VCL 就像是 iOS。

#38 楼 @ery 说的真对,现在 C++ 的书不就有元编程吗,模版和宏功能强,可读性差。

其实 C++ 的学习曲线也很长,某种意义上 ruby 也是这样。

#38 楼 @ery

我怎么觉得元编程是八杆子打不着的两个概念。

当然,如果仅就阅读性以及 ETAGS 使用来说,有那么一点相似。但是在一个语言中的作用,好像完全不同吧。

#41 楼 @zw963 C++ 里就很有关系啊,不会 TemplateMetaProgramming 别说你会 C++

#42 楼 @bhuztez

... 所以我说 我不会 C++ ...

#42 楼 @bhuztez 这句话有点伤人。

请问@ery 像你这样的链接是怎么生成的?

https://github.com/rails/rails/blob/master/actionpack/lib/abstract_controller/callbacks.rb#L162

------补充,我知道了,点击左边的行号然后 copy 链接就可以了。

#46 楼 @hooopo 额……那你这样又是怎么弄的呢?

现在 github 也开始赞助很多 Ruby 活动了。

其实大多数的开源项目都是人们用业余时间做的,挺不容易。我觉得发现问题的同学可以直接在 github 上放个 patch pull request。这样是最直接解决的方法。

#46 楼 @hooopo 同问那是怎么弄的..手动吗?..

#48 楼 @shichuan 国内做什么都是首先解决生存问题的。国外的同行有时间有精力,其实何尝不是一种幸福?

#38 楼 @ery 同意。Metaprogramming 是双刃剑,还是尽量要谨慎

Kent Beck 一个多月前发了个 twitter 说的就是这个意思

“metaprogramming depends on the structure of the program and hence constrains the future structure of the program”

http://twitter.com/KentBeck/status/230453290272436224

hammerprinciple.com 上有各个编程语言的比较,乐于此道的朋友们可以看看。

#53 楼 @knwang

只要大方向是对的,被胁迫也未尝不是一件好事儿。怕的是不确定,走向另一个方向。

典型的:特色越来越少,像大众化靠拢...

p.s. 才发现这位老兄是今天注册的~~ 欢迎欢迎啊!!

delphi 入门不简单吧?

#53 楼 @knwang 大牛就是大牛,发现还没 fo,果断纠正

#9 楼 @hysios 没错,我觉得楼主其实没用过 delphi,delphi 失败的根源是政治因素而非技术原因。 rails 不可同日而语。

#55 楼 @zw963 谢谢,才发现的 ruby-china, 不过很多头像都看着眼熟

#58 楼 @tedeyang delphi 失败的根源是政治因素 + 1 MS 太坏了

Rails 真是易学难精,有很多值得研究的东西。 做 Rails 容易忽视对 Ruby 的学习 但要成为一个高手,这些都是必须研究的

@tassandar 强大的公司很重要么。。

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