天天看点

程序员如何学好英语

作为天天和计算机打交道的职业,程序员这个职业天生需要和英语打交道——我们常用的编程语言都是使用基于英文的编码,但是作为中国程序员是否大家的英语都很好呢?其实不然。

程序员为何要学好英语

关于程序员为何要学好英语,似乎是一个悖论,在国内有大把的(优秀)程序员英语水平不是很好,为何一定要学习英语呢?

抛开旅游看美剧等文化素养上的需求不谈,但从程序员自身的工作需要上来说:

首先,我们不得不承认,大部分的计算机类技术文献,文档都是由欧美(特别是美国)的计算机从业人员用英语编写的,这其中有一部分被翻译成中文,但是无论是翻译的质量,还是时效性都远远跟不上英文材料的总量和增长速度。在国内我们已经有博客园、CSDN等这样的中文技术论坛、平台,可以搜到大量的资料,但是一旦真正自己涉足到一个较深或不是那么热门的领域,中文的资料会非常的少。

以前有一句笑话是Software Engineer = StackOverflow程序员,说的是程序员”独立“写不出代码,需要去Google或者***上搜索代码复制粘贴的行为。然而事实上对于初级程序员,大部分确实需要经历这样的过程。懂得搜什么,如何搜,也是程序员的一种能力。我以前很多时候都回去搜中文的问题,比如”CSS如何实现Div居中对齐“,这样可以得到很多CSDN等论坛的答案,但是随钻研的领域越来越深、广,终有一天发现自己搜索的问题已经找不到中文答案了,便很自然的切换到用英文去搜索,从此便打开了新的知识宝库。

其次,英语是一种交流的工具,如果你在一家外企公司,那么你的代码不仅会被中国同事看,也有可能会被外国同事看到,而作为程序员之间交流的主要手段——注释和文档,则不可避免的将使用英文为主要语言。即使公司里没有非中文母语的同事,如果项目开源,或者提供SDK,那么也有很大的概率需要“走出国门”。那么在给别人看的时候,你的代码水平和英文水平一样重要,代码中的变量,函数命名是否遵守英文语言习惯,注释是否清晰易懂,都将会影响别人对这个工程的总体感观。

往大方向说,我相信中国的计算机技术是越来越好,会成为领先世界的水平。我们现在的软件生态还是离不开国外的技术产品,将来再过10年,20年,可能(我希望)情况会反过来。为了让别人用上我们的东西,并且让他们离不开我们,那么我们自己创造出来的“好东西”不仅我们孤芳自赏,也要推荐给全世界的同行用,要让他们用的顺手,要他们帮我们扩散。这离不开每个程序员的努力,让自己工作的成果国际化。

我的学英语经历

在我上学的时候,英语课是从初一开始学。我一直觉的自己的英语成绩还可以,高考时英语也得到了140+以上的分数。进入大学后开始学习各种基础课和专业课,英语课也就成了可有可无的课程。大一大二时乘着高中的老本还没有忘光,将四六级都考了,每次都是低空飞过。

第一次感到自己的英语不够用是在上专业课时,用到影印版的教材,上面都是密密麻麻的英文,高中的那点可怜的词汇量根本就派不上用场,幸好老师准备了中文版本的笔记。但是因为教材本身就是国外大学编写的, 中文版的讲义确实有不详尽的地方。可惜当年自己的惰性太大,对于这样的课程只想快点理解笑话,好应付作业和考试,没有去生啃那些原版的教材。同班的很多同学从大一便朝着出国留学的方向努力,开始啃“红宝书”,我感觉他们在看英文教材上就有很大的优势,往往该门课上得到的分数也越高。

2009年开始研究Android编程,以当时Android资料的稀缺性,能够参考的只有官方的文档,于是我便开启了生啃英文文档的过程,初读英文文档的时候觉得比较伤脑,好在自己有强烈的学习Android编程的动力,能够坚持下来。感谢当年国外网站在国内还没有被普遍屏蔽,那几年靠着Google和***解决了不少编程上的问题,也培养了自己遇到问题去查英文的习惯。

研究生的时候我第一次面试美国公司的实习生职位,对面的面试官问了我一个基本的问题:面向对象(OOP)的三大特性是什么?这个问题我作为学生当然知道——封装、 继承、 多态,但是当时的我光顾着算法方面的准备,对于这样的基本概念却傻眼了。我涨红了脸,只能用稚嫩的句子去解释对这三个特性的理解,好在接下来的面试面试官可能意识到我的英语表达水平有限,也没有过多的询问这种知识类的问题。在美国公司实习的一年多间,平均一星期会有一次和美国同事的视频会议,虽然当时的英文表达能力还是很菜,但是培养了我写英文邮件的能力,以及敢于开口说英文的能力。

2012年出国工作后去了日本工作,开始学日语。其实我在大学里上了三个学期的二外日语,在出国之前也通过了N1的考试,没想到到了日本之后,遇到的最大日语理解障碍的是竟然英语。因为日语和汉语共同的部分我已经可以连蒙带猜的理解,但是日语中有很多从英文直接“拿”过来的词语,特别是现代出现的事物,几乎都都是直接拿来。在生活中,菜店里的进口蔬菜,甜品店里的点心,医院开出的处方药,到处都充斥着英文词汇。我的很多英文词汇,还是在学习日语的过程中补充的。

2014年跳槽到美国公司之后,办公室里的官方语言是英文,于是开启了不得不说英语的模式。刚开始到组里的时候说英语还是用的脑内翻译汉语的思路,在脑内实时翻译中文的句子,这样说出来的英语口语是结结巴巴的,而且经常有中文概念不知道如何表达,只能采用定语从句(Which is blablabla...)来描述,有时候需要半天才能把自己的想法解释清楚。好在同事比较nice,不会因为我的英语说的不流畅就拒绝交流,他们会尝试理解我的意思之后用正确的表达方式重复一遍,求证是否是我要表达的意思,于是我就会去一点点的模仿别人的英语,如果同事的表达我觉的比较简明易懂,下次我在同样的场景就会和他说一样的句子。渐渐的,我的脑子中不会再出现中文再翻译英语的过程,而是有什么想法就直接蹦出来对应的英语语句。拿算法来对比的话,就是在脑海里已经维护了一个自己的意图(Intent)到英语语句框架(Fragment)的map,使用O(1)的复杂度就可以将这个框架提取出来并填词。

直到现在,我也不敢说自己的英语能力有多好,我可以看懂英文资料,可以正常的用英文和同事交流,但我会经常单复数不分,会用错单词,也会犯低级的语法错误。但是我不会觉得在一堆老外中插不上话,可以很自信的去和他们交流自己的观点。

我的经历可能对大家没有太多的参考价值,毕竟有全英文的工作环境是一个很大的助力,下面我想分享一下我自认为的即使在没有英文环境的情况下也可以提高自身英文能力的方法。

程序员如何提高英语能力

我们将英语能力分为听说读写四方面,如果一般不在外企工作的话可能听和说的能力不太长用到,那么我们就谈谈读和写的能力。

读英语的能力

程序员在读英文文档中的最大的问题是专业词汇的问题。说道专业词汇,不得不说中国在本土化上做的比较好,国内计算机专业的课本几乎可以做到0英文。所有英语的概念,都有对应的中文概念翻译。这在翻译层次上来说是一个进步,至少不会像日本那样在本国的语言中引入大量的外来词汇,但是带来的问题就是大家对于计算机领域中的概念所对应的英文完全不敏感。

所以我的建议是,在接触一种新的技术、框架的时候,先不要搜索《XXX入门宝典》,《学习XXX看这一篇就够了》这样的总结性文章,而是先去项目的官方网站/Github主页看看对应的文档。读文档学英语的好处是你不是为了学而学,是确实在工作上有需要去学习,这样降低了学习的成本。

一开始读英文文档确实会比较头蒙,但好在现在的翻译软件比较发达,屏幕取词,划词翻译等这些方便的功能可以很便利的提供所选词汇的意思。一般一种技术的文档,读过几篇之后就基本上没有什么障碍了,因为最核心的概念词语就那么几个,看完几篇之后就可以融汇贯通了。其实计算机专业的词汇真的不算特别多,读完几个项目的文档之后你会发现共通的词汇越来越多,读起来也越来越轻松。

对于刚开始看英文文档的程序员,个人建议一开始可以从比较小的项目看起,比如用到的某个linux命令的用法,某个小开源插件的用法,等到读文档的能力提升了,再去看看大型项目的文档。读文档不是为了读而读,结合工作上的需要,能够引起自己读的动力最好。

写英语的能力

作为程序员,我们平常的工作中少不了也写代码,在写代码的过程中,实际上我们也不可避免的要书写英文。程序员虽然不一定需要达到能够写大篇的英文议论文的程度,但是拥有能够使用英语正确的向其他程序员表达自己思想的能力还是很重要的。具体一点来说,有以下几点值得我们去锻炼。

1. 代码中的变量,函数,类的名字是否清晰易懂,翻译是否做到“信达雅”。在国内的程序员有时限于自己的英语词汇量,使用拼音来取名,有时看的会觉得莞尔一笑。有时程序员做到了英文命名但是用的词却不得当,比如之前有个虾米程序员在代码中歧视活动VIP用户的例子,就是一个活生生的英语没有做到“信达雅”的反面教材。做活动送的VIP用户可以翻译成EventVIP或者是PromotionVIP、CampaignVIP,Event是字面的活动意思,但是这里的VIP是指代在促销(Promotion)活动中免费送出的VIP,所以从语义上说更加贴近Promotion,而在国外这类促销活动俗称为Campaign,所以个人觉得最好的翻译应该是CampaignVIP。其实取名方法并不难,开源的代码很多,开源代码中和自己项目有类似的概念的地方,都可以借鉴过来。

2. 代码中的注释是否语句通顺。一开始写代码注释时不可避免的会写一些语法上比较幼稚的语句,错词、单复数不分、时态错误甚至病句的情况也并不少见。如何改善这样的情况呢?我个人有几点体会:

a. 照葫芦画瓢法。如果该项目中的其他代码已经有比较好的风格的注释,可以把别人写的句子抄过来,再将意思稍微改动一下。

b. 搜索引擎纠错法。在不得不自己“原创”注释的时候,如果自己没有十分的把握,觉的句子写的不是很地道,那么不妨把自己写下来的草稿拿去原味Google一番,一般这样你会在网上搜到意思相近的句子。这样的方法特别适合纠正一些副词使用的错误,比如in,on,at等等。

3. 为项目写Readme。Reame就是一个项目的门面,写好Readme的话会为项目的专业性增色不少,尤其是有项目有开源需求的时候。这里我建议可以去借鉴一下其他开源项目的Readme。Readme其实也是有“八股”的,参照别人的Readme形式为自己项目的Readme打好结构稿,然后逐条替换。长久之后可以形成自己的风格,写起来就越来越顺手。

总结

总结起来,我自己总结程序员学好英语的两个关键就是多读英文文档和模仿别人的英语,这和我们学习编程的方法其实是差不多的——读代码和模仿代码。