前些天同事問我會不會Python, 我猶豫了一下:不會。
實(shí)際上我曾經(jīng)學(xué)習(xí)過這個語言,當(dāng)時還用它寫了些小工具, 可現(xiàn)在我對這個語言的印象只剩下它那特殊的縮進(jìn)格式了。
由此思考怎樣才算會一門語言?我想每個程序員都接觸過多門語言 , 那么究竟怎樣才算會這門語言了呢?
會一門語言, 當(dāng)需要它時, 應(yīng)該能很快用該語言解決某個問題, 這個是最基本的。
如果深入一點(diǎn), 真正會一門語言, 我覺得需要滿足以下幾點(diǎn):
a. 有超過一年的實(shí)踐經(jīng)驗(yàn)
b. 理解語言背后的機(jī)制, 最好閱讀過該語言標(biāo)準(zhǔn)庫的部分源碼
c. 在最近一年里還經(jīng)常使用它
盡管我工作后只跳過一次槽,接觸的東西也比較有限, 但是細(xì)想一下, 也接觸過不少語言:
Masm: 有段時間玩破解, 研究了下
C/C++: 工組中一直用
Objective-C:有段時間想搞跨平臺的界面庫,研究過這個語言
C#: Win8 Metro下應(yīng)用程序拿它做界面
VB:剛工作的2年,用它開發(fā)過發(fā)證系統(tǒng)和一些小工具
Java,JSP, HTML, JS: 學(xué)得都不深入,當(dāng)時邊學(xué)邊用, 單獨(dú)做一個B/S架構(gòu)的電話會議系統(tǒng)
Python: 自學(xué)的, 但是后來沒怎么用
au3:當(dāng)時學(xué)得還挺深入, 看了不少語言標(biāo)準(zhǔn)庫的源碼,用它寫過一套自動測試框架
發(fā)現(xiàn)自己除了函數(shù)式語言(Lisp, F#, Erlang, Haskell等), 其他的編程范型語言都有接觸, 當(dāng)然函數(shù)式編程思想其實(shí)也有接觸,因?yàn)镃++模板元編程也有函數(shù)式編程的影子。
但是如果按照上面會一門語言的標(biāo)準(zhǔn), 發(fā)現(xiàn)自己算的上"會"的語言只有一門C++, 其他語言多則使用近2年,少則使用過3個月, 大部分是用完之后就扔了, 只有C++是在工作中持續(xù)使用的。
為什么我要定義上面的條件才算會一門語言?
因?yàn)閷W(xué)習(xí)一門語言的語法其實(shí)很容易, 大部分語言語法可以一個月內(nèi)掌握, 如果從C++轉(zhuǎn)到C#, 學(xué)習(xí)語言的基本語法部分甚至只需一兩天。學(xué)習(xí)一門語言最費(fèi)時的部分是語言的框架和庫的學(xué)習(xí), 這些部分沒有對該語言一兩年的編程實(shí)踐是很難深入的。比如C#語法本身是很簡單的 ,但是建立在該語言之上的各種框架和庫卻非常龐大和復(fù)雜, 比如你要成為WPF或是WCF的專家, 夠你研究三五年了。很多時候我們所謂的"會"某個語言可能只是會用這個語言寫些"hello word"式的入門程序, 根本就不理解背后的機(jī)制,如果真正懂一門語言,這門語言應(yīng)該對你的編程風(fēng)格(思想)產(chǎn)生影響。另外編程是項(xiàng)實(shí)踐活動,需要一直使用才不會生疏, 我們發(fā)現(xiàn)一門語言如果一年沒有使用, 對該語言的印象就僅剩語法部分了,如果連續(xù)3年沒有使用,就僅剩該語言的名字了。很多開發(fā)人員轉(zhuǎn)管理一兩年后想轉(zhuǎn)回寫代碼, 發(fā)現(xiàn)很難再回去了, 沒有敲代碼的感覺了。
所以如果你已經(jīng)會了一門語言, 并且想一直會這門語言, 請?jiān)诠ぷ鞒掷m(xù)使用。如果沒有機(jī)會使用, 自己給自己創(chuàng)造機(jī)會。
作為一名C++程序員, 應(yīng)該掌握哪些語言?
個人覺得C++程序員除了C++之外, 最好再深入掌握一門腳本語言, 一來作為輔助工具,二來可以理解動態(tài)語言的一些特性。具體什么腳本語言看自己選擇了。一般入如果是游戲程序員, 當(dāng)然首選Lua,因?yàn)樗旧鲜怯螒虻膬?nèi)定腳本語言。隨著Html5的流行,本來僅僅是瀏覽器使用的JS現(xiàn)在也是越來越受歡迎了。JS本身不支持面向?qū)ο螅乾F(xiàn)在已經(jīng)比較成熟的JS面向?qū)ο蠼鉀Q方案了。盡管隨著V8 的成功, Node.js興起, JS庫也越來越強(qiáng)大,但也僅限于服務(wù)端, 如果JS作為客戶端工具語言就不適合了。Python和Perl都是不錯的腳本語言, 如果你不是寫專業(yè)的文本處理腳本, 個人推薦學(xué)習(xí)Python, 因?yàn)樗唵我讓W(xué), 格式清晰,面向?qū)ο螅钪匾氖撬袕?qiáng)大的庫支持(包括GUI), 另外Python與C++ 交互也已經(jīng)有很成熟的解決方案。
如果你有精力,可以再學(xué)一門函數(shù)式編程語言 , 據(jù)說它會顛覆你的編程思想。
如果你有精力,可以再學(xué)一門函數(shù)式編程語言 , 據(jù)說它會顛覆你的編程思想。
簡單總結(jié)下, 語言不在多,在精。經(jīng)常使用你覺得有價值的語言。深入掌握一門腳本。


