開篇聲明一下,這又是一篇文不對題的文章。基本上,我是要講學(xué)習(xí)編程時(shí),如何同時(shí)學(xué)習(xí)英語。
我會向大家介紹兩個(gè)方法:一種是學(xué)習(xí)編程的方法,一種是學(xué)習(xí)英語的方法。像這樣的學(xué)習(xí)方法,通常在網(wǎng)上是賣多錢呢?這里有一家國際網(wǎng)站,我們來查一下:看,光光是學(xué)習(xí)編程的方法,這家培訓(xùn)所要賣1萬5000元,并且只有6個(gè)月時(shí)間,而光培訓(xùn)英語,這家網(wǎng)站要收大家3萬元!!并且它們都不是8心8箭的,但本站今天推出這樣一種8心8箭,而且是!合二為一的方法,它的價(jià)格是多少呢?不是30萬,也不是3萬……
===================無聊的分割線======================
有人問過我,學(xué)習(xí)C++編程,需不需要有好的英語水平?。科鋵?shí)他們是想問,我的英語水平要達(dá)到什么程度,才能開始學(xué)習(xí)英語啊。言下之意,就是如果判斷出他的英語水平不好,那他就準(zhǔn)備曲線救國,先專心學(xué)好英語,再開始學(xué)習(xí)編程罷!
唉,這問題怎么回答???我在想:一個(gè)人的英語水平,要么是好,要么是不好。(我要么是禿子,要么不是。但別問我有幾根頭發(fā)不算禿子)。
如果你英語水平好,甚至非常很好,那么恭喜!英語水平好,不僅僅對編程有好處,對其它工作,甚至生活,愛情等等,都是大有幫助的一件事,種種好處,他知你知我知,就不多說了,一會兒我多少講點(diǎn)和編程有關(guān)的幾點(diǎn)好處即可。
如果你英語水平差,甚至非常的差。那么恭喜!因?yàn)槲蚁敫嬖V你,你比英語好的人多了一種判斷自己編程是否進(jìn)步的方法。我向大家推薦一種在學(xué)習(xí)編程的過程中提高英語水平的方法噢。并且反過來也成立:你可以學(xué)習(xí)英語的過程中,提高編程的水平:)
(以下建議,主要針對C++語言學(xué)習(xí))
一、第1、2年(最多3年):
所列內(nèi)容,排名不分前后,意思是:通常你是要同時(shí)學(xué)習(xí)的。 1.1 操作系統(tǒng)SDK 如果是在windows下編程,請大量閱讀 MSDN 上的文檔。當(dāng)然要是美語版的,首頁鏈接在此:http://msdn.microsoft.com/en-us/library/default.aspx 然后,選中“Win32 and COM Development”分枝,在內(nèi)容頁面上,就有一堆的主題,不過是按字母次序排的,初學(xué)者首先可以選中的,就是UI部分(窗口等)“User Interface”,如果你還是沒有主意,那就再選下一層的“Windows Controls”。這 回列出來的都是我們天天在用的一些控件,且挑一個(gè),比如Button,慢慢看下去。結(jié)合的編程學(xué)習(xí),當(dāng)然是Windows 窗口編程(建議是純SDK),不時(shí)用google搜索一下CreateWindowEx這個(gè)關(guān)鍵字,一定大有裨益。如果確實(shí)不想從windows SDK的層次開始(累了點(diǎn)),那可以學(xué)習(xí)MFC,自然就是看它的文檔中的CButton、CWnd。如果想學(xué)習(xí)VCL,那就是TButton。 如果你的方向不在windows,而在unix/linux方向,那么先搞懂man命令,然后學(xué)會通過它查看文檔。 1.2、C函數(shù)、C++STL、boost 文檔 C函數(shù)的說明在哪呢?對于unix/linux等,那就是它的SDK。對于windows,通常你的IDE會提供相關(guān)文檔。比如,查一下看strcpy和strncpy有什么區(qū)別? C++ STL 上網(wǎng)可以查到的它的英文文檔。比如:http://www.cppreference.com/wiki/,再如SGI的STL文檔(術(shù)語有點(diǎn)過時(shí),但無大礙)http://www.sgi.com/tech/stl/ 在C函數(shù)和C++ STL之間,要以后者為重。閱讀前者,主要目標(biāo)甚至可以就是練習(xí)英語——當(dāng)然,別因?yàn)檫@話,就以為可以抱本英語辭典看C函數(shù)說明,你仍然要?jiǎng)邮謱懗绦蝌?yàn)證——這樣才有可能快速提高你對專業(yè)資料的英語閱讀水平。 再者,以上內(nèi)容都有大量的中文翻譯資料,可以作為學(xué)習(xí)的一種工具(比如首先閱讀適量中文文檔,對STL整個(gè)框架有點(diǎn)了解),但千萬別因此放棄閱讀原文。 最后是學(xué)習(xí)boost文檔。你同樣可以在網(wǎng)上閱讀大量boost文檔的中文版,劃出自己首先學(xué)習(xí)的幾個(gè)庫(一定要先合適的,從簡單的開始),然后再殺入boost的老巢。 有人說,英語難,技術(shù)資料也難,讓我看英語的技術(shù)資料,豈不難上加難!其實(shí)不難,由于我們是程序員看的又是編程方面的技術(shù),所以事情就倒過來,對于學(xué)習(xí)英語的程序來說,技術(shù)資料的英語其實(shí)是最簡單的了: 單詞上,只要堅(jiān)持看上三個(gè)月,也就差不多達(dá)到百萬字中找不到什么新詞的水平了; 語句上,表面上長句是不少,但通常三個(gè)while,that之后,也就完了,比起小說來,還是簡單得多了。 時(shí)態(tài)上:好像沒記得碰上多少什么“過去將來完成時(shí)”。 …… 以上內(nèi)容,我下的時(shí)限是2年。我武斷一點(diǎn):基本也就再加1年:如果一個(gè)C++程序員三年沒辦法有效地閱讀以上內(nèi)容,那他就是一個(gè)無法突破自我的C++程序員了。沒辦法在某一天到達(dá)“豁然開朗”的境界(當(dāng)然,這是基于軟件開發(fā)行業(yè),中文資料的時(shí)效、準(zhǔn)確性的現(xiàn)狀說的,也許過幾年,會有改觀罷)。 二、第3年 2.1 繼續(xù)看SDK文檔 (不一定是windows) 如果要精通Windows編程,還得繼續(xù)看Windows API 之類的東西。但前面是看API,然后做相關(guān)windows編程練習(xí);現(xiàn)在是做各種練習(xí)(比如數(shù)據(jù)庫編程),然后需要時(shí),查MSDN文檔,此其一。其二是開始學(xué)習(xí)Windows API中高級部分。比如Shell編程等COM接口等,比如寫一些勾子程序等。 當(dāng)然,由于每個(gè)人的發(fā)展方向不一樣。第三年時(shí),寫桌面程序的知識,已經(jīng)變成“公共課”。你可以如上繼續(xù)深化,也可以開始轉(zhuǎn)向特定方向,比如網(wǎng)絡(luò)編程要深入,則可以專攻API中的網(wǎng)絡(luò)部分,熟練地使用windows的“完成端口”編程。當(dāng)然,這類學(xué)習(xí)你必須在前面的學(xué)習(xí)有扎實(shí)的成果上,你才有可能自己理順學(xué)習(xí)路線,并懂得如何找到其它學(xué)習(xí)資料(主要是書是網(wǎng)上的代碼庫),否則MSDN就是一個(gè)字典而已,并不適合當(dāng)成學(xué)習(xí)的藍(lán)圖。像網(wǎng)絡(luò)的“完成端口”編程,首先你得懂什么叫“完成IO”。公共知識和專業(yè)知識并沒有明確的分割線,相反是慢慢過渡過去的,這個(gè)過程要做得相對自然而然些。 再細(xì)了講,在五、六年前,學(xué)習(xí)Windows下C++編程,差不多就是學(xué)習(xí)Windows API。不過IT界,特別是軟件開發(fā),主要技術(shù)的更替很厲害的說。寫本文的家伙,就曾經(jīng)買過兩個(gè)版本的《Borland C++ Bible》;結(jié)果很快沒用了(因?yàn)槲亿s了個(gè)DOS 編程的末朝)。后來是買了兩個(gè)版本的《Windows API 大全》,還好,Windows API 用的時(shí)間長了點(diǎn),鼎盛期算算有6,7年,但眾所周知,B/S結(jié)構(gòu)的應(yīng)用開始大行其是,客戶端有一個(gè)C++寫成的瀏覽器(NS,IE,F(xiàn)F)就通吃天下了——可這世界暫時(shí)輪不到我們自己寫瀏覽器啊:(。C++程序開始慢慢地傾向后臺服務(wù)開發(fā),并因此而將原來多數(shù)C++“應(yīng)用級軟件”程序員所無須考慮的,跨平臺的重要性出來了。至于GUI變成不重要了,所以雖然我是過來人,但我個(gè)人認(rèn)為單純?yōu)閷W(xué)習(xí)GUI編程而投入:(1)單一平臺、(2)閉源、(3)有被.net封裝掉的巨大可能,(4)學(xué)習(xí)周期非常之長……的Windows GUI編程,這不是不合算,而是相當(dāng)?shù)牟缓纤?。我個(gè)人建議是直接先學(xué)習(xí)跨平臺的QT或wxWidgets;然后當(dāng)有特定需要時(shí),再學(xué)習(xí)平臺相關(guān)的內(nèi)容,比如Windows或Linux下的特定API,會更符合當(dāng)前的C++發(fā)展潮流。(廣告時(shí)間:《白話C++》書就是按這個(gè)思路編排)。此時(shí),SDK文檔,可以改成是特定的庫的類庫手冊。 對應(yīng)的技術(shù),比如網(wǎng)絡(luò)啊線程啊,單純學(xué)習(xí)windows自家的函數(shù),也有點(diǎn)點(diǎn)不足,linux下如何完現(xiàn)“I/O Completion Ports”,它的線程和windows有何不同?等等。但整個(gè)過程,讓我建議,我還是覺得首要學(xué)習(xí)是跨平臺的庫,線程比如boost.Thread,而網(wǎng)絡(luò)框架,可以先學(xué)習(xí)boost.Asio,真要做大框架時(shí),特別是需要跨平臺時(shí)(比如想上AIX),那就是ACE了。 還有嵌入式編程,現(xiàn)在平臺很多,也有C++的陣腳所在(我個(gè)人在這方面,出于私利,是先回歸c,然后直接投奔java及C#陣營,就不好意思扯了……但C++在這方面絕對有潛力……)。 2.2 上國外blog,bbs,訂閱mail list,牛人主頁, 第一時(shí)間看到C語言大牛人,Linux之父和MS的某位C++開發(fā)中等牛人的吵嘴,是很爽的,是不是?(如果你回答不是,那我驚訝你會看我的文章看到這么后面)。除了苦讀API之外,這時(shí)上Google Groups編程相關(guān)尤其是C++論壇上看貼回貼,是一件有助于編程水平提高的事,一件有助于英語水平提高的事,一件有助于生活水平提高的事……。當(dāng)然,嚴(yán)重建議不要僅限google groups。C++的大牛們的blog,一個(gè)也不要落下。也不能只關(guān)心名人,如果學(xué)習(xí)wxWidgets,那就偶爾去看看它的blog?。ㄒ?yàn)樗碌寐?。知?#8220;大嘴Joel”嗎? 中文書可以買,但網(wǎng)站“Joel on software”,更值得去看。 幾位C++大拿的英文網(wǎng)站:C++ 之父 (更新不多,但值得多看細(xì)看)、Scott Meyers、其他幾位牛人,可以從Scott Meyers的這篇文章找到介紹及鏈接。 三、第4、5年 以我的水平,敢向大家安排4,5年后的事,實(shí)在是貽笑大方。所以這一段,我只建議大家把一些經(jīng)典的C++英文原著,留在此處閱讀。比如 《The Design and Evolution of C++ 》放在枕頭邊時(shí)時(shí)閱讀。泛型方面也需要進(jìn)階,《C++ Template》可以考慮買原版來讀,這方面的書這些年國外出了不少,不多說也。放最后要說的,是C++的標(biāo)準(zhǔn)文檔,這時(shí)候可以去看了。今年是09年,C++的新標(biāo),估計(jì)要跳票了,我現(xiàn)在看的是tr1的細(xì)節(jié),但等各位的4年之后,它就是C++0x標(biāo)準(zhǔn)了。 C++語言經(jīng)過“通吃一切”的狂熱時(shí)代,又經(jīng)歷了若干年的低潮期,但它沒有死掉,相反有了更為明確和不可代替的定位。而語言本身,也馬上要迎來一個(gè)新的標(biāo)準(zhǔn),其學(xué)習(xí)資料,比如書的發(fā)行高峰,必然會緊隨而來。但出于很自然的原因,網(wǎng)文也好,書也好,第一手資料通常還是來自國外,所以,做好準(zhǔn)備,將C++編程學(xué)習(xí)與英語水平同時(shí)提高,并且互相促進(jìn),是很需要的,是有意義的。 @最重要的交待@ 有人問:那我不專門去學(xué)英語了,我就學(xué)C++吧,完了之后,英語與C++語言同時(shí)到手,程序員也不一定當(dāng)了,我出國去賺生活了。停!本文從頭到尾都是在講如何掌握為編程而掌握閱讀相關(guān)英文資料的能力。想通過這樣來成為英語高人???想通過這種方法來掌握英語泡外國妞???絕對是做夢噢。
聯(lián)系客服