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