再談PHP、Python與Ruby
本文整理自知乎。
一句話總結
簡單地總結:
- 假如你想幫他儘快找個活兒,賺到錢,推薦PHP。
- 假如你想讓他成為一個高效工程師,推薦 Python。
- 假如你想讓他愛上他的工作,推薦 Ruby。
語言的選擇
程式語言非常重要,不要認為他們都圖靈等價,用起來都一樣。實際上,好的語言,帶給你的東西是超乎想像的。
下面是一些看法:
- 程式設計師的時間遠比機器的時間寶貴:選擇開發效率最高的語言吧,不要過於在乎執行效能,如果你開發不出東西,那麼跑得多快也沒用。
- 優雅的抽象勝於簡單的堆砌: 這意味著你的程式碼是最簡潔而又充滿設計感的,物件導向,容易的閉包,一切都是表示式等等,而最好的抽象是語言本身能夠分層,既能夠書寫語言的語言,比如 DSL 能力強弱是個指標。
- 才華橫溢的社群勝過有難度的招聘:這種語言一定要擁有一個活躍且才華橫溢的社群,只要使用她的人,就有一種自豪感和精英意識,在社群裡的每個人都 自認為比別人強。即使,你不那麼容易招聘到程式設計師,但我們不都知道,一個有才華的程式設計師勝過100個平庸之輩嘛?選用這種語言,能保證團隊裡一起編碼的每 一個人,都是高手。
- 也是最重要的,樂趣勝過一切: 靈活,好玩,永遠有新發現的魔術般的語言,只有你想不到的,沒有你做不到的,對一個真正的hacker來說,這是選擇語言唯一的理由,這也是 Perl 為什麼能夠長期存活的原因,因為她是 hacker 為 hacker 創作的。
如果能看完這些觀點,相信你能猜出我的選擇了是的,Ruby是主流語言中我認為最出色的,最高的開發效率,最優雅簡潔的抽象能力,最有才的社群(GitHub為中心),和最大的樂趣。
做為一個程式設計師,是應該去選取不同思路的語言去學習的,而且當然要選擇最有代表性的語言,在程式設計的世界裡,主流的思路其實就兩種,一是結構化程式設計,一是函式化程式設計,物件導向只是結構化程式設計進化的一個階段而已,其他各種各樣的思路大多數是這兩個的分支。
社群的創造力
選擇一門語言要看這個語言社群的氣質,以及你想用他做什麼東西。
Mac 上可以執行那麼多種語言,有很多人用 git。但卻只有 Ruby 的使用者開發出了 homebrew 這樣牛逼的包管理系統,善用了 github 的諸多特性,真正的把每一個使用者都變成了潛在的 repo 貢獻者。我相信這絕對不是巧合。如果同樣的條件擺在面前,你做出了一個全新的東西而別人沒有,說明了你的創造力比別人要高。
作為 Python 的使用者,我覺得 Ruby 語法的優劣不太重要。但是從外部看 Ruby 社群近些年持續的向外輸出一些從技術到開發上的理念,不斷的有大大小小的很酷的專案從 Ruby 社群中誕生的出來。使得我覺得 Ruby 社群是一個很有創新氣質的社群。因此如果你學程式設計是想做出一個很酷的東西,那麼我強烈建議你直接學習 Ruby。
從 Web 開發去比較
對於 Web 開發,這三種語言都能勝任,但是還是有不少區別:
- Ruby 的 rails 框架確實是稱得上是快速開發的典範,但是 Ruby 的語法過於靈活,有些時候對同一個處理會有很多種不同的寫法。
- PHP 是老牌的網頁尾本語言,相對其他兩門而言比較成熟。PHP 雖然快速成型,但容易失控,尤其專案稍大的時候。
- 對於 Python 來說,由於自身的簡約設計,可能應用的方面的更多,幾乎是可以涉及到IT的各個方面,Web 只是它其中一個方面,而且有比較成功的殺手級應用,Youtube 就是用 Python 開發的,伺服器的各種原來用 shell 或者 perl 的指令碼,科學計算,遊戲的指令碼,甚至在桌面客戶端上也能看到 Python 的佳作,如 UliPad,對於初學者來說 Python 是個不錯的選擇,在這三者中它的語法是最簡潔和清晰的,適合初學者學習。
入門語言還是應該選擇一個比較嚴謹的,像Java,Python那樣的語言比較合適,從 PHP 語言不太容易學到 OO 的思想和設計模式之類的東西,而這些對於一個優秀的 PHP 程式設計師來說也是很必要的。這裡不是黑 PHP,每個語言都有自己的優點,比如 PHP 入門快,可以增加程式設計的信心,明白程式設計那點事後,可以觸類旁通的接觸其他語言。很多程式設計者就是從 PHP 入門的。
在程式設計學習裡有這麼一個現象:直接推薦 Python 的人,基本都沒深入學習過 Ruby。學過 Python 和 Ruby 的人,基本都喜歡 Ruby。
具體使用什麼語言,不是唯一的。根據場景是要分的。一個人至少是需要學習3種語言的:
- 一種是工作語言,比如C++,Java,PHP,這三種語言,是網際網路的萬能藥,只要會了,工作是永遠都不愁的,大型公司一般都會使用,用來開發一些大型專案。
- 一種是自己使用的語言,比如 Python,Ruby,當然,我也推薦 Ruby。我也用過 python ,後來因為工作需要,忍痛放棄了 Python,最後,竟然深深喜歡上 Ruby 了。然後就不再回頭了,對於個人使用來說,是要非常注重開發效能的,一門語言,至少能用10年,如果自己選擇的語言,可以在開發效能上超越其他語言十分之 一,那麼在十年內這種收益是非常大的。
- 還有一門是新語言使用,不必深入,但是一定要了解,這有助於比較不同語言的不足,才不至於成為井底之蛙。比如 Nodejs, Scale等。
關於 Ruby
我覺得直接學 Ruby 也是不錯的選擇。
- 本來 rails 框架就自帶了 server,WEBrick。看著 Log 做開發效率非常高。
- 如果要部署的話,用 passenger 也是絕對方便。
- Views 層的模板系統,ERB 應該比 Python 的各種要來得美,而且更加簡單。之前用過 Django,覺得太重了。
- Rails 可以讓你不斷的驚訝程式可以這樣寫的啊,我第一次看到有 7.days.ago 的時候驚掉了。
- Rails強調一種DSL,一來符合人們的語言習慣、二來我覺得是一種程式語言的顛覆,我們並不是在用某個特定的語言(比如Ruby)來實現一個 功能(就如同是用C還是用Java來寫一個編譯器),而是我可以在這些語言的基礎上定義一種新的語言(類似於lex,yacc這樣的詞法語法生成器)。看 看routes.rb的設定吧,能有多麼驚訝,這是程式麼,簡直就是詩。美不只是在於內容,同樣在於形式。
Ruby 或者說 Rails 的缺點或許就是學習的曲線太陡,我之前有過 MVC 的經驗,上手RoR 還是花了三週的時間,或許也是自己接受能力不強吧,但更確切的問題應該在於 Rails 的慣用法太多:當然,我在用 ActiveRecord 拿資料的時候,可以寫 find_by_sql(“blablabla”),但是細查 Rails 的文件,他是提供類似於 Joins.Group.Select 等等的方法的,姑且不論效率是不是真的會快點,少寫一點 sql 在 .rb 的檔案裡面不是會更美一些麼。再到後來,偶然又發現有 metawhere 這種東西,是不是又要忍痛拋棄既往學到的那一堆 works but not elegant 的東西,義無反顧的投身到 metawhere 的學習中。
當然,如果不追求完美,上手也沒有這麼恐怖。
關於 Python
python的優勢很多,比如:
- 語法簡潔,無需編譯。Python 語法簡潔高效,一句話“人生苦短,我用 Python”啥都說明了,高效是 Python 的特點。
- 強大的資料結構。預設安裝的Python開發環境已經附帶了很多高階資料型別,如列表、元組、字典、集合、佇列等,無需進一步程式設計就可以使用這些資料型別的操作。使用這些資料型別使得實現抽象的數學概念非常簡單。
- 強制縮排,讓程式碼自然顯得有條理。
- 外掛齊全,可以完成絕大部分的程式設計任務。
當然還很多,具體還可以去看看 《Python的設計哲學》 這個 chapter。
小結
- 沒有最好的語言,只有最合適的語言。
- 沒有糟糕的語言,只有糟糕的程式設計師。
- 沒有一種語言是萬能的,只會一種語言是萬萬不能的。
用什麼語言不重要,最重要的是效率:開發效率和執行效率。PHP 語法很傻,一點都不炫,但凡是學過C、JS、AS等等語言的,很容易上手,因為語法上有很多重合的地方。很多人看不起 PHP,說 PHP 太簡單的人,往往是因為對 PHP 本身不夠深入瞭解,其實 PHP 裡面的東西一般人用到的很少,5.3 以上的特性也慢慢讓這種語言生動起來,你越是深入,就越能發現它的強大和優勢。
這裡僅僅列出 PHP,Python 與 Ruby 的一些情況,讓讀者更好地挑選學習的語言。
語言沒優劣之分,Just follow your passion.
相關文章
- 再談 PHP 未來之路PHP
- 我的PHP,Python和Ruby之路PHPPython
- Python元類再談Python
- 記上海Python社群聚會,談Python和RubyPython
- Ruby 札記 - 淺談和配置 Ruby
- 再談express與koa的對比Express
- 再談PHP從入門到精通需要幾年PHP
- python和Java、C、ruby、PHP有什麼區別?PythonJavaPHP
- Python vs PHP vs Ruby — 程式語言大對決PythonPHP
- 警惕!PHP、Node、Ruby 和 Python 應用,漏洞還沒結束!PHPPython
- 語言戰爭: PHP vs. RubyPHP
- 程式語言擬人化:Java、C++、Python、Ruby、PHP、C#、JSJavaC++PythonPHPC#JS
- Ruby On Rails 另一個笑談而已AI
- python的小資料池 is和== 以及再談編碼Python
- 程式語言擬人化(1):Java、C++、Python、Ruby、PHP、C#、JSJavaC++PythonPHPC#JS
- Javascript繼承,再談JavaScript繼承
- 再談特性切換
- 再談時間同步
- 再談JSON/XMLJSONXML
- 再談復現 Sora:被仰望與被遺忘的Sora
- Ruby程式語言與Ruby之間的比較
- C、C++、Java、JavaScript、PHP、Python和Ruby,主要有什麼區別?C++JavaScriptPHPPython
- 文案總是一改再改? 談談遊戲文案的擴充與複用遊戲
- 再談原始碼閱讀原始碼
- 再談synchronized鎖升級synchronized
- 再談冪等機制
- 再談RESTAPI最佳實踐RESTAPI
- 再談方法論和模式模式
- 再談開源ERP
- 再談java列舉enumJava
- [視訊]圖靈訪談系列之四:松本行弘談Ruby圖靈
- 再談Cocoon兼談JSP (轉)JS
- Python 和 Ruby 的對比Python
- 選Ruby還是選Python?Python
- Ruby先驅者談該程式語言之短板
- 程式設計開發(C/C++&Java&Python&JavaScript&Go&PHP&Ruby&Perl&R&Erlang)程式設計C++PythonJavaScriptGoPHP
- 蘋果在AR VR領域的現狀與預測再談蘋果VR
- 再談前後端分離後端