程序员如何阅读英文文档

为什么要看英文文档?

在回答怎么做之前,我想说说为什么要这么做。在我们学习新技术的过程中不是有中文文档吗?既然有中文文档,为什么还要去学习阅读英文文档呢,这不是多此一举吗?

我想说的是,这绝对不算多此一举。很多的英文文档虽然有对应翻译的中文文档。但是很多东西的翻译质量是不敢恭维的。就拿一个最常见的书来讲吧,《think in java》就算一本大家公认的好书。但是如果你拿着本书的中文译本去看,绝对让你摸不着头脑。因为这本书是英语专业的人去翻译的。他不懂什么是面向对象,什么是类,什么是继承。所以翻译这样的技术书籍,如果没有一定的知识背景是翻译不出来味道的。而又因为翻译出来的东西,已经丢失了源信息,所以纵使你的中文再如何牛逼,也不能读出书本原来的准确的意思来。

当然,翻译质量只是一方面,另外一方面是对于新的技术,可以第一时间学习到。而且对于一些冷门的知识也不会有人会有精力翻译过来。所以这里的潜规则是:如果这个知识被翻译了过来,那么也就说明这个知识的含金量大大降低了。这也是因为学习门槛低了,学习成本低了。

谈经验。

我想说说我在英语阅读方面的经验。

在高中读书的时候,我是那种死记硬背型的,在高三的时候就及格了两三次,但高考却打了115分(150满分)。我想这完全是靠我的单词量,和做题量给拼上来的。在语法方面,我真是一窍不通。如果说会一点的话,那么就是那几个固定的语法公式。然后来到大学之后,单词就忘得差不多了,看阅读也没有了感觉。

但是我们程序员必须要看英文文档啊。没办法,只好硬着头皮读了起来。当时我的反应是这样的:

  1. 大量的生词不认识。
  2. 只能读懂短句,读不懂长句。
  3. 碰到没有生词的文章,也感觉读不懂。
  4. 看到3分钟就产生了厌恶情绪,头晕。

这是一个英语不好的人看英文文档的正常反应,就跟高原反应一样。如果你英语又不好,但是看着英语文档却无比的兴奋和激动,那就是有一点不正常了。我有好几次都看着看着就就把英文文档给关掉了。但是,没有办法啊,关掉了就没有了信息的来源,想要解决的问题还是存在,于是又去看。每次都处于这种纠结之中。于是为了像看中文一样去看英文,我找了下面的方法来克服上面的我那些“正常反应”。

阅读方法。

语法:

以我的看法,语法是不用太去关心的。你不用去分辨这是定语从句,还是同位语从句,你不需要去考虑这里的是用that,还是用which,同时如果是阅读技术文档,我们也很少要去观察时态的问题。我们的目的是读懂文章,而不是去做题目,只要读懂就可以了。但是我这里的意思并不是所有的语法都可以不要懂。我认为,最基础的你必须能读懂of,和从句。因为这是英语文章里常用的套路。

你也许会觉得奇怪,为什么要读懂of?对于英语基础不好的人来说,不知道of怎么读。找of的例子。这里的语序是和中文不一样的,如果你连of都读不懂,那么就千万别去读英文文档了。

另外,从句也是非常重要的。那种只读的懂长句,却读不懂短句的人大多都是不会阅读从句的人。因为大部分的长句子里都是包含从句的。

Thus, you can add a subtype of Apple to a container that is specified to hold Apple objects.

读英语还有一个非常重要的点,我们不要去把它翻译成为中文。不知道大家有没有这样的习惯,读一个句子,首先会在心里翻译成中文,再去理解中文的意思。听过一个译者说过,读一篇英语文章只要几分钟,但是翻译一篇文章需要几十分钟,甚至更长。这说明翻译远远比理解更加费力气!我们不是翻译家,要给出版社翻译文章。我们的目的仅仅是读懂这篇文章就行了。这样的阅读效率更高。所以,你不应该逐词翻译,而应该是直接理解他的意思。比如说:

it deletes the entry associated with the key specified as an index.

翻译成中文:他将删除与索引指定的key相关的一个条目。

在大脑中的理解:它将删除一个条目,这个条目与key联系,key又由index来指定。
我们不需要去经过“翻译成中文”这个步骤,直接就在大脑中理解意思就行了。我们的目的是理解,而不是翻译!

词汇:

词汇是最基础,也是最重要的一关。对我们程序员来说,却不是什么大难题。因为我们看文档多少是在电子设备上看。所以在绝大多数情况下,我们是可以用电子词典的。当你遇到生词时,随便点两下就可以出来意思了(在电子词典方面我推荐使用有道词典,里面的例句功能、记单词功能、和专业词汇功能非常好用)。但是,千万要注意了,有电子词典并不是意味着你就可以不用记单词了。工具永远工具,不会变成能力。为了阅读效率,和阅读平台“可移植性”,我们必须还是要用脑袋去记单词。这是必须的!!!!

1. “最可怕的不是不知道,而是不知道自己不知道”

这句话同样可以应用在词汇当中。例如:

When you use lists, it is illegal to assign to an offset that is off the end of the list.

如果你以为你知道off是“关闭”、“脱落”、“走开”、“切断”的意思,而且以为他只有这么些个意思。那么你就死定了!你永远翻译不出这句话的真正的含义。这就是你“不知道你自己不知道”!如果你始终抱着我不可能不知道它(off)的全部意思的话,进一步查证,你可以找到off还有一个不常用的意思“远离的”。这整句话的意思是:

当你使用List时,将一个值分配给超出list长度的下标是非法的。

在这里我想说的是:对于一些词汇,特别是常用词汇,千万不要理所当然的认为它就只有那个意思,而不去考虑其他情况。

2. 联系上下文

但是有些情况下,将单词的所有意思都查出来了,但还是不太理解这个单词在句子中的含义。这时候该怎么办呢?如果真的查了所有的意思,但是还是不够理解,那么我建议你继续读下去,先放着这个单词不管。比如说,我阅读《Learning Python》时在讲String碰到了一个单词“in-place”。

Every string operation is defined to produce a new string as its result, because strings are immutable in Python. they cannot be changed in-place after they are created.

我看查了“in-place”的所有意思(“就地”、“原状”、“在位”),但我就是不太理解。于是我丢下它继续往下面看。看到了list的时候,发现了这句话

Because lists are mutable,most list methods also change the list object in-place, instead of creating a new one.

在这句话里,有一个关键点提醒了我“而不是创建一个新的”。顿时我就知道了in-place的意思就是修改后,不会返回一个新的对象,而是在原有的对象上进行修改。

通过这个例子,我想大家都明白了,遇到问题我们也不要死扛着,该放就放。

如何去记单词

无论你用何种方法,无论你用的方法是多么的简单有效,无论你是有多么聪明,记单词都是需要毅力的!我说的方法也是需要毅力的。如果你没有毅力,你看你这篇文章也是没有用的。所以,请充满毅力的看完这段文字。

找一个记得单词的软件最好是多平台都支持的。在我们阅读英语文章的时候,会遇到不懂的单词,我们可以将这个单词放到有道的单词本里。而不是像其他记单词的软件,一下就把什么四级啊,六级啊的词汇都放进去。我们只放我们需要记的单词。像那样一下子搞几千个单词太没有目的性了。所以我们的单词本里面的单词都是我们在文章中所遇到的生词,而不是几个千被人指定好的词汇。那么这里就涉及到了一个问题,什么才是我们所需要记单词。我认为符合这两点你就可以将单词添加进入单词本。

  1. 不知道意思,或者很模糊
  2. 出现频率较高

为什么要定这样的规则?因为什么没有必要去记一些我们很少会碰到的单词,如果真的在以后碰见了,查一下字典就行了。但是对于高频词汇,我们一定要牢牢的记住!

我想如果充分的利用好了这些功能,再加上你的毅力的话,单词的问题很容易就能解决。

对全文的把握

也许有的人会碰到这种情况:这篇文章的单词的意思都懂,每个句子的意思都理解,但是还是不知道整篇文章到底要讲什么。发生这样的事情其实是因为你把每一个句子给孤立了,并没有在意句子之间的联系。这样肯定是把握不了全文的。比如说:

As with lists, assigning to an existing index in a dictionary changes its associated value. Unlike with lists, however, whenever you assign a new dictionary key (one that hasn’t been assigned before) you create a new entry in the dictionary, as was done in the previous example for the key 'brunch'. This doesn’t work for lists because Python considers an offset beyond the end of a list out of bounds and throws an error. (this指代上面那一个不与list相同的事件。)

上文中加粗的关键字都是一个句子链接另一个句子的关键点。而只有把这些链接都串起来,你才可以看懂全文的意思。单独的句子是没有什么意义的。

批判的观点读英语文章。

要注意,国内的环境和国外的环境在底层上来说是差不多的。别人的文章里面的观点可能错的,也可能是对的。不要以为外国人都是大牛。所以在阅读英文文章时,我们还必须带有批判性的思维。不要假定它一定是对的或者说一定是错的。对于自己怀疑的东西,最好的严重方法就是自己去试验!在找Servlet的资料的时候,我总觉得文章的观点不对,但又怕自己理解错误,感觉非常矛盾。

The init method is designed to be called only once. It is called when the servlet is first created, and not called again for each user request. So, it is used for one-time initializations, just as with the init method of applets.

我觉得init方法是针对整个服务器而不是针对每一个单独的Servlet。于是我就去写代码测试,很容易检测我们的理解是否正确(当然是这个例子中是正确)。做完实验之后,再去看这段英文,就恍然大悟了。

如何利用google来搜索答案。

如果有问题就问google吧,而且要用英文问。因为在国外的资料实在是比国内的多太多了。在这里我提供几个问问题的方法:

  • How to ....

例如:How to remove a property from a javascript object.

  • What is...

例如:What is the Servlet?

  • What’s the difference between .... and ...

例如:What’s the differences between HashMap and Hashtable?

  • Why is...

例如:Why is java so fast?