怎麼快速的掌握一門語言

首先了解該語言的基本數據類型,基本語法和主要語言構造,主要數學運算符和 print 函數...
其次掌握數組和其他集合類的使用;
簡單字符串處理。所謂簡單,就是 Regex 和 Parser 以下的內容,什麼查找替換,截斷去字串之類的
面向對象或者函數式編程的特徵(繼承、多態、Lambda 函數之類)
異常、錯誤處理、斷言、日誌和調試支持,對單元測試的支持
版權歸作者所有,任何形式轉載請聯繫作者。
作者:清遠(來自豆瓣)
來源:https://www.douban.com/note/707176842/

最近在讀 CSDN 孟巖寫的技術博客,很有感觸,其中有一篇“快速掌握一個語言最常用的 50%”,感覺講的很有道理。自己也曾經學習過幾門語言,在這個過程中對如何初步掌握一個語言多多少少也有了一些想法,讀了他的這篇文章,才發現他寫的更深入。

他的這篇文章針對的是有經驗的人,不適合初學者,適用於“庸俗編程語言”(流行編程語言排行榜上排前 20 的基本上都是庸俗語言)。

首先了解該語言的基本數據類型,基本語法和主要語言構造,主要數學運算符和 print 函數的使用;
其次掌握數組和其他集合類的使用;
簡單字符串處理。所謂簡單,就是 Regex 和 Parser 以下的內容,什麼查找替換,截斷去字串之類的
面向對象或者函數式編程的特徵(繼承、多態、Lambda 函數之類)
異常、錯誤處理、斷言、日誌和調試支持,對單元測試的支持
程序代碼和可執行代碼的組織機制,運行時模塊加載、符號查找機制,這是初學時的一個難點,因爲大部分書都不太注意介紹這個極爲重要的內容
基本輸入輸出和文件處理,輸入輸出流類的組織
該語言如何進行 callback 方法調用,如何支持事件驅動編程模型。.NET的 delegate,Java 的 anonymous inner class,Java 7 的 closure,C++0x 的 tr1::function/bind 等等
如果有必要,可在這時研究 regex 和 XML 處理問題,如無必要可跳過
序列化和反序列化,掌握一下缺省的機制
如果必要,可瞭解一下線程、併發和異步調用機制,主要是爲了讀懂別人的代碼,如果自己要寫這類代碼,必須專門花時間嚴肅認真系統地學習,嚴禁半桶水上陣
動態編程,反射和元數據編程,數據和程序之間的相互轉化機制,運行時編譯和執行的機制(進階之道)
如果有必要,研究一下該語言對於泛型的支持,會用語言提供的泛型技術就好
如果還有時間,瞭解這個語言較常用的特色 features
在工作的閒暇時間,可以着重考察兩個問題,第一,這個語言有哪些慣用法和模式,第二,這個語言的編譯/解釋執行機制

至此語言的基本部分就可以說掌握了,之後是做數據庫、網絡還是做圖形,可以根據具體需求去搞,找相應的成熟框架或庫,邊做邊學,加深理解。其中,上述的建議中,加粗的部分是需要重點看的。

對語言有了基本的瞭解和認識以後,掌握其常用的部分,然後通過實戰及閱讀經典源碼加深理解,提升對語言的認知,是一個很好的方法。這樣既避免了只看語法,邊開發邊搜索的埋坑式編碼,也避免了一上來花費大量的時間研究語言的各個方面而沒有多大效果的弊端。

對於語言中太複雜,不常用的部分,還是要慎重。否則很有可能花費了太多的時間,收效很小,得不償失。譬如 C++ 中的模板部分,真的是又愛又恨。之前投入了很多的時間去學習模板,也沒有學習個所以然來,加之用的少,之前明白的那部分也忘記的差不多了。

當對語言有了一定的認知後(該語言不要太複雜,C++ 就太複雜了,語言本身有太多東西要學,並且不一定能夠很好的理解),應該注重的是對於數據結構、算法、操作系統、編譯、調試。如果之前學的是 C 語言,那麼就會把很多時間和精力放在內功的修煉上,而不是花在語言本身上。

如果早些看到孟巖的文章,在學習語言這塊就不會走那麼多彎路了,會將更多的時間和精力用在底層相關的學習上,譬如操作系統,編譯原理,彙編語言,數據結構與算法,調試技能上。

語言只是一個工具,不應該在語言層面發費太多的時間。現在越來越感覺語言之爭是沒有必要的,每種語言都有其應用場景,都有其優勢,不能以“田忌賽馬”的方式去比較不同語言。

記住,重要的是修煉內功,而不是語言本身,語言只是工具。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章