為什么只有python是膠水語言?
python現(xiàn)在最廣為聞名的形容大概有這些:
他是很好的膠水語言。什么是膠水語言?反正當(dāng)時(shí)的我不知道。
他是新一代的系統(tǒng)腳本。系統(tǒng)腳本是什么?
其次就是代碼可讀性。不過,這個(gè)其實(shí)還是爭(zhēng)議挺大的,我也不準(zhǔn)備在這多說了。
反正我發(fā)現(xiàn)大家其實(shí)都沒解釋清楚。
大概是因?yàn)椋切┐笈兌家呀?jīng)把很多東西習(xí)以為常了,卻不知道新人其實(shí)都一頭霧水。其實(shí)事情也沒那么復(fù)雜。
膠水語言
先從Hello world開始。所有學(xué)python的童鞋都會(huì)從這句話開始:
print "Hello World!"。
問題來了:為什么所有語言第一件做的事情,就是Hello World?
其實(shí),他代表了UNIX統(tǒng)一的文本處理模型及接口。這些個(gè)玩意,Windows的編程領(lǐng)域是很難接觸到的也很難理解的。
下面寫個(gè)范例。比如我這么干了:
# file:?say.py
import sys
txt = sys.argv[1]
print "Hello %s!"%(txt)
那么我就可以在Linux或Mac的終端上直接輸入:
python?say.py?World
輸出結(jié)果就會(huì)是:
Hello World!
這樣就確保了,在終端調(diào)用上的直觀與可編程性。
這樣,我就不用必須在別的python語言里面調(diào)用python了,而能夠直接在shell上跟其它處理程序直接連接。
BTW,這其實(shí)也是Hello world,呵呵。
再玩復(fù)雜點(diǎn)的:
file:?say2.py
import sys
for line in sys.stdin.readlines():
print "Hello %s!"%(line.strip())
那么我就可以在終端這么干:echo -e 'water\nmaomaol\nkenbing\nlonger\nchuang'|python?say3.py
輸出就會(huì)是:
Hello water!
Hello maomaol!
Hello kenbing!
Hello longer!
Hello chuang!
再進(jìn)一步,我可以把前面的內(nèi)容寫成文件,比如寫成一個(gè)這樣的文件:
names.txt
water
maomaol
kenbing
longer
chuang
就可以直接更便捷地做處理:
cat names.txt | python?say2.py?這樣,我就用cat命令把文本打印出來,然后輸出到say2.py上去了。
輸出一樣的結(jié)果。
但是,我輸入到終端又有什么用呢???沒錯(cuò),到終端的確沒啥用,我們把他輸出到文件吧!
cat names.txt | python?say2.py?> result.txt
就這樣,結(jié)果就保存到了result.txt這個(gè)文件里了。
這樣做的意義是什么?
意義就是,在終端上我可以隨意地組合他和其它程序,作為一個(gè)中間處理模塊。
而且,他可以如此地簡(jiǎn)單便捷,一些簡(jiǎn)單的腳本只需要cat一下馬上就能明白是什么意思。
一個(gè)表達(dá)式一行代碼,代碼塊有一致的標(biāo)準(zhǔn)的縮進(jìn),標(biāo)準(zhǔn)的命名方式,簡(jiǎn)練的語言,支持注釋……
別的程序要訪問或調(diào)用,很簡(jiǎn)單,一個(gè)命令把指定數(shù)據(jù)輸入到這里就好,然后要怎么拼接怎么拼接;
周期性地處理也沒問題,輸出到文件,等待別的程序調(diào)用。
比起windows各種詭異的processer,各種詭異的二進(jìn)制存儲(chǔ)的文件,這樣一致的接口簡(jiǎn)直能讓人想哭了。
系統(tǒng)腳本上:
他比SHELL多了很多數(shù)學(xué)及字符串處理能力,還多了很多很好用的迭代方法,還多了很多的原生的數(shù)據(jù)結(jié)構(gòu);
他比PERL多了很要命的代碼可讀性。
比起ruby和nodejs,他基本所有機(jī)器都預(yù)裝,而且已經(jīng)經(jīng)歷了時(shí)間的考驗(yàn)。雖然,將來的確會(huì)有被這倆貨代替的可能性。
比起C/C++,他多了一個(gè)終端、甚至像ipython這樣的加強(qiáng)版神器終端,可以邊調(diào)試代碼邊把沒問題的代碼寫進(jìn)文件。而且,源碼即可執(zhí)行。
在我看來,這些就是python的優(yōu)勢(shì)。讓他當(dāng)之無愧是系統(tǒng)腳本的王者。
只可惜,現(xiàn)在就連大多數(shù)的程序員,都已經(jīng)被圖形化界面給寵壞了,也習(xí)慣了各種大廠商、IDE提供的諸多工具包與功能,卻把很多很基礎(chǔ)的東西都給忽略了,卻在不斷地、重復(fù)地造輪子。這就叫碼農(nóng)。
所以,大概也就敢于擁抱變化的系統(tǒng)管理員、運(yùn)維工程師或數(shù)據(jù)分析工程師,才會(huì)長(zhǎng)久地持續(xù)地喜歡python。
這個(gè)用戶群,小眾而又龐大,而且整個(gè)業(yè)界對(duì)這這方面的專家有著很大的缺口。
純以前端兼設(shè)計(jì)師的身份,向這部分人群表示高山仰止。
然后,我再繼續(xù)折騰別的東西去。