Eisen's Blog

© 2023. All rights reserved.

On rails way

January 28, 2013

railsruby

好久好久没有写过 public 的 blog 了。虽然是有写一些东西,但是没有公开,那么,写的再多,自己的 blog 上也什么都体现不出来,何况,写的也不多。而且,质量也很有问题,这也是没有公开的原因之一吧。写的烂,不好意思放出来。而且,我发现人真的是很放松的时候才会去写 blog 的,如果你平时很压抑,很烦,即便是空转,白白浪费时间,也没有办法静下心来,去写一点东西。哦,或者更进一步,是首先平时的工作生活相对比较顺心,有了身心都空闲的时间,然后才会去做自己喜欢做的事情(当然,最理想的情况是工作的内容就是很喜欢的事情),然后才会从喜欢做的事情里面感悟出点什么东西,然后才会想起来写点东西表达出来的。勉强是写不出东西来的,上次快元旦的时候发现自己好久没有写东西,以刷数据的心态勉强去写,结果胡乱写了些东西放在草稿箱里,估计很难见得了人了。不过幸好,这次的应该可以。

从去年八月份比较闲的时候我在又一个揪心的项目之后再次开始了寻找靠谱的开发框架的道路。这次,我决定跨越语言的界限,去尝试一下大名鼎鼎的 ruby on rails。说到语言的障碍,我又想先歪个楼,谈谈每个人对于语言的偏好。

虽说自己接触了很多的编程语言,但是我觉得真正熟练的没有几个。真正让我说比较拿得出手的,我可能会说 js 一个。python 一瓶子不满,半瓶子晃荡。c c++ java php 都是什么时候用什么时候学,虽然有些语言在用的时候也会觉得得心应手(其实我说的是 python 还有 php)用完了就忘记了,一点都不会写(哦,当然 python 还是写的多一些,一直会呢 o_0,但是依然不深入)。这也是我很拙急的地方。一直这样晃荡下去可不是个长久之计,一定要很深刻的掌握一门通用的语言。python 是我一直比较看好的语言,有很强大的社区,自然的语法,整体来说比较理想。但是,可悲的是,python 在 web 开发方面的能力,我个人感觉并不是最佳方案。尤其是在看了 rails 之后发现 django 简直就是 rails 的翻版,而且翻的似乎不太理想。但是我有一直觉得 web 开发一定是重头戏,因为 web 开发有很多重复无聊的东西,需要一个可以 DRY 的框架来帮你摆脱那些无聊的东西。出于对 python 的失望,也同时在那段时间看了本书 37-signal 的书 rework。我决定尝试一下大名鼎鼎的 ruby on rails。

跨语言一直我是比较忌讳但是有每次不得不去做的事情。前面有提到,由于工作环境的问题,我会不得不选择工作环境所共用的语言。这也是导致我使用了这么语言的原因。当然 python 是我自发学习的,没有任何一个环境是逼迫我实用 python 的,所以我一直对 python 很有好感。然后 js 作为前端唯一的语言,毋庸置疑的被我经常实用而导致对其比较熟练。很遗憾,一直在后端没有什么太大的建树,所以 c++ c java 都很没有信心。不过在前一阵子经历 java refactory 的历练之后,似乎对 java 也有些上道了,这也多亏了钱师傅的指导,没有他的指导,我觉得我要死在电脑桌前了o_o。所以说,其实每个经历都会有所收获的,即便是非常烂的经历。如果下次再遇到类似的问题,我想,我就不会像这次这么纠结了。起码,我是这么觉得。同时对后端似乎也有些开窍了,以前毫无概念的内存泄漏,起码知道是有理由担心的: 程序都是没昼没夜的跑的,错之毫厘谬之千里。而且性能也是非常值得考虑的问题,当数据量到了百万级别后,O(n^2)也是不小的工作量,甚至内存也是问题了。

虽说我和一些人有探讨过语言到底是不是障碍的问题。一个观点是说,语言不应该是个障碍。有一定经验的工程师都会实用过好多种的语言,但是不论什么语言,真正重要的东西是那种连伪代码都可以表示的算法或者说是逻辑。我曾经一度比较认同这种观点,因为我也是经历了很多语言过来的。在百度写 php 的时候,我也不会觉得说 php 有什么问题,每种语言该有的东西它都是具备的。基本的 web 开发要做的事情在 python java php ruby 里面其实都会反复出现了,它们只不过是围着 http 协议转罢了。但之后我发现,其实每个人对于语言是有各自的钟爱的。就单拿 web 开发来说,虽然都是围着 http 协议转,但是每个语言转的方式各有区别。尤其是在经历了这些语言做类似的事情之后,我觉得,它们绕的水平还是有区别的,或者说我对于怎么绕比较好是有自己的喜好的。虽然经历了很多语言,但是在用一个不太喜欢的语言的时候总会有一种凑合的想法,就是感觉就用这么一阵子,反正不会一直用的,于是也不会太深入的去研究。现在想想,这种凑合的心态是很危险的,会浪费很多的时间。但是,其实这差不多就是在做自己不喜欢的事情,兴趣和动力都相对小一些,有些时间还是去折腾自己感兴趣的东西去了。更惨的情况就是干不喜欢又不得不去做的事情,心理消耗过大,导致空转,精力白白消耗,白天干不好,晚上不精神干别的。而且,说来说去,到真正做事情的时候,大家不都是还实用自己用的最顺手的语言的时候最有生产效率么。后台之前是 python,后来换做了别的语言是因为人换了吧。他们不会考虑说用之前的 python 代码而是换做了 java。这应该是目前核心人员最顺手的语言是 java 吧。R 和 clojure 大行其道也是因为类似的原因吧。那么,语言不是问题这种说法,就比较扯了。

在对所了解的语言比较失望同时看到 37-signal 这个奇葩的时候(哦,我喜欢这样的奇葩),我觉得尝试一下这朵奇葩做出来的框架。看了本 agile rails 看了本 rails tutorial 感觉目前绝大多数的框架都是在学 rails 似的(当然,不排除 rails 跟风其他框架的可能)。不过 rails 的 generator 做的确实让人很顺心(对,就是 generator,一开是就觉得这样的设计很棒),同时 ruby 这个语言也确实有胜过 python 的地方,我对其还是有一些好感的。不过在去年 8 9 月份对于 ruby rails 还不是非常的有感觉。同时又有了新的事情要去做,这些东西就搁下了。

跑来写 java 之后,发现钱师傅对 ruby 很是喜欢,于是多了些对 ruby 的讨论,这才重新开始尝试 rails。果然,做过的事情都是有意义的,虽然八月份干的活当时不太明白,但是起码建立起了索引,这次上手就快了许多。而且,这次聪明了写,开始写些没有意义的项目来加深印象。现在看来,效果还是不错的。

之前和钱师傅讨论过有关语言的问题,钱师傅说,语言应该掌握两种,一种是非常动态,可以快速写出来的语言,一种是很底层的,可以保证执行效率的语言。那么,现在看来,其中一个是 ruby,另一个是 C 或者 C++。我比较偏爱 C,不过现在的偏爱是没有根据的,因为我没有做过。不过,这个想法是有了的,希望以后也有机会写一些很底层的 C 的 code。不过,目前,我已经走在了 rails 的道路上,现在先是 rails,以后用 ruby 做更多的事情吧。