Rails 如何深入学习 Rails

crazyjin · April 21, 2015 · Last by jasontang168 replied at April 27, 2015 · 3886 hits

学习 Ruby on Rails 有一两年了。现在也一直在做 rails 相关的开发工作。但是总感觉自己 rails 的各方面都接触了一点,但是对 rails 没有深入的理解. 以前看过<<深入理解计算机系统>>, 看到代码优化和 cpu 那两章的时候感觉太爽了。看完 csapp 感觉自己对计算机的理解清晰多了. 现在搞 rails, 虽然会用,但是 rails 给我的感觉还是一团迷雾。

那么问题来了,如何深入理解 rails, 就像读 csapp 那么爽?

刚拉了 rails 的代码统计了一下:

f**x@ubuntu:~/tmp/rails$ find ./ -name "*.rb" -exec cat {} \; | grep -n '^\s*#.*' -v | wc -l
229790
f**x@ubuntu:~/tmp/rails$ find ./ -name "*.rb" -exec cat {} \; | grep -n '^\s*#.*' | wc -l
38679

代码 229790 行,注释 38679 行。完全阅读分析 rails 代码注定是不行的。。

有空可以多看 http://api.rubyonrails.org 里面有很多的内容

是否可以考虑从零构造一个类 Rails 框架?记得以前 xdite 推荐过类似课程。貌似最好的理解就是重新造轮子。

Owning Rails

#2 楼 @chunlea 严重同意,但是重造一个轮子代价太大了

#5 楼 @crazyjin 不一定要造成功的…… 😄 重点在过程中的各种踩坑。

我觉得写一个 Rails Engine 的 gem 就明白很多了,或者去看看 devise 的源码。

#5 楼 @crazyjin 代价大,学到的也多,不厌其烦。

理论上是可以完整解读源码的,实际上不大可行。有解读 linux 源码的书,没见过完整解读 rails 源码的书,有讲片段的,不算。

单从实用的角度,还是做一些项目比较可行。按照 3.0 原则,做三个项目基本上就学会了。 可以适度参考下源码,就我而言,能看懂部分,有些元编程的代码确实很难理解的。 写应用接触最多的就是 route+active record,可重点学习下。

#9 楼 @chenge 我感觉完整阅读 rails 的源码从实际情况上来讲几乎不可能的,理由:

  1. rails 本身变化很快 2.每个人能掌握代码量是有限的,以前听大牛说 10W 就是极限,而我自己吃力地维护过 5W 行的 C. 同时源编程会增加难度. 3.时间精力都是有限的,谁上班累趴了下班还来啃源代码

重点学习是个不错的注意。

#7 楼 @lyfi2003 是个好主意。貌似写 devise 的大牛是写 rails 的。写 devise 也用到很多 rails 的机制。

felix@ubuntu:~/tmp/devise$ find ./ -name "*.rb" -exec cat {} \; | grep -n '^\s*#.*' -v | wc -l
12850
felix@ubuntu:~/tmp/devise$ find ./ -name "*.rb" -exec cat {} \; | grep -n '^\s*#.*' | wc -l
2158

源代码只有 12850 行。

#8 楼 @liwei78 确实是,但是如果真要趟坑的话就应该在未开垦的领域去趟,比如 golang 刚出来的时候,这样更有价值。

在 github 取一份 rails 的 git,经常看他们的提交,是个不错的方法 以前的代码只能遇到问题多到代码里去找原因 rails 的代码全读是很难的,因为到处都是魔法糖,但是偶尔读一个小模块,是很容易而且有意的

#12 楼 @crazyjin 觉得可以考虑下 Julia,现在 0.4,性能和语法都很好,而且是动态语言。type inference 语言自己做了,做得据说还不错,毕竟是 MIT 那帮人搞的,而且还有人专门做性能优化。

web 框架有 https://github.com/JuliaWeb/Morsel.jl

#15 楼 @yfractal Julia is a high-level, high-performance dynamic programming language for technical computing. 貌似是用来做科学计算的,为嘛搞个 web 框架?!

#16 楼 @crazyjin 跑偏了吧。。。:)

其实觉得 Julia 更像通用语言。语法挺好的,速度看起来也很快。

#14 楼 @crazyjin 新人去看 devise 有点难是正常的,如果想进阶,我觉得还是非常有必要的。这个难度相对 Rails 好很多。

#17 楼 @yfractal 跑偏了。不过作为一个前 C 程序员,我对 golang 更感兴趣。比起动态语言来,程序清晰,不会有太多的语法糖和 dsl, 性能过得去,语言级支持并发,云计算领域前途无量。

#18 楼 @lyfi2003 谢谢 lyfi2003 的建议,I'll have a try.

专业去学

You need to Sign in before reply, if you don't have an account, please Sign up first.