怎么快速的學(xué)習(xí)一種編程語言


推選答案一般來說應(yīng)對這種挑戰(zhàn)有兩種態(tài)度:
其一,粗粗看看語法,就開始練習(xí),邊查資料邊學(xué)習(xí);
其二是花很多時間完整地把整個語言學(xué)習(xí)一遍,做到胸有成竹,然后再開始做實際工作。然而這兩種方法都有弊病。

第二種方法的問題當(dāng)然很明顯,不僅浪費了時間,偏離了目標(biāo),而且學(xué)習(xí)效率不高。因為沒有實際問題驅(qū)動的語言學(xué)習(xí)通常是不牢固不深入的。有的人學(xué)著學(xué)著成了語言專家,反而忘了自己原本是要解決問題來的。

第一種路子也有問題,在對于這種語言的脾氣秉性還沒有了解的情況下大刀闊斧地拼湊代碼,寫出來的東西肯定不入流。說穿新鞋走老路,新瓶裝舊酒,那都是小問題,真正嚴(yán)重的是這樣的程序員可以在短時間內(nèi)堆積大量充滿缺陷的垃圾代碼。

由于通常開發(fā)階段的測試完備程度有限,這些垃圾代碼往往能通過這個階段,從而潛伏下來,在后期成為整個項目的毒瘤,反反復(fù)復(fù)讓后來的維護者陷入西西弗斯困境。
怎么快速的學(xué)習(xí)一種編程語言


實際上語言學(xué)習(xí)有一定規(guī)律可循,對于已經(jīng)掌握一門語言的開發(fā)者來說,對于一般的語言,完全可以以最快的速度,在幾天至一周之內(nèi)掌握其最常用的50%,而且保證路子基本正宗,沒有出偏的弊病。其實真正寫程序不怕完全不會,最怕一知半解的去攢解決方案。

因為完全不會,就自然會去認(rèn)真查書學(xué)習(xí),如果學(xué)習(xí)能力好的話,寫出來的代碼質(zhì)量不會差。而一知半解,自己動手土法煉鋼,那搞出來的基本上都是廢銅爛鐵。比如錯誤處理和序列化,很多人不去了解“正路子”,而是憑借自己的一知半解去攢野路子,這是最危險的。

因此,即使時間再緊張,這些內(nèi)容也是必須首先完整了解一遍的。掌握這些內(nèi)容之后進(jìn)入實際開發(fā),即使有問題,也基本不會傷及項目大體。而開發(fā)者本人則可以安步當(dāng)車,慢慢在實踐中提高自己。

以下列出一個學(xué)習(xí)提綱,主要針對的是有經(jīng)驗的人,初學(xué)者不合適。這個提綱只能用于一般的庸俗編程語言學(xué)習(xí),目前在流行編程語言排行榜上排前20的基本上都是庸俗語言。如果要學(xué)的是LISP之類非庸俗語言,或是某個軟件中的二次開發(fā)語言,這里的建議未必合適。還是那句話,僅供參考。
怎么快速的學(xué)習(xí)一種編程語言

1. 首先了解該語言的基本數(shù)據(jù)類型,基本語法和主要語言構(gòu)造,主要數(shù)學(xué)運算符和print函數(shù)的使用,達(dá)到能夠?qū)懽T浩強程序設(shè)計書課后數(shù)學(xué)習(xí)題的程度;
2. 其次掌握數(shù)組和其他集合類的使用,有基礎(chǔ)的話可以理解一下泛型,如果理解不了也問題不大,后面可以補;
3. 簡單字符串處理。所謂簡單,就是Regex和Parser以下的內(nèi)容,什么查找替換,截斷去字串之類的。不過這個階段有一個難點,就是字符編碼問題。如果理解不了,可以先跳過,否則的話最好在這時候把這個問題搞定,免留后患;
4. 基本面向?qū)ο蠡蛘吆瘮?shù)式編程的特征,無非是什么繼承、多態(tài)、Lambda函數(shù)之類的,如果有經(jīng)驗的話很快就明白了;
5. 異常、錯誤處理、斷言、日志和調(diào)試支持,對單元測試的支持。你不一定要用TDD,但是在這個時候應(yīng)該掌握在這個語言里做TDD的基本技能;
6. 程序代碼和可執(zhí)行代碼的組織機制,運行時模塊加載、符號查找機制,這是初學(xué)時的一個難點,因為大部分書都不太注意介紹這個極為重要的內(nèi)容;
怎么快速的學(xué)習(xí)一種編程語言

7. 基本輸入輸出和文件處理,輸入輸出流類的組織,這通常是比較繁瑣的一部分,可以提綱挈領(lǐng)學(xué)一下,搞清楚概念,用到的時候查就是了。到這個階段可以寫大部分控制臺應(yīng)用了;
8. 該語言如何進(jìn)行callback方法調(diào)用,如何支持事件驅(qū)動編程模型。在現(xiàn)代編程環(huán)境下,這個問題是涉及開發(fā)思想的一個核心問題,幾乎每種語言在這里都會用足功夫,.NET的delegate,Java的anonymous inner class,Java 7的closure,C++OX的 tr1::function/bind,五花八門。如果能徹底理解這個問題,不但程序就不至于寫得太走樣,而且對該語言的設(shè)計思路也能有比較好的認(rèn)識;
9. 如果有必要,可在這時研究regex和XML處理問題,如無必要可跳過;
10. 序列化和反序列化,掌握一下缺省的機制就可以了;
11. 如果必要,可了解一下線程、并發(fā)和異步調(diào)用機制,主要是為了讀懂別人的代碼,如果自己要寫這類代碼,必須專門花時間嚴(yán)肅認(rèn)真系統(tǒng)地學(xué)習(xí),嚴(yán)禁半桶水上陣;
12. 動態(tài)編程,反射和元數(shù)據(jù)編程,數(shù)據(jù)和程序之間的相互轉(zhuǎn)化機制,運行時編譯和執(zhí)行的機制,有抱負(fù)的開發(fā)者在這塊可以多下些功夫,能夠使你對語言的認(rèn)識高出一個層面;
13. 如果有必要,可研究一下該語言對于泛型的支持,不必花太多時間,只要能使用現(xiàn)成的泛型集合和泛型函數(shù)就可以了,可在以后閑暇時抽時間系統(tǒng)學(xué)習(xí)。需要注意的是,泛型技術(shù)跟多線程技術(shù)一樣,用不好就成為萬惡之源,必須系統(tǒng)學(xué)習(xí),謹(jǐn)慎使用,否則不如不學(xué)不用;
14. 如果還有時間,最好咨詢一下有經(jīng)驗的人,看看這個語言較常用的特色features是什么,如果之前沒學(xué)過,應(yīng)當(dāng)補一下。比如Ruby的block interator, Java的dynamic proxy,C# 3的LINQ和extension method。沒時間的話,也可以邊做邊學(xué),沒有大問題。
15. 有必要的話,在工作的閑暇時間,可以著重考察兩個問題,第一,這個語言有哪些慣用法和模式,第二,這個語言的編譯/解釋執(zhí)行機制。
至此語言的基本部分就可以說掌握了,之后是做數(shù)據(jù)庫、網(wǎng)絡(luò)還是做圖形,可以根據(jù)具體需求去搞,找相應(yīng)的成熟框架或庫,邊做邊學(xué),加深理解。對于一個庸俗語言,我自己把上面的內(nèi)容走一遍大概要花2-3周時間,不能算很快,但也耽誤不了太多事情,畢竟不是每個月都學(xué)新語言。
掌握了以上的內(nèi)容,就給練武術(shù)打好了基本功,雖然不見得有多優(yōu)秀,但是肯定是根正苗紅,將來不必繞大彎子。就算是臨時使用的語言,把上面這個提綱精簡一下,大致能在幾天到一周內(nèi)搞定,不算是太耗時,而且寫出來的代碼不會太不靠譜。
網(wǎng)上報名
  • 姓名:
  • 專業(yè):
  • 層次: ??分?jǐn)?shù):
  • 電話:
  • QQ/微信:
  • 地址:

文中圖片素材來源網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系644062549@qq.com刪除

轉(zhuǎn)載注明出處:http://m.tengyi66.com