Ruby on Rails还是Django?做网站开发应该学习哪一个

Rails和Django都是非常优秀的网站开发框架,纠结应该学习Rails还是Django的人,大概有下面几种:

  1. 想找后端开发工作的
  2. 自己玩票搞副业的

对于已经工作的职业程序员们来说,绝对不会纠结Rails和Django该选哪一个,因为公司的技术栈是啥你就得学啥,没得商量。
对于想找后端开发工作的,我不是资深业内人士,无法给出合理建议。
对于玩票的那些人,比如想了解一下网站开发技术、MVC框架的设计师,我推荐Django。没错就是这么直接。

在我自己陷入了应该学Rails还是Django的迷思中后,我把Ruby On Rails官方文档Django官方文档都翻了一遍,还翻到了一篇很棒的2014年的技术对比。这里我把思考的过程记录下来,以免后面自己忘了又重新比较一遍……

其实Rails和Django之间的选择,就是两者之间开发哲学的选择。

Rails创始人David Heinemeier Hansson设定的信条是:

  1. 程序员的幸福最大化
  2. 约定优于配置
  3. 主厨精选
  4. 多元化的设计模式
  5. 推崇优美的代码
  6. 提供实用工具
  7. 重视整合系统
  8. 进步比稳定更重要
  9. 包容并重

而Python中的彩蛋import this则是:

$ python
>>>import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

对比两者的第二条(真巧):

约定优于配置
Convention over Configuration

VS
显式优于隐式
Explicit is better than implicit

约定优于配置的哲学,可以让熟悉开框架的人快速实现程序功能,而不需要把时间花费在从零开始的配置文件设置上。那种感觉,就像是闭着眼睛往前走,不怕前方没有路,因为你知道,即使看不见,Rails也已经在前方给你铺好了路。而这个特性,对于不熟悉开发框架的人来说,就有点“魔幻”了。

显式优于隐式的哲学,可以让不熟悉框架的人也能明确知道代码在做什么,如果不懂,照着代码读一遍就懂了。而这一点对于已经很熟悉框架的人来说就显得很麻烦,“我知道所有的事情,我还要把我已经知道的东西再重新写一遍”。

现在,搞清楚我们学习Rails或者Django的目标:玩票。显式优于隐式的哲学对新人和非专业人士来说非常友好,毕竟这次玩票之后下次再玩票可能就是几个月之后了,我可不想到时候看着自己写的代码一脸茫然,不得不再重新拿起官方文档学一遍。

我推荐Django还有另外一个原因:框架背后的语言。Rails基于Ruby,Django基于Python。

Ruby是很优秀的脚本语言,我尝试写过一些之后也觉得:真爽。可选的函数括号、符号特性等等。对比一下Ruby和Python的自动化测试脚本:

# Ruby
require "selenium-webdriver"
driver = Selenium::WebDriver.for :chrome
driver.manage.timeouts.implicit_wait = 10
driver.navigateTo "www.baidu.com"
c = driver.find_element(:id, "content")
c.send_keys "hello world"
btn = driver.find_element(:id, "submit")
btn.click

# Python
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get("www.baidu.com") 
c = driver.find_element(By.id, "content")
c = driver.find_element_by_id("content") #上一句的另一种写法
c.send_keys("hello world")
btn = driver.find_element_by_id("submit")
btn.click()

可以看到号称自然语言的Python,其“自然”程度输给了Ruby。而且Ruby还有5.times puts “hello world”等等各种魔幻的语法。

只可惜虽然Ruby的语法比Python爽那么多,但架不住Python在各个领域遍地开花。Python可以干嘛呢?PyGame写游戏,PyQt写桌面GUI程序,Pandas搞数据分析,Scrapy写大型网络爬虫,Matplotlib搞数据可视化,TensorFlow搞深度学习。Django写多了,拿Python做点其他的事情完全不是问题。Ruby虽然也可以做点其他的事情,跟Python比起来就相形见绌了。

Python还有一个Jupyter Notebook,交互式的代码编写方式,对于还处在学习阶段的人来说简单是神器。

还有一点,Django/Python的开发环境搭建因为有virtualenv这个工具非常简单,而Rails/Ruby的就麻烦多了,尤其是在Windows系统上。以致于出现了一个网站教入门新手如何搭建开发环境:http://installrails.com

所以,总结一下,玩票推荐Django的原因:

  1. 显式优于隐式的哲学,不怕三天打渔两天晒网自己忘记代码怎么写的了
  2. Python除了网站,还能做其他很多事情,适合玩票
  3. Jupyter Notebook极大降低了入门成本
  4. 开发环境搭建容易
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352