关于 ruby 和 rails

2011-09-11 11:30:39 +08:00
 Los
https://gist.github.com/1209128
4917 次点击
所在节点    Ruby on Rails
46 条回复
ikbear
2011-09-11 15:29:55 +08:00
观念不一样的人在一起,有什么可争的。这样的情况,看过几百遍了。不是偏见,就不需要去拿来说服别人了。因为如果不是偏见,那就是事实,而事实是摆在那里不需要一遍又一遍的说的。
adamsxu
2011-09-11 15:32:04 +08:00
Rails这种可以歇了。
keakon
2011-09-11 15:50:04 +08:00
@Los 哈哈,其实这件事我很支持政府的(如果我没有理解错的话)。我待在上海,就觉得上海话很难听和拗口。我自己是可以不学,也可以不说;我也很认可上海人相互之间用上海话交流;但重要的是别TMD的对我说上海话,或者是一群人交流时,一小部分人不时说些上海话。

对我来说,避免痛苦远比获得快乐重要。一开始我就说了,Ruby有“很多”我喜欢的东西,但是为此而忍受“一些”我不喜欢的东西,这点我做不到。
而对“很多人”来说,这些我认为的痛苦是不存在的,所以他们会喜欢Ruby,对此我觉得可喜可贺。
但是强迫别人认可自己的痛苦或快乐,这是我不可接受的。所以我选择只和与我价值观相同的人交流,因为这部分人已经认可了什么是我们共同“不想用的”,也就不需要承受道德上的自责了。
wtl
2011-09-11 16:07:43 +08:00
@keakon 「但我希望的是不想用的,我要求全世界所有人都不能用。」
-- 霸气啊!
Los
2011-09-11 16:54:41 +08:00
@keakon 这个实在不敢苟同,我们都很容易以自己的立场来希望外部环境更加顺应自己。如果你是说普通话的,但有政策下来强制你当地只能说广州话(估计你没有注意到我上面的「本地电视台」字眼,广州对于不会说广州话的人员还是很友好的以普通话交流的),地方特色一般都与当地语言有所关联,这样的政策估计你也很难接受的。

哈,不在这方面继续讨论下去了,越跑越偏了,而且,这方面的讨论很容易引起激战。
我们还是转回技术方面的讨论算了,轻松自在一些讨论技术多爽,而关于rails的「约定」这个定义,好像太多人对它认知偏差了。
keakon
2011-09-11 17:51:07 +08:00
@Los 我会很爽快地离开,重点是有很多地方使用普通话,且我和这些人都认可普通话。

我不知道政府的禁令具体内容是什么,但如果只是在公开场合、电视台、广播电台中避免使用粤语,同时允许一部分台只为听得懂粤语的观众服务,我觉得是非常合理的,甚至是法律中早有规定的。

我记得我小时候去广州时,除了CCTV以外,所有电视台都是我听不懂的话,害得我实在没事可干。


关于约定,你所得过于抽象,而在Google里搜索“rails 约定”都是些命名规范之类的东西,而带来的好处并未提及。


@Livid,为什么Chrome下每敲一个字符,输入框就会增高一点?查了下源码可能是这个引起的:

<textarea class="mll" name="content" id="reply_content" onkeyup="c();" onpropertychange="this.style.height=this.scrollHeight+'px';" oninput="this.style.height=this.scrollHeight+'px';"></textarea>

scrollHeight要比style.height多6px,因为存在3px的padding。
mywaiting
2011-09-11 19:23:53 +08:00
@kaktos 其实说到开阔视野,个人意见直接上Haskell吧,在FP面前什么Python、Ruby神马的都是浮云。
ssword
2011-09-11 19:38:09 +08:00
关于约定,你所得过于抽象,而在Google里搜索“rails 约定”都是些命名规范之类的东西,而带来的好处并未提及。

---

没“命名规范”这么简单。请屈尊多了解一些再下结论,不然讨论不在一个层次,交流会很困难。
Los
2011-09-11 20:18:40 +08:00
@keakon Google里搜索“rails 约定”之类的比较难得到真正的结果,正如你有说过的,很多人觉得rails好但却说不出它好在哪
lepture
2011-09-12 11:59:20 +08:00
其实 @keakon 那篇文章,我觉得他要表达的是你要了解事情的本质,然后选择适合的工具,而不是用一个万金油的东西。

@keakon 不知道我理解的对不对?

我也遇到过你所说的问题,公司用Java,我用Python,没找到合适的Python的工作。现在做前端。当我跟Java同事去交流时,(比如ajax),他就要问我这个关连到servlet什么的。我给他讲这个原理是怎么样的,它其实就是一个http请求,本质上来说和你用浏览器所访问的这个链接没什么区别,不过加上了xmlhttp的头信息。结果绕了一下,他又绕到了java的controller之类的概念里去了。这很让人郁闷,难道一个做后端的做互联网的人都重来不看rfc2612的么?

小可也曾尝试过ruby,也没能学进去。不过平时向人推荐的时候python和ruby都会向人推荐。我也同意 @keakon 所说的python和ruby有点水火不容,pythoner真的很难接受ruby,除非你只是用了下python而不是pythoner。 这并不是说ruby不好。所以我会向别人两者都推荐,他自己选择适合自己的。

目前来说,我对 java 和 php 有点偏见。主要是遇到的这两类程序员喜欢绕在语言里,而忽略了本质。正如 @keakon 所说的: “举例来说,我在浏览器上访问了一个URL,服务器要怎么处理呢?PHP程序员会说根据它路径里的php文件名,在磁盘上找到对应的php文件,然后执行里面的代码;Java程序员会说根据它的路径,在XML配置里找到对应的servlet,再执行里面的代码;Rails程序员会说根据它的路径,分离出application、controller和action,然后执行这个action的代码。”

如果一个程序员脱离了这一层,我都可以接受。因为遇到的java和php程序员大多没脱离这一层,不免怀疑是不是这个语言本身就会造成这样的现象,让人不容易去了解事物的本质。所以不免就有了偏见。
keakon
2011-09-12 14:37:43 +08:00
@lepture 就是这样。我讨厌的语言不多,Ruby并不属于其中之一,所以我不会去刻意攻击它。
但是Ruby本身的争议很多,大家对其的误解也多,所以Rubyer大都很敏感,一看到非议就会很冲动地捍卫自己所用的语言。
我不是说Pythoner就不会这么做,但是他们会清楚地解释原因;至少不会以一种盛气凌人的姿态,告诉你要么就花大把时间去领悟它的好,要么就别指手划脚。
突然想到战色女,我的问题不是问题,一切都是男人的错。


@chloerei 以我的理解,简洁是以大家都懂的方式让其简单,简约则是为了简化,而限制了一些隐含的约束条件(例如赋予符号特殊的意义)。
顺便附字典中的解释,确实没什么区别:
简洁:简明扼要,没有多余的内容。
简约:是力求语辞简洁扼要的文体风格。其特点是简洁洗练,单纯明快,辞少意多。简约不是简单摹写,也不是简陋肤浅,而是经过提炼形成的精约简省,富有言外之意。其弊在容易流于郁而不明的晦涩。

关于JS框架,如果Rails只是单纯地引入,而不会自动生成JS代码,那就当我没说。

关于.save,让我们先抛开属性和方法的区别。假设有个函数名叫save,我把它赋值给一个变量:x = save,这会让我疑惑save是变量还是函数返回值。
你可以说动词一般用于函数名,但如果一个词既可做动词,又可做名词呢,例如answer?
你也许会换个没有歧义的名字,但这已经是在解决问题了,而不是你所说的不存在问题。
即使对你来说不存在问题,那么是否又能和我之前所说的一样,先思考为什么别人会有问题,再做定论?


@Los 以我浅薄的理解,Rails约定了一些前提,你在遵守这个前提时,除了直接体现出来的无需配置以外,其他地方也因为用到了这些隐喻,而省去了编码工作——这都建立在你必须保持一致性的前提下。

而项目的需求总是有不一样的,你可能要做移植工作,处理原来不符合Rails约定的URL、表名等,说不定还有knowlegde这种不可数名词的存在。在约定被破坏时,我不知道维持配置,以及为修复它而补充那些省去的代码需要怎样的effort。

Google搜索“约定胜于配置”,第2篇的内容囧到我了。
看上去还是到stackoverflow搜索比较好:
http://stackoverflow.com/questions/1166539/do-you-find-convention-over-configuration-good-or-bad
makestory
2011-09-12 15:40:08 +08:00
作为自学 python 又因工作转移到 ruby 的一枚,表示转换过来并不难,也没觉得痛苦,可能离 pythonic 的境界差的远吧? 如果过程是反过来,我想也是类似的。

觉得同是动态语言的python和ruby肯定是众多语言里相当接近的一对。
虽说好好看过的书只有《learning python》《the ruby programming language》,但也感到了两个语言的设计风格是差别蛮大的(python简洁严谨,ruby人性化)。一个语言或多或少都有点自己不太喜欢的地方,但对我这种不是纯粹的程序员(也关心产品和运营)来讲,能够适应就能感到快乐(我好容易有满足感)。

所以我的看法是几位能对这个争论起来,还是因为对编程的热爱度超高啊!

喜欢python的缩近,所以所有ruby代码也一直这么缩着。
Kymair
2011-09-12 15:46:24 +08:00
其实在某种程度上,@keakon所说的那种“霸道”是必要的。
这让我想到了很多大牛对C++的抱怨,Coders at work里非常多。最著名的应该是Linus,也可以搜搜云风的几篇评论。

太多的特性和范式会给程序员带来额外的心智负担,而且往往会促使人们为了去利用某个范式或特性而刻意构造精巧,埋没了本来的目的。
chloerei
2011-09-12 16:02:11 +08:00
@keakon

Rails 3 没有生成 js 代码

x = save,x 得到的是 save 的值,不论他是方法还是局部变量。或者你觉得 foo.bar 和 foo.bar() 得到不同的结果更符合预期?

命名一直是高级语言一个非技术的纠结点,我不认为 Ruby 是特殊的。

其实你的偏见已经越来越越暴露出来,你为了证明 Ruby 有那么多问题,去想一些不切实际的问题,要不没人会这样做,要不不是 Ruby 特有的。

有什么语言能阻止程序员写出

def save(record)
....delete(record)

这样的代码?这样问题我都不知道点在哪里,哪个程序员写代码是为了跟自己过不去。

路由:完全不遵循 RESTful url,用 match 规则写路由没什么问题;表名不规则,那么设置一下表名;单复数支持很好,rails 维护了一个非规则的单复数名词表,你也可以自己定义特殊词表,也可以无视单复数。破坏约定时,代码量还是比自己实现一套规则要小。

回顾一下#4的套餐恐惧症。

不知道我盛气凌人了没有,我对着你提的问题一个个敲回应,结果就这样的。一方面想感谢你理解 Ruby 受了很多误解,一方面又很无奈你也是误解群体的一员。如果在你产生误解之前,能找到个人问那结果可能就不同了。
chloerei
2011-09-12 16:04:37 +08:00
@Kymair 既然能接受霸道,为什么不能接受约定呢?
chloerei
2011-09-12 16:32:06 +08:00
说说这贴没点出来的 ruby/rails 误解

1. Rails 传说中很敏捷,所以学起来是最快的

错误,学习 Rails 花的时间可能比别的框架都多。因为它一方面大包大揽,一方面默认你已经对各个层面的理论有了基本了解,选择 Rails 是因为你已经厌倦了重复制造轮子。但是,学习 Rails 比学习其他语言 + 框架 + 理论 + 最佳实践 + 时髦技术的总代价少,因为它已经为你选择了最受好评的那部分,节省了筛选时间。

2. Ruby/Rails 工作机会少

见仁见智。http://chinaonrails.com 现在招聘帖子很多,但我觉得他们挺难招到人的。有人觉得满大街的招人是安全感,有人觉得适合自己发挥的酷工作才有意义。

3. Ruby 程序员生产力高、一个顶十/玩世不恭、不负责任

Ruby 程序员也是程序员,有靠谱的有不靠谱的,好的程序员总是珍稀资源。
Los
2011-09-12 19:01:12 +08:00
1. rails不完美,rails一直在进化,快速的进化,它进化是在开创。而现阶段rails远远抛开了其竞争对手好几条街
2. 如果你真的对rails熟悉,你会发觉rails的一些「约定」可以相当容易打破,但过后你会发觉你自己捣鼓出来的那一堆东西还远远不如遵从rails的「约定」来得好
3. 如果你站在门外,你永远无法想象ruby/rails的社区活跃度是多么的变态,并且这个活跃度并非昙花一现的景象,它已维持了好几年,一个活跃的社区能带来什么你应该会知道
4. 很多人对rails潜意识的抵触是因为误解了其「约定」的本质,以为「约定」就是绝对的「约束」
5. 大部分对rails长篇大论的人没有用rails真正完成过一个项目,有些甚至连真正的使用方法都还没有摸清
stranbird
2011-09-12 19:28:32 +08:00
rails程序员过来围观一下。

有哪位同学可以解释一下这种语言(编辑器、框架)之间的辩论最后是希望达成什么样的目的?
huangz
2011-09-12 19:56:22 +08:00
没有目的,也没有结果。就大家掐掐架,打发时间,缓解工作压力,促进生活和谐,等大家的压力排解了帖子就沉下去了,然后一周过去,又来了个人,问了一句“写xxx是用Ruby语言好还是Python语言好”,于是,新的一轮战役再次爆发,Ruby党和Python党之间脆弱的协议再次荡然无存。

关于到底是A语言好还是B语言好的战争必将持续到诺亚方舟扬帆起航那天,必将持续到Perl6发布那天,必将持续到中国房价回归理性那天,必将持续到世界终结那天,必将。。。
keakon
2011-09-12 20:14:28 +08:00
@chloerei

1. 有的东西我不想点明,因为我感觉你是装不知道。
就好像我说这家中国餐馆经常拿臭鸡蛋做菜,有人就会说美国的鸡蛋也是从鸡屁股里出来的一样。
你的回答甚至让我怀疑Ruby的magic就是你猜啊,猜对了就说明它是对的,猜错了说明你的想法是不切实际的。
这句话不是搞笑,我在学习Ruby时确实存在不少困惑,不是因为不懂它的语法,而是不懂为什么要这样设计。随着对它了解的深入,这些质疑让我渐渐摸到了一些规律,似乎接触到了设计者的理念,然后确信这不是我理想中的语言,仅此而已。我也知道肯定有你这种和他观念一致的人,也只有这种人才能学好Ruby。
我想你我都知道对方要表达的意思,既然不愿点破,我也不想就此问题再做回复了。

2. “盛气凌人”指的是教育我“要么就花大把时间去领悟它的好,要么就别指手划脚”的人,并不是对你说的。
我在V2EX遇到过一些这样的Rubyer,认为自己捡了块宝,所有认为Ruby不好的都是SB,能力肯定不如自己,所以没有自己这种超凡脱俗的见解。当然原话没有挑明,但字里行间透露出的语气不是来交流,而是来鄙视的。
很不巧我太过有自知之明了,我相信你也有。

3. 正如前面所说,我对Rubyer的偏见很早就有了。有个形容词我觉得很贴切,不过我觉得他人之言很难入耳,还是自省的好。
我也不掩饰对他们的好感:思维敏捷和开阔,热衷于新技术。但是他们真的不善于表达,就像Ruby一样让我困惑。好在我不是在追妹子,不需要勉强自己与其交流。

对Ruby的偏见倒是自认为没有。我考虑的是“是否适合自己”,而在“语言好不好”这方面我和你的看法是相同的。
所以我也很看不起那些没有思考过什么是自己真正想要的,就盲目去寻找一门“公认”的好语言的人,因为他们把自己看得比语言更低贱。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/17993

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX