开篇声明一下,这又是一篇文不对题的文章。基本上,我是要讲学习编程时,如何同时学习英语。
我会向大家介绍两个方法:一种是学习编程的方法,一种是学习英语的方法。像这样的学习方法,通常在网上是卖多钱呢?这里有一家国际网站,我们来查一下:看,光光是学习编程的方法,这家培训所要卖1万5000元,并且只有6个月时间,而光培训英语,这家网站要收大家3万元!!并且它们都不是8心8箭的,但本站今天推出这样一种8心8箭,而且是!合二为一的方法,它的价格是多少呢?不是30万,也不是3万……
===================无聊的分割线======================
有人问过我,学习C++编程,需不需要有好的英语水平啊?其实他们是想问,我的英语水平要达到什么程度,才能开始学习英语啊。言下之意,就是如果判断出他的英语水平不好,那他就准备曲线救国,先专心学好英语,再开始学习编程罢!
唉,这问题怎么回答啊?我在想:一个人的英语水平,要么是好,要么是不好。(我要么是秃子,要么不是。但别问我有几根头发不算秃子)。
如果你英语水平好,甚至非常很好,那么恭喜!英语水平好,不仅仅对编程有好处,对其它工作,甚至生活,爱情等等,都是大有帮助的一件事,种种好处,他知你知我知,就不多说了,一会儿我多少讲点和编程有关的几点好处即可。
如果你英语水平差,甚至非常的差。那么恭喜!因为我想告诉你,你比英语好的人多了一种判断自己编程是否进步的方法。我向大家推荐一种在学习编程的过程中提高英语水平的方法噢。并且反过来也成立:你可以学习英语的过程中,提高编程的水平:)
(以下建议,主要针对C++语言学习)
一、第1、2年(最多3年):
所列内容,排名不分前后,意思是:通常你是要同时学习的。
1.1 操作系统SDK
如果是在windows下编程,请大量阅读 MSDN 上的文档。当然要是美语版的,首页链接在此:http://msdn.microsoft.com/en-us/library/default.aspx
然后,选中“Win32 and COM Development”分枝,在内容页面上,就有一堆的主题,不过是按字母次序排的,初学者首先可以选中的,就是UI部分(窗口等)“User Interface”,如果你还是没有主意,那就再选下一层的“Windows Controls”。这 回列出来的都是我们天天在用的一些控件,且挑一个,比如Button,慢慢看下去。结合的编程学习,当然是Windows 窗口编程(建议是纯SDK),不时用google搜索一下CreateWindowEx这个关键字,一定大有裨益。如果确实不想从windows SDK的层次开始(累了点),那可以学习MFC,自然就是看它的文档中的CButton、CWnd。如果想学习VCL,那就是TButton。
如果你的方向不在windows,而在unix/linux方向,那么先搞懂man命令,然后学会通过它查看文档。
1.2、C函数、C++STL、boost 文档
C函数的说明在哪呢?对于unix/linux等,那就是它的SDK。对于windows,通常你的IDE会提供相关文档。比如,查一下看strcpy和strncpy有什么区别?
C++ STL 上网可以查到的它的英文文档。比如:http://www.cppreference.com/wiki/,再如SGI的STL文档(术语有点过时,但无大碍)http://www.sgi.com/tech/stl/
在C函数和C++ STL之间,要以后者为重。阅读前者,主要目标甚至可以就是练习英语——当然,别因为这话,就以为可以抱本英语辞典看C函数说明,你仍然要动手写程序验证——这样才有可能快速提高你对专业资料的英语阅读水平。
再者,以上内容都有大量的中文翻译资料,可以作为学习的一种工具(比如首先阅读适量中文文档,对STL整个框架有点了解),但千万别因此放弃阅读原文。
最后是学习boost文档。你同样可以在网上阅读大量boost文档的中文版,划出自己首先学习的几个库(一定要先合适的,从简单的开始),然后再杀入boost的老巢。
有人说,英语难,技术资料也难,让我看英语的技术资料,岂不难上加难!其实不难,由于我们是程序员看的又是编程方面的技术,所以事情就倒过来,对于学习英语的程序来说,技术资料的英语其实是最简单的了:
单词上,只要坚持看上三个月,也就差不多达到百万字中找不到什么新词的水平了;
语句上,表面上长句是不少,但通常三个while,that之后,也就完了,比起小说来,还是简单得多了。
时态上:好像没记得碰上多少什么“过去将来完成时”。
……
以上内容,我下的时限是2年。我武断一点:基本也就再加1年:如果一个C++程序员三年没办法有效地阅读以上内容,那他就是一个无法突破自我的C++程序员了。没办法在某一天到达“豁然开朗”的境界(当然,这是基于软件开发行业,中文资料的时效、准确性的现状说的,也许过几年,会有改观罢)。
二、第3年
2.1 继续看SDK文档 (不一定是windows)
如果要精通Windows编程,还得继续看Windows API 之类的东西。但前面是看API,然后做相关windows编程练习;现在是做各种练习(比如数据库编程),然后需要时,查MSDN文档,此其一。其二是开始学习Windows API中高级部分。比如Shell编程等COM接口等,比如写一些勾子程序等。
当然,由于每个人的发展方向不一样。第三年时,写桌面程序的知识,已经变成“公共课”。你可以如上继续深化,也可以开始转向特定方向,比如网络编程要深入,则可以专攻API中的网络部分,熟练地使用windows的“完成端口”编程。当然,这类学习你必须在前面的学习有扎实的成果上,你才有可能自己理顺学习路线,并懂得如何找到其它学习资料(主要是书是网上的代码库),否则MSDN就是一个字典而已,并不适合当成学习的蓝图。像网络的“完成端口”编程,首先你得懂什么叫“完成IO”。公共知识和专业知识并没有明确的分割线,相反是慢慢过渡过去的,这个过程要做得相对自然而然些。
再细了讲,在五、六年前,学习Windows下C++编程,差不多就是学习Windows API。不过IT界,特别是软件开发,主要技术的更替很厉害的说。写本文的家伙,就曾经买过两个版本的《Borland C++ Bible》;结果很快没用了(因为我赶了个DOS 编程的末朝)。后来是买了两个版本的《Windows API 大全》,还好,Windows API 用的时间长了点,鼎盛期算算有6,7年,但众所周知,B/S结构的应用开始大行其是,客户端有一个C++写成的浏览器(NS,IE,FF)就通吃天下了——可这世界暂时轮不到我们自己写浏览器啊:(。C++程序开始慢慢地倾向后台服务开发,并因此而将原来多数C++“应用级软件”程序员所无须考虑的,跨平台的重要性出来了。至于GUI变成不重要了,所以虽然我是过来人,但我个人认为单纯为学习GUI编程而投入:(1)单一平台、(2)闭源、(3)有被.net封装掉的巨大可能,(4)学习周期非常之长……的Windows GUI编程,这不是不合算,而是相当的不合算。我个人建议是直接先学习跨平台的QT或wxWidgets;然后当有特定需要时,再学习平台相关的内容,比如Windows或Linux下的特定API,会更符合当前的C++发展潮流。(广告时间:《白话C++》书就是按这个思路编排)。此时,SDK文档,可以改成是特定的库的类库手册。
对应的技术,比如网络啊线程啊,单纯学习windows自家的函数,也有点点不足,linux下如何完现“I/O Completion Ports”,它的线程和windows有何不同?等等。但整个过程,让我建议,我还是觉得首要学习是跨平台的库,线程比如boost.Thread,而网络框架,可以先学习boost.Asio,真要做大框架时,特别是需要跨平台时(比如想上AIX),那就是ACE了。
还有嵌入式编程,现在平台很多,也有C++的阵脚所在(我个人在这方面,出于私利,是先回归c,然后直接投奔java及C#阵营,就不好意思扯了……但C++在这方面绝对有潜力……)。
2.2 上国外blog,bbs,订阅mail list,牛人主页,
第一时间看到C语言大牛人,Linux之父和MS的某位C++开发中等牛人的吵嘴,是很爽的,是不是?(如果你回答不是,那我惊讶你会看我的文章看到这么后面)。除了苦读API之外,这时上Google Groups编程相关尤其是C++论坛上看贴回贴,是一件有助于编程水平提高的事,一件有助于英语水平提高的事,一件有助于生活水平提高的事……。当然,严重建议不要仅限google groups。C++的大牛们的blog,一个也不要落下。也不能只关心名人,如果学习wxWidgets,那就偶尔去看看它的blog啊(因为它更新得慢)。知道“大嘴Joel”吗? 中文书可以买,但网站“Joel on software”,更值得去看。
几位C++大拿的英文网站:C++ 之父 (更新不多,但值得多看细看)、Scott Meyers、其他几位牛人,可以从Scott Meyers的这篇文章找到介绍及链接。
三、第4、5年
以我的水平,敢向大家安排4,5年后的事,实在是贻笑大方。所以这一段,我只建议大家把一些经典的C++英文原著,留在此处阅读。比如 《The Design and Evolution of C++ 》放在枕头边时时阅读。泛型方面也需要进阶,《C++ Template》可以考虑买原版来读,这方面的书这些年国外出了不少,不多说也。放最后要说的,是C++的标准文档,这时候可以去看了。今年是09年,C++的新标,估计要跳票了,我现在看的是tr1的细节,但等各位的4年之后,它就是C++0x标准了。
C++语言经过“通吃一切”的狂热时代,又经历了若干年的低潮期,但它没有死掉,相反有了更为明确和不可代替的定位。而语言本身,也马上要迎来一个新的标准,其学习资料,比如书的发行高峰,必然会紧随而来。但出于很自然的原因,网文也好,书也好,第一手资料通常还是来自国外,所以,做好准备,将C++编程学习与英语水平同时提高,并且互相促进,是很需要的,是有意义的。
@最重要的交待@
有人问:那我不专门去学英语了,我就学C++吧,完了之后,英语与C++语言同时到手,程序员也不一定当了,我出国去赚生活了。停!本文从头到尾都是在讲如何掌握为编程而掌握阅读相关英文资料的能力。想通过这样来成为英语高人???想通过这种方法来掌握英语泡外国妞???绝对是做梦噢。