Ruby on Rails還是Django?做網站開發應該學習哪一個
Rails和Django都是非常優秀的網站開發框架,糾結應該學習Rails還是Django的人,大概有下面幾種:
- 想找後端開發工作的
- 自己玩票搞副業的
對於已經工作的職業程序員們來說,絕對不會糾結Rails和Django該選哪一個,因為公司的技術棧是啥你就得學啥,沒得商量。
對於想找後端開發工作的,我不是資深業內人士,無法給出合理的建議。對於玩票的那些人,比如想了解一下網站開發技術、MVC框架的設計師,我推薦Django。沒錯就是這麼直接。
在我自己陷入了應該學Rails還是Django的迷思中後,我把Ruby On Rails官方文檔和Django官方文檔都翻了一遍,還翻到了一篇很棒的2014年的技術對比。這裡我把思考的過程記錄下來,以免後面自己忘了又重新比較一遍……
其實Rails和Django之間的選擇,就是兩者之間開發哲學的選擇。
Rails創始人David Heinemeier Hansson設定的信條是:
- 程序員的幸福最大化
- 約定優於配置
- 主廚精選
- 多元化的設計模式
- 推崇優美的代碼
- 提供實用工具
- 重視整合系統
- 進步比穩定更重要
- 包容並重
而Python中的彩蛋import this則是:
$ python>>>import thisThe Zen of Python, by Tim PetersBeautiful 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 arent 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 youre Dutch.Now is better than never.Although never is often better than *right* now.If the implementation is hard to explain, its a bad idea.If the implementation is easy to explain, it may be a good idea.Namespaces are one honking great idea -- lets do more of those!
對比兩者的第二條(真巧):
約定優於配置
Convention over ConfigurationVS顯式優於隱式
Explicit is better than implicit
約定優於配置的哲學,可以讓熟悉開框架的人快速實現程序功能,而不需要把時間花費在從零開始的配置文件設置上。那種感覺,就像是閉著眼睛往前走,不怕前方沒有路,因為你知道,即使看不見,Rails也已經在前方給你鋪好了路。而這個特性,對於不熟悉開發框架的人來說,就有點「魔幻」了。
顯式優於隱式的哲學,可以讓不熟悉框架的人也能明確知道代碼在做什麼,如果不懂,照著代碼讀一遍就懂了。而這一點對於已經很熟悉框架的人來說就顯得很麻煩,「我知道所有的事情,我還要把我已經知道的東西再重新寫一遍」。
現在,搞清楚我們學習Rails或者Django的目標:玩票。顯式優於隱式的哲學對新人和非專業人士來說非常友好,畢竟這次玩票之後下次再玩票可能就是幾個月之後了,我可不想到時候看著自己寫的代碼一臉茫然,不得不再重新拿起官方文檔學一遍。
我推薦Django還有另外一個原因:框架背後的語言。Rails基於Ruby,Django基於Python。
Ruby是很優秀的腳本語言,我嘗試寫過一些之後也覺得:真爽。可選的函數括弧、符號特性等等。對比一下Ruby和Python的自動化測試腳本:
# Rubyrequire "selenium-webdriver"driver = Selenium::WebDriver.for :chromedriver.manage.timeouts.implicit_wait = 10driver.navigateTo "www.baidu.com"c = driver.find_element(:id, "content")c.send_keys "hello world"btn = driver.find_element(:id, "submit")btn.click# Pythonfrom selenium import webdriverfrom selenium.webdriver.common.by import Bydriver = 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系統上。以致於出現了一個網站教入門新手如何搭建開發環境:
所以,總結一下,玩票推薦Django的原因:
- 顯式優於隱式的哲學,不怕三天打漁兩天晒網自己忘記代碼怎麼寫的了
- Python除了網站,還能做其他很多事情,適合玩票
- Jupyter Notebook極大降低了入門成本
- 開發環境搭建容易
本文同步發表:
微信公眾號:不寫代碼的設計師不是好PM
推薦閱讀: