之前学过两次 Ruby,均以失败告终,甚至一气之下在 v 站发了个帖子:Ruby, Rails 不值一学。
但是牢骚归牢骚,学习还是要坚持的。尤其最近换了一家写 Ruby 的公司,再次拿起书本系统性的学习 Ruby,越学越香。
感觉之前只会写点 Go 确实坐井观天了,最近学习才发现,Go 中的很多生态都来自 Rails,比如 GORM,很多函数名都跟 Rails 的一样;sql-migrate 库也是从 Rails 汲取的,Gin、Echo 之类的框架等等。
虽然 Go 的性能特别好,但是就开发效率来说还是跟 Ruby 有差距,最近用 Go 重构了一个公司的 Rails 模块,代码量增加了好多。感觉对于一般小公司或者个人开发者,Ruby 真的应该是首选,特别是 Rails 框架,一周干完别人两周甚至一个月的活。
即便是从学习设计思想上来讲,学习 Ruby 也是大有裨益,之前很多 Go 库的使用只知其一不知其二,现在随着对 Ruby 的学习,才理解了那句“语言只是工具,重要的是思想”。
现在每天都学的很开心,特意来分享下 。
真香警报 😂
确实很多语言从 Rails 借鉴了不少东西,但很多框架只是学到皮毛,并且受限于语言特性学得很别扭,不如直接用 Rails。所以看到说别的语言也有类 Rails 框架,Rails 就不值得学的言论我都是一笑置之。有的框架是学 Rails 之余,有自己思想和创新的,就值得去学。例如我对 Phoenix 的 live view 有兴趣,不知道跟 Rails 最近出的 turbo_stream 有什么不同。
单从 web 开发这块,确实是 Go 的很多库都是用 go 重写了一遍 Ruby 的,现在我看到公司 Rails 项目用了什么,直接用 go 搜都能找到,比如"go I18n"
,问题是 Rails 是一个整体,无缝结合了 orm、脚手架、migrate 啥的,go 的得各自去找然后拼到一个项目里,这就不如 Rails 的开发体验自然。我的拙见是很多公司的项目和业务体量,Ruby 和 Rails 是足够支撑的,只是随着 go 太火都跃跃欲试。
其实学 ruby 花不了多少时间,学了也不亏,就算以后用不到也没有多大的损失。
至于说学 ruby 太费劲,那是因为编程基础没有学好。或者学 rails 太费劲,是因为 web 开发基础没有学好。这样表面上你学 ruby 和 rails 花了不少时间,其实大部分时间都是在用来补充自己的基础知识,这个锅扣不到 ruby 和 rails 上。
当然啦。从纯功利的角度上讲,学 ruby 和 rails 是没有必要的,因为不好找工作,生态也在走下坡路,不如多学点别的,面向工资编程。
例如我对 Phoenix 的 live view 有兴趣,不知道跟 Rails 最近出的 turbo_stream 有什么不同。
turbo_stream 是服务端推 html 片段,页面直接替换相应的 html 片段,简单粗暴。
live view 可以理解为 state 在服务端的 react。服务端 state 改变,通过 webocket 把 diff 发给页面,页面有一个小的 js 库根据 diff 改变 html。
turbo_stream 是 sever agnostic 的,任何 web 后端框架都可以用,包括 Phoenix。
live view 是基于 OTP 的,只有 Phoenix 可以用。
turbo_stream 基本是 web 老一套包装包装,上手不难。
live view 改变了 web 的开发方式,很多理念完全是新的,用起来别扭,我至今未上手。
live view 是可以完全不写 js 的,turbo_stream 没有要革 js 命的意思,标配 stimulus 一起用。
感到学 Rails 太费劲的往往是相对优秀的同学,如果不求甚解的用,其实不要太好用,但是很多优秀的同学喜欢刨根问底,那肯定会经过一段迷茫期的。
开发效率 Go 只是比 Ruby 慢一点,还要考虑后续的维护成本。楼主先学的 Go 后学的 Ruby, 产生的认知错觉,技术达到一定高度 Go 的开发效率并不慢。另外,Ruby on Rails 一时爽,换人维护真心就是火葬场。空指针异常、风格不统一、解决问题的选择过多、国内生态差 (很多 SDK 都没 Ruby 版本)、非静态编译导致重构困难、微服务生态下毫无作为,这些都是你要面对的。
amber 这个框架维护太慢了,Crystal 三月份发布 1.0.0,2000 多星星的框架到现在还没支持 1.0.0。kemal 也是不勤励维护的状态。lucky 到现在 issue 还一大把。整一个 Crystal 都被 Ruby 的概念绑架了,难以突破和超越。看不到未来。
Go 主流都是用 Echo、Gin 这类框架配合 Vue、React 搞前后端分离。
找了一圈,发现了借鉴了 Rails 思想的 Buffalo,下一个项目想试试
个人愚见,ruby 很好学,语法学会用不了一天,但是思想掌握了需要使用一定时间,再者是 rails 框架比较难掌握,毕竟太大了,包罗万象,还有很多魔法在里面。但是学会了之后,真的不愿意用其他语言框架了,毕竟被 RoR 惯坏了