你该选择Ruby on Rails吗?
2011 3 26 03:04 AM 5555次查看
V2EX上似乎Ruby饭比Python控要多些,或者说更活跃些,所以大部分的回帖都在说Ruby和Rails的好。
确实,RoR从来不乏溢美之辞,甚至连碰都没碰过它的人都会觉得它很美——至少我在接触它之前是这样认为的。
但当问起他们究竟好在哪时,却又只是泛泛而谈,说不出什么实质性的东西。
若是深究,他们就会叫你自己去研究;而你半途而废了,就会格外鄙视你。
很不幸,我就是个半途而废的人;同时也很幸运,我并没有浪费过多的时间。
在继续讨论RoR前,不妨先把话题扯远,说下WEB框架。
不知是有意还是无意,如今学习WEB开发的人,总会先考虑语言和框架,而不是更基本的东西。以至于花了大把时间在各个选择间徘徊,看似学了一堆东西,却连WEB的本质都不知道。
举例来说,我在浏览器上访问了一个URL,服务器要怎么处理呢?PHP程序员会说根据它路径里的php文件名,在磁盘上找到对应的php文件,然后执行里面的代码;Java程序员会说根据它的路径,在XML配置里找到对应的servlet,再执行里面的代码;Rails程序员会说根据它的路径,分离出application、controller和action,然后执行这个action的代码。
No,这些都不是本质。WEB服务器在接收到用户代理的HTTP请求时,会根据规则,将需要动态处理的请求直接传给响应程序或框架,由它们解析HTTP请求。OK,这就完了,剩下的就由程序自己处理了,它一般会解析请求头,分析其URL,再根据规则定位到处理代码,将解析好的请求头和请求体传给它来执行。
你会说这不是一回事嘛。No,差别大了。你的规则都定死了,可它事实上是很灵活的。举个很简单的例子,http://www.keakon.net/2011/03/22/MacBookPro%E5%85%A5%E6%89%8B这个URL你该怎么处理?我想PHP程序员应该可以用URL重写来定位到自己的PHP代码,可你不觉得很绕么?至于其他2者怎么处理,我就不清楚了,我想高手肯定能解决的吧。
我不知道你看到这里会有什么感触。没错,“约定胜于配置”是很省事,可当我需要这些灵活性时,我却宁愿去配置。
WEB框架的初衷是为了简化程序员处理请求的过程,封装常用的功能。而这种封装需要做到什么程度,在方便性和灵活性之间的抉择就是见仁见智的了。
很明显,每个人都有自己的看法,那么争论谁是最好的有必要吗?当然,像Java这种既不方便又不灵活的,肯定不是最好的。
这个世界充满了各种各样的需求,你不可能找到一个适用于所有需求的WEB框架。举例来说,Rails有很强大的ORM,可如果在Google App Engine上使用,你怎么让它兼容非关系型数据库,并获得最佳性能?它可以利用异步API来获取数据吗?
所以,与其让工具适应需求,不如根据需求寻找工具。不要试图去找瑞士军刀,哪怕它有18种功能;当你需要点烟的时候,你最好是去找打火机。
也正因此,Python界为了满足各种不同的需求,诞生出很多的WEB框架。这当然会造成麻烦,比Ruby程序员选择Rails艰难多了。可问题是你为什么需要框架,你需要什么功能?——这才是你寻找框架的初衷,脱离了需求,还需要框架干啥?
其实不只是需求,对技术的欣赏,每个人都有自己的品味。
很多人都认为Python和Ruby很相似,都是很先进的动态语言。可我却觉得它们的差别太大了,真正的Python程序员和Ruby程序员肯定是2个极端,绝对是水火不容的存在。我不觉得会有同时喜欢这2者的程序员存在——如果他深谙2者的哲学的话。
简单来说,如果有一个新的语法特性要加入这门语言。Pythoner肯定会掂量其必要性,最终很可能是“哦,这看上去很有趣,不过我用不到,拜托别加进来”;Rubyer绝对会盛赞:“哇,这玩意太cool了,赶紧加上吧”。
Pythoner极力维护语言的纯洁性,简洁易懂是他们的哲理;Rubyer很喜欢新奇,巴不得每行代码都能用6种语法来写。
正是由于这种思维方式的差异,导致了他们之间的争论是很无语的,双方都会觉得对方不可理喻,可又无法说服对方。
举例来说,我吃饭就用筷子,虽然它几千年了也没什么改进。你要用调羹吃我也看得过去,用手抓我也无所谓,可是你要拿根牙签串着吃,或者用舌头舔着吃,我就不能忍了。
我无法说哪种人更好,这应该是选择的人根据自己的性格去决定的。如果有的东西你就是看不惯,那么你就去找个看得惯的,而不要憋到内伤。
我也喜欢新奇的东西,但我属于那种宁缺毋滥、把握得当的类型。我想这并不矛盾,有些人就是既喜欢那些奇特的geeker,又厌恶那些怪异的非主流。能分清其中的差异,我想你就知道什么语言适合你了。
在作出选择之后,你还得面临一个冗长的学习过程。
如果你不只是想依样画瓢的话,你最好对语言和框架本身的实现有透彻的了解,否则你写不出最优的代码,也终将会遇到无法解决的问题。
很多人都说Ruby on Rails和AJAX配合得很完美,可如果你不清楚它的实现,而又需要做些特殊的效果,你该怎么办?
而且你可能还不喜欢prototype,想要换成jQuery,你清楚怎样才能完美替换吗?
再看看Twitter生成的网页源码,你会发现难以置信的JavaScript代码量,你是否能想到帮它加快载入时间的方法?
虽然很多人都喜欢自动生成的东西,可如果你无法脑补出生成的内容,那会比脑残还严重。而当你发现为此所付出的精力,比手工打造更累的时候,你已经没法回头了…
最后想说的是,这篇文章有点标题党,不要误会成是为了抨击RoR而写的,你换成Django或其他框架也一样。
因此,不要听信别人的谗言,也不要害怕被鄙视,大胆地去尝试各种你感兴趣的,然后选择最fit你,最让你enjoy的才是王道。
向下滚动可载入更多评论,或者点这里禁止自动加载。