程序员英语学习指引
作者:Lucida
- 微博:@peng_gong
- 豆瓣:@figure9
原文链接:http://zh.lucida.me/blog/english-for-programmers/
本文谢绝转载,如需转载需征得作者本人同意,谢谢。
概要
这篇文章面向程序员,简要的介绍了一些学习计算机专业英语的步骤和经验。
关于
之前不少人曾站内我如何学习英语,我也曾试图写一篇如何学习英语的博文,但我现在的实力着实无法写出令人信服的文章:
- 尽管阅读、写作和听力还可以,但口语很差——我指的是日常用语,即便出国一年,现在我和同事交流时仍然磕磕巴巴,不知道用什么词的情况经常出现;
- 尽管读过大量外文资料,但它们绝大多是计算机专业书籍和论文,并不适用于通用的英语学习,也不适用于其它专业。
所以这篇文章并不是一篇通用的(General)英语学习教程——而是一篇面向国内开发者的计算机专业(为了简便,接下来的“专业”均指“计算机专业”)英语学习指引,本文集中于如下问题:
此外,我把简短的问答放在杂项之中,以便阅读 😃
为什么要学习英语?
这个问题很多人问过,也有很多人回答过,此外如果你在阅读这篇文章那么你应该已经意识到了学习英语的重要性。所以我不打算花太多篇幅在它上面,这里简略的总结下学习英语的好处:
- 更多的高质量学习资源:首先,绝大多数高质量的计算机学习资源(书籍、论文、博文和视频等)都是英文;其次,高质量的中文计算机学习资源几乎为零;
- 无需忍受翻译带来的问题:
- 信息损耗:任何知识从一种语言翻译到另一种语言一定会有信息损耗,更何况是英文和中文这两种差别巨大的语言;
- 时效损耗:翻译需要时间,如果你读的是翻译版那么你已经至少落后了半年;
- 翻译损耗:国内的计算机书籍翻译水平参差不齐,你需要拼人品;
- 编写更好的代码:良好的英语水平是编写可读(Readable)代码的前提;
- FQ:相对于其它专业,计算机专业出国工作要容易很多,但前提是你的英语要说的过去。
如何从零开始阅读专业英文书籍?
注意这里的零基础指的是专业英文书籍阅读零基础——而不是英语零基础,英语零基础就没啥好说的了 -_-#
刚开始阅读专业英文书籍时要记住一点:你的目标是提升计算机专业词汇量,而不是学习计算机专业知识。所以你要阅读的是计算机“通俗”读物或“科普”读物,我的计算机英文入门书籍是计算机文化(New Perspectives on Computer Concepts),这本书每年一版,现在已经出到第15版:
这本书的好处在于它极其浅显易懂,并且包含大量计算机专业领域名词,所以读者可以专注于提升计算机专业词汇量,而不是一边查单词一边学新技术——同时搞两件事是很困难的。
顺便提一下那篇老码农教你学英语和那个老码农推荐的书目,姑且不论他把Mythical Man-month拼写成Man Month Myth,我非常惊讶他居然称人月神话原版为白话书并且推荐初学者阅读,直到看到这里:
这句“另外两本也很不错,我很久以前看的翻译版,一直也想找原版的来看看,可惜总是没空,这次你们就算替我看了吧”着实让我很无语,没看过的书也可以随便推荐么 -_-# 难怪那么多人推荐计算机程序设计艺术呢。
我在读研时从头至尾阅读了Frederick Brooks的人月神话以及他的几篇论文(No Silver Bullets和the Computer Scientist as Toolsmith),所以对Brooks的文风有一定了解——Brooks绝对是一位多才多艺的计算机科学大师——他的文字不仅涉及到计算机,还涉及到管理、人文、艺术、建筑和神学等学科。读他的书和文章,我查单词直接查到手抽,推荐初学者读这种书,你是要玩死初学者么 -_-#
如何提升专业英语阅读能力?
阅读New Perspectives on Computer Concepts之后,你应该掌握了大量的计算机专业英文词汇,这时你可以尝试阅读一些语言浅显但主题相对深入的计算机科学基础书籍,个人力荐Brian Kernighan和Andrew S Tanenbaum的作品,他们的著作不但本本经典,而且语言朴实:
- C程序设计语言(英文版)(第2版):不但是C语言的神作,而且为编程语言书籍的编写树立了新的标杆;
- UNIX编程环境(英文版):覆盖了Unix的设计思想,简洁易懂的Unix入门手册;
- The Practice of Programming:两位Unix大师(Rob Pike和Brian Kernighan)近三十年的编程经验尽在此书之中;
- 算法(英文版)(第4版):数据结构与算法入门;
- 现代操作系统(英文版第3版):全面的操作系统概论;
- 计算机网络(英文版 第5版):全面的计算机网络概论。
这些书读完之后,你应该可以做到脱离字典阅读绝大多数的计算机书籍——是的,可能还会有一些生词,但不会影响阅读。
除了读书,阅读专业博客也是非常好的提升专业英语水平的途径。个人推荐下面几个网站:
- Hacker News:大量的技术资讯和博文;
- Reddit:非常的聚合站点,我一般去下面几个频道(subreddit)
- /programming:聚合了大量的优秀程序设计博文(其实不少国内技术站点就是搬运它的内容);
- /java:大量的Java技术博文,质量不如/programming,但也还说的过去;
- /shittyprogramming:悠闲时的去处,不少段子来自这里;
- Medium:大量的高质量文章;
- Quora:大量的高质量问答,有不少中国人在上面练习英语;
如何提升英语写作能力?
程序员学习英语不是为了写小说——而主要是如下场景:
- 编写设计文档(Design Document);
- 收发邮件,进行交流;
- 开发程序中的命名、注释等描述性内容。
1和2需要Nonfiction Writing——言简意赅,层次分明。这方面的写作书籍我推荐:
the Elements Of Style(这本书我应该推荐了无数次 -_-#
此外少不了中式英语之鉴,中式英语说说还成,写到纸面上就丢大发了。
关于3的书籍很多,我个人推荐Code Complete中关于命名(Naming)的一章,章名好像是Power of Variable Names;以及Effective Java的Item44——如何编写代码注释及文档。
如何提升听力?
阅读量达到一定程度听力也不会差,个人推荐Channel 9、Google Tech Talk和Coursera,多看多听,此外务必不要中文字幕。
杂项
这里包含一些简短的问题,如果你有疑问也可以留言,我会把答案添加到这里。
是否一定需要阅读原版?
除非你阅读原版书籍和中文书籍一样顺畅,或者翻译书籍信息损失量太大,否则不需要刻意阅读原版。
开发者需要多少单词量?
没有标准答案。作为开发者,大词汇量不是必需,但一定要把词用对——尤其是动词。
以方法/函数名中经常出现的get
为例:我们需要知道何时应该使用get
,以及何时使用fetch
、build
、retrieve
、compute
、calculate
和receive
这些get
的同类词汇。
有没有好用的词典?
目前我还没有发现一个好用的词典应用,所以依然在使用6年前的CASIO V2800H电子辞典。(略土 -_-#
以上。
作者:Lucida
- 微博:@peng_gong
- 豆瓣:@figure9
原文链接:http://zh.lucida.me/blog/english-for-programmers/
本文谢绝转载,如需转载需征得作者本人同意,谢谢。