再談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.

發佈了37 篇原創文章 · 獲贊 7 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章