簡(jiǎn)單地一句話(huà)總結(jié):
1.假如你想幫他盡快找個(gè)活兒,賺到錢(qián),推薦PHP。
2.假如你想讓他成為一個(gè)高效工程師,推薦 Python。
3.假如你想讓他愛(ài)上他的工作,推薦 Ruby。
語(yǔ)言的選擇:
編程語(yǔ)言非常重要,不要認(rèn)為他們都圖靈等價(jià),用起來(lái)都一樣。實(shí)際上,好的語(yǔ)言,帶給你的東西是超乎想像的。
下面是一些看法:
1.程序員的時(shí)間遠(yuǎn)比機(jī)器的時(shí)間寶貴:選擇開(kāi)發(fā)效率最高的語(yǔ)言吧,不要過(guò)于在乎運(yùn)行性能,如果你開(kāi)發(fā)不出東西,那么跑得多快也沒(méi)用。
2.優(yōu)雅的抽象勝于簡(jiǎn)單的堆砌: 這意味著你的代碼是最簡(jiǎn)潔而又充滿(mǎn)設(shè)計(jì)感的,面向?qū)ο螅菀椎拈]包,一切都是表達(dá)式等等,而最好的抽象是語(yǔ)言本身能夠分層,既能夠書(shū)寫(xiě)語(yǔ)言的語(yǔ)言,比如 DSL 能力強(qiáng)弱是個(gè)指標(biāo)。
3.才華橫溢的社區(qū)勝過(guò)有難度的招聘:這種語(yǔ)言一定要擁有一個(gè)活躍且才華橫溢的社區(qū),只要使用她的人,就有一種自豪感和精英意識(shí),在社區(qū)里的每個(gè)人都自認(rèn)為比別人強(qiáng)。即使,你不那么容易招聘到程序員,但我們不都知道,一個(gè)有才華的程序員勝過(guò)100個(gè)平庸之輩嘛?選用這種語(yǔ)言,能保證團(tuán)隊(duì)里一起編碼的每一個(gè)人,都是高手。
4.也是最重要的,樂(lè)趣勝過(guò)一切: 靈活,好玩,永遠(yuǎn)有新發(fā)現(xiàn)的魔術(shù)般的語(yǔ)言,只有你想不到的,沒(méi)有你做不到的,對(duì)一個(gè)真正的hacker來(lái)說(shuō),這是選擇語(yǔ)言唯一的理由,這也是 Perl 為什么能夠長(zhǎng)期存活的原因,因?yàn)樗?hacker 為 hacker 創(chuàng)作的。
如果能看完這些觀點(diǎn),相信你能猜出我的選擇了 :) 是的,Ruby是主流語(yǔ)言中我認(rèn)為最出色的,最高的開(kāi)發(fā)效率,最優(yōu)雅簡(jiǎn)潔的抽象能力,最有才的社區(qū)(Github為中心),和最大的樂(lè)趣。
做為一個(gè)程序員,是應(yīng)該去選取不同思路的語(yǔ)言去學(xué)習(xí)的,而且當(dāng)然要選擇最有代表性的語(yǔ)言,在編程的世界里,主流的思路其實(shí)就兩種,一是結(jié)構(gòu)化編程,一是函數(shù)化編程,面向?qū)ο笾皇墙Y(jié)構(gòu)化編程進(jìn)化的一個(gè)階段而已,其他各種各樣的思路大多數(shù)是這兩個(gè)的分支。
社區(qū)的創(chuàng)造力
選擇一門(mén)語(yǔ)言要看這個(gè)語(yǔ)言社區(qū)的氣質(zhì),以及你想用他做什么東西。
Mac 上可以運(yùn)行那么多種語(yǔ)言,有很多人用 git。但卻只有 Ruby 的用戶(hù)開(kāi)發(fā)出了 homebrew 這樣牛逼的包管理系統(tǒng),善用了 github 的諸多特性,真正的把每一個(gè)用戶(hù)都變成了潛在的 repo 貢獻(xiàn)者。我相信這絕對(duì)不是巧合。如果同樣的條件擺在面前,你做出了一個(gè)全新的東西而別人沒(méi)有,說(shuō)明了你的創(chuàng)造力比別人要高。
作為 Python 的使用者,我覺(jué)得 Ruby 語(yǔ)法的優(yōu)劣不太重要。但是從外部看 Ruby 社區(qū)近些年持續(xù)的向外輸出一些從技術(shù)到開(kāi)發(fā)上的理念,不斷的有大大小小的很酷的項(xiàng)目從 Ruby社區(qū)中誕生的出來(lái)。使得我覺(jué)得 Ruby 社區(qū)是一個(gè)很有創(chuàng)新氣質(zhì)的社區(qū)。因此如果你學(xué)編程是想做出一個(gè)很酷的東西,那么我強(qiáng)烈建議你直接學(xué)習(xí) Ruby。
從 Web 開(kāi)發(fā)去比較
對(duì)于 Web 開(kāi)發(fā),這三種語(yǔ)言都能勝任,但是還是有不少區(qū)別:
1.Ruby 的 rails 框架確實(shí)是稱(chēng)得上是快速開(kāi)發(fā)的典范,但是 Ruby 的語(yǔ)法過(guò)于靈活,有些時(shí)候?qū)ν粋€(gè)處理會(huì)有很多種不同的寫(xiě)法。
2.PHP 是老牌的網(wǎng)頁(yè)腳本語(yǔ)言,相對(duì)其他兩門(mén)而言比較成熟。PHP 雖然快速成型,但容易失控,尤其項(xiàng)目稍大的時(shí)候。
3.對(duì)于 Python 來(lái)說(shuō),由于自身的簡(jiǎn)約設(shè)計(jì),可能應(yīng)用的方面的更多,幾乎是可以涉及到IT的各個(gè)方面,Web 只是它其中一個(gè)方面,而且有比較成功的殺手級(jí)應(yīng)用,Youtube 就是用 Python 開(kāi)發(fā)的,服務(wù)器的各種原來(lái)用 shell 或者 perl 的腳本,科學(xué)計(jì)算,游戲的腳本,甚至在桌面客戶(hù)端上也能看到 Python 的佳作,如 UliPad,對(duì)于初學(xué)者來(lái)說(shuō) Python是個(gè)不錯(cuò)的選擇,在這三者中它的語(yǔ)法是最簡(jiǎn)潔和清晰的,適合初學(xué)者學(xué)習(xí)。
入門(mén)語(yǔ)言還是應(yīng)該選擇一個(gè)比較嚴(yán)謹(jǐn)?shù)?,像Java,Python那樣的語(yǔ)言比較合適,從 PHP 語(yǔ)言不太容易學(xué)到 OO 的思想和設(shè)計(jì)模式之類(lèi)的東西,而這些對(duì)于一個(gè)優(yōu)秀的 PHP 程序員來(lái)說(shuō)也是很必要的。這里不是黑 PHP,每個(gè)語(yǔ)言都有自己的優(yōu)點(diǎn),比如 PHP 入門(mén)快,可以增加編程的信心,明白編程那點(diǎn)事后,可以觸類(lèi)旁通的接觸其他語(yǔ)言。很多編程者就是從 PHP 入門(mén)的。
在編程學(xué)習(xí)里有這么一個(gè)現(xiàn)象:直接推薦 Python 的人,基本都沒(méi)深入學(xué)習(xí)過(guò) Ruby。學(xué)過(guò) Python 和 Ruby 的人,基本都喜歡 Ruby。
具體使用什么語(yǔ)言,不是唯一的。根據(jù)場(chǎng)景是要分的。一個(gè)人至少是需要學(xué)習(xí)3種語(yǔ)言的:
1.一種是工作語(yǔ)言,比如C++,Java,PHP,這三種語(yǔ)言,是互聯(lián)網(wǎng)的萬(wàn)能藥,只要會(huì)了,工作是永遠(yuǎn)都不愁的,大型公司一般都會(huì)使用,用來(lái)開(kāi)發(fā)一些大型項(xiàng)目。
2.一種是自己使用的語(yǔ)言,比如 Python,Ruby,當(dāng)然,我也推薦 Ruby。我也用過(guò) python ,后來(lái)因?yàn)楣ぷ餍枰?,忍痛放棄?Python,最后,竟然深深喜歡上 Ruby 了。然后就不再回頭了,對(duì)于個(gè)人使用來(lái)說(shuō),是要非常注重開(kāi)發(fā)效能的,一門(mén)語(yǔ)言,至少能用10年,如果自己選擇的語(yǔ)言,可以在開(kāi)發(fā)效能上超越其他語(yǔ)言十分之一,那么在十年內(nèi)這種收益是非常大的。
3.還有一門(mén)是新語(yǔ)言使用,不必深入,但是一定要了解,這有助于比較不同語(yǔ)言的不足,才不至于成為井底之蛙。比如 Nodejs, Scale等。
關(guān)于 Ruby
我覺(jué)得直接學(xué) Ruby 也是不錯(cuò)的選擇。
1.本來(lái) rails 框架就自帶了 server,WEBrick??粗?Log 做開(kāi)發(fā)效率非常高。
2.如果要部署的話(huà),用 passenger 也是絕對(duì)方便。
3.Views 層的模板系統(tǒng),ERB 應(yīng)該比 Python 的各種要來(lái)得美,而且更加簡(jiǎn)單。之前用過(guò) Django,覺(jué)得太重了。
4.Rails 可以讓你不斷的驚訝程序可以這樣寫(xiě)的啊,我第一次看到有 7.days.ago 的時(shí)候驚掉了。
5.Rails強(qiáng)調(diào)一種DSL,一來(lái)符合人們的語(yǔ)言習(xí)慣、二來(lái)我覺(jué)得是一種編程語(yǔ)言的顛覆,我們并不是在用某個(gè)特定的語(yǔ)言(比如Ruby)來(lái)實(shí)現(xiàn)一個(gè)功能(就如同是用C還是用Java來(lái)寫(xiě)一個(gè)編譯器),而是我可以在這些語(yǔ)言的基礎(chǔ)上定義一種新的語(yǔ)言(類(lèi)似于lex,yacc這樣的詞法語(yǔ)法生成器)。看看routes.rb的設(shè)置吧,能有多么驚訝,這是程序么,簡(jiǎn)直就是詩(shī)。美不只是在于內(nèi)容,同樣在于形式。
關(guān)于 Python
python的優(yōu)勢(shì)很多,比如:
1.語(yǔ)法簡(jiǎn)潔,無(wú)需編譯。Python 語(yǔ)法簡(jiǎn)潔高效,一句話(huà)“人生苦短,我用 Python”啥都說(shuō)明了,高效是 Python 的特點(diǎn)。
2.強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)。默認(rèn)安裝的Python開(kāi)發(fā)環(huán)境已經(jīng)附帶了很多高級(jí)數(shù)據(jù)類(lèi)型,如列表、元組、字典、集合、隊(duì)列等,無(wú)需進(jìn)一步編程就可以使用這些數(shù)據(jù)類(lèi)型的操作。使用這些數(shù)據(jù)類(lèi)型使得實(shí)現(xiàn)抽象的數(shù)學(xué)概念非常簡(jiǎn)單。
3.強(qiáng)制縮進(jìn),讓代碼自然顯得有條理。
4.插件齊全,可以完成絕大部分的程序設(shè)計(jì)任務(wù)。
當(dāng)然還很多,具體還可以去看看 《Python的設(shè)計(jì)哲學(xué)》這個(gè) chapter。
小結(jié)
沒(méi)有最好的語(yǔ)言,只有最合適的語(yǔ)言。
沒(méi)有糟糕的語(yǔ)言,只有糟糕的程序員。
沒(méi)有一種語(yǔ)言是萬(wàn)能的,只會(huì)一種語(yǔ)言是萬(wàn)萬(wàn)不能的。
用什么語(yǔ)言不重要,最重要的是效率:開(kāi)發(fā)效率和執(zhí)行效率。PHP 語(yǔ)法很傻,一點(diǎn)都不炫,但凡是學(xué)過(guò)C、JS、AS等等語(yǔ)言的,很容易上手,因?yàn)檎Z(yǔ)法上有很多重合的地方。很多人看不起 PHP,說(shuō) PHP 太簡(jiǎn)單的人,往往是因?yàn)閷?duì) PHP 本身不夠深入了解,其實(shí) PHP 里面的東西一般人用到的很少,5.3 以上的特性也慢慢讓這種語(yǔ)言生動(dòng)起來(lái),你越是深入,就越能發(fā)現(xiàn)它的強(qiáng)大和優(yōu)勢(shì)。
這里僅僅列出 PHP,Python 與 Ruby 的一些情況,讓讀者更好地挑選學(xué)習(xí)的語(yǔ)言。
語(yǔ)言沒(méi)優(yōu)劣之分,Just follow your passion.
更多信息請(qǐng)查看IT技術(shù)專(zhuān)欄