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