前言
作为在中国工作的程序员,不懂得英语似乎也不妨碍找到好工作,升职加薪。但程序员这个工种则稍有不同,因为程序,尤其是高级语言,基本上都是由英语和数字表达式构成的。英语对于程序员十分重要。
为什么要学习英语
学好英语你可以直接阅读各种经典书籍的原文版。程序员这个行业之所以特殊,就是因为它所有的技术全部来自欧美,所以最主流,最新鲜,最正确的技术文章都是英文,大部分还没有译本,有些译文还比较差。与其等待别人的翻译,不如直接阅读原文。
学好英语你可以直接观看来自世界最著名学校的网上课程或编程高手的教学视频。较之汉语教学视频,不知道高到哪里去了,而这些视频通常都没有任何翻译可寻。
学好英语你可以和世界各地的程序员在Stackoverflow,Reddit和Github进行交流,以码会友。如果你不小心搭上了几个哥们,你可能就误打误撞被他们推荐出国工作了。作为工作多年的老鸟,大家自然知道内推的好使程度,要是拿到了公司的录取,那么什么签证都是浮云。
学好英语,你的代码中变量的命名不会太差,让人摸不着头脑(甚至有人变量使用汉语拼音进行命名)。假设别人写一个方法演示反射的使用,你看到那方法名不是ReflectionDemo,甚至不是ShowReflection,而是FanSheYanShi时,你什么心情?
什么水平算是英语比较好了,可以不用刻意继续学了
如果你觉得你满足以下这些条件,那我觉得你在英语为母语的国家也可以活得挺滋润的,找到一个码农的工作应该是没什么问题。当然,医院,街头篮球场,酒吧这种需要高难度英语对话的地方。不过如果仅仅应付工作,你不需要刻意的提高自己的英语水平了,只需要保持即可。
裸考(故意不准备)托福+,雅思7+,口语的成绩不是其中最低的词汇量达到以上能够应付30分钟左右的全英文面试,且你在面试过程中说话的比例占至少三分之一,而不是人家说20句你说一句阅读一般的技术文章(例如MSDN文档)和技术书籍没有太大障碍,具体来说,生词频率在1/之下(即任选文章中的个连续单词,平均只有一个不认识)可以使用英文email和公司的外国人交流可以和老外聊些简单家常或你比较熟悉的话题,支撑至少15分钟
程序员怎么提高英语阅读水平?
其实学英语和其他技能没什么太大区别,无论是你想在英语阅读、口语或写作方面提升自己,都需要进行长期的不间断的练习,坚持一段时间后(时间长短根据你自己的效率、每天用时、频率都有关系),你会发现自己的水平自然就提升了。举个例子,现在写博客似乎是最难坚持的,但是如果你每个月都能写一篇略有价值文章的话,5年就会有60篇高质量的博客,你几乎都能集结出书了。最简单的坚持,最后的结果都是惊人的。但很多人往往每年只能写1篇,或者干脆一放就几年过去了。所以你知道,成事的人总是少数的。
作为程序员,英语阅读能力是最基本的要求,相对口语和写作来说也是最容易达到的,因为计算机类图书的那些常用单词就那么多,多读几本英语类技术图书,想不认识都难。
一个相对容易坚持的办法就是,找一本和当前工作相关的、急需的技术图书,每天拿出一小时阅读,不认识的单词,如果不影响阅读可以不查词典。如果某个单词多次出现,那么就该查下词典并计入生词本。如果你能坚持查阅英英词典,那么提高就会更快了。
每天坚持一小时,这本书读完,你就会发现自己的阅读能力提高了一大截。
这样看来提高阅读能力似乎很简单,但是,问题的关键是,你能否坚持下来,尤其是阅读初期,你只能看懂20%,需要不停的查字典,单词记了又忘,几个星期过去了,进展依然缓慢。这时候最容易放弃,你会痛苦的怀疑自己,我究竟是不是这块料。
毕竟人类的大脑都是倾向于舒适和懒惰的,谁都知道花一个或几个小时看看美剧或刷刷微博,是容易的,嗨皮的,时间在感知上也是,刷一下就过去了。学英语、学一门新的编程语言、写博客是痛苦的,有时候你甚至会有意识的去避免开始这件事情,先干点这个,再干点那个,熬到最后,发现没时间了,再拿起书来读一会,困了,今天先睡吧。就这样,一天天很快过去了,你发现自己似乎每天都在坚持,但依然没效果。但事实是,你既没坚持,也没效率。
所以,提高英语阅读能力这事,和学其他的技能区别不大,而且是相对容易的,比提高英语口语和写作能力容易多了。如果程序员缺乏英语阅读能力,这将是你非常大的一块短板,如果意识到了,尽早补上。
另外说一点,英语翻译对提升英语阅读有一定的帮助,但这个要求比较高,必须要查字典,遣词造句,力求原汁原味的表达作者的意图。并不是提升阅读能力的捷径。
最后说一句,00小时的练习时间,真不是盖的!
杂项
这里包含一些简短的问题,如果你有疑问也可以留言,我会把答案添加到这里。
是否一定需要阅读原版?
除非你阅读原版书籍和中文书籍一样顺畅,或者翻译书籍信息损失量太大,否则不需要刻意阅读原版。
开发者需要多少单词量?
没有标准答案。作为开发者,大词汇量不是必需,但一定要把词用对——尤其是动词。
以方法/函数名中经常出现的get为例:我们需要知道何时应该使用get,以及何时使用fetch、build、retrieve、