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