【转】程序员英语学习指引

转自互联网

=============

作者:Lucida

原文链接:http://lucida.me/blog/english-for-programmers/

概要

这篇文章面向程序员,简要的介绍了一些学习计算机专业英语的步骤和经验。

关于

之前不少人曾站内我如何学习英语,我也曾试图写一篇如何学习英语的博文,但我现在的实力着实无法写出令人信服的文章:

  1. 尽管阅读、写作和听力还可以,但口语很差——我指的是日常用语,即便出国一年,现在我和同事交流时仍然磕磕巴巴,不知道用什么词的情况经常出现;
  2. 尽管读过大量外文资料,但它们绝大多是计算机专业书籍和论文,并不适用于通用的英语学习,也不适用于其它专业。

所以这篇文章并不是一篇通用的(General)英语学习教程——而是一篇面向国内开发者的计算机专业(为了简便,接下来的“专业”均指“计算机专业”)英语学习指引,本文集中于如下问题:

此外,我把简短的问答放在杂项之中,以便阅读 :–)

为什么要学习英语?

这个问题很多人问过,也有很多人回答过,此外如果你在阅读这篇文章那么你应该已经意识到了学习英语的重要性。所以我不打算花太多篇幅在它上面,这里简略的总结下学习英语的好处:

  1. 更多的高质量学习资源:首先,绝大多数高质量的计算机学习资源(书籍、论文、博文和视频等)都是英文;其次,高质量的中文计算机学习资源几乎为零;
  2. 无需忍受翻译带来的问题:编写更好的代码:良好的英语水平是编写可读(Readable)代码的前提;
    1. 信息损耗:任何知识从一种语言翻译到另一种语言一定会有信息损耗,更何况是英文和中文这两种差别巨大的语言;
    2. 时效损耗:翻译需要时间,如果你读的是翻译版那么你已经至少落后了半年;
    3. 翻译损耗:国内的计算机书籍翻译水平参差不齐,你需要拼人品;
  3. 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 KernighanAndrew S Tanenbaum的作品,他们的著作不但本本经典,而且语言朴实:

这些书读完之后,你应该可以做到脱离字典阅读绝大多数的计算机书籍——是的,可能还会有一些生词,但不会影响阅读。

除了读书,阅读专业博客也是非常好的提升专业英语水平的途径。个人推荐下面几个网站:

  • Hacker News:大量的技术资讯和博文;
  • Reddit:非常的聚合站点,我一般去下面几个频道(subreddit)Medium:大量的高质量文章;
    • /programming:聚合了大量的优秀程序设计博文(其实不少国内技术站点就是搬运它的内容);
    • /java:大量的Java技术博文,质量不如/programming,但也还说的过去;
    • /shittyprogramming:悠闲时的去处,不少段子来自这里;
  • Quora:大量的高质量问答,有不少中国人在上面练习英语;

如何提升英语写作能力?

程序员学习英语不是为了写小说——而主要是如下场景:

  1. 编写设计文档(Design Document);
  2. 收发邮件,进行交流;
  3. 开发程序中的命名、注释等描述性内容。

1和2需要Nonfiction Writing——言简意赅,层次分明。这方面的写作书籍我推荐:

the Elements Of Style(这本书我应该推荐了无数次-_–#:既是最畅销的英语写作书籍,也是计算机书籍中引用最多的非计算机书籍。它用极其简练的语言讲述了如何进行严肃精确清楚的英语写作。从这本书中,你不仅可以学到英语写作,更可以学到一种严谨至简的处事态度,而这正是专业开发所必需的。这本书的中译版:风格的要素

On Writing Well是一本详尽的非虚构(Non-Fiction)写作指南,无论你要写地方,技术,商务,运动,艺术,还是自传,你都可以从这本书中找到珍贵的建议,这本书也有中译版:写作法宝:非虚构写作指南(30周年纪念版)

此外也少不了中式英语之鉴,中式英语说说还成,写到纸面上就丢大发了。中式英语之鉴系统的探讨了中式英语以及其成因,然后根据成因对中式英语进行归类,并对每个类别给出了大量的实际案例以及修改建议。如果你想摆脱中式英语,那么这本书是绝好的起点。

关于3的书籍很多,我个人推荐代码大全中关于命名(Naming)的一章,章名好像是变量名字的力量;以及Effective Java的Item44——如何编写代码注释及文档。

如何提升听力?

阅读量达到一定程度听力也不会差,个人推荐Channel 9Google Tech TalkCoursera,多看多听,此外务必不要中文字幕。

杂项

这里包含一些简短的问题,如果你有疑问也可以留言,我会把答案添加到这里。

是否一定需要阅读原版?

除非你阅读原版书籍和中文书籍一样顺畅,或者翻译书籍信息损失量太大,否则不需要刻意阅读原版。

开发者需要多少单词量?

没有标准答案。作为开发者,大词汇量不是必需,但一定要把词用对——尤其是动词。

以方法/函数名中经常出现的get为例:我们需要知道何时应该使用get,以及何时使用fetchbuildretrievecomputecalculatereceive这些get的同类词汇。

有没有好用的词典?

目前我还没有发现一个好用的词典应用,所以依然在使用6年前的CASIO V2800H电子辞典。(略土 –_–#

以上。

作者:Lucida

原文链接:http://lucida.me/blog/english-for-programmers/

Posted by Lucida 2015年 1月 1日  学习读书长篇

时间: 2024-10-06 13:26:41

【转】程序员英语学习指引的相关文章

程序员英语学习指引

原文链接:http://lucida.me/blog/english-for-programmers/ 概要 这篇文章面向程序员,简要的介绍了一些学习计算机专业英语的步骤和经验. 关于 之前不少人曾站内我如何学习英语,我也曾试图写一篇如何学习英语的博文,但我现在的实力着实无法写出令人信服的文章: 尽管阅读.写作和听力还可以,但口语很差——我指的是日常用语,即便出国一年,现在我和同事交流时仍然磕磕巴巴,不知道用什么词的情况经常出现: 尽管读过大量外文资料,但它们绝大多是计算机专业书籍和论文,并不适

zz 游戏程序员的学习之路(中文版)

游戏程序员的学习之路(中文版) Milo Yip · 1 天前 感谢 @楚天阔(tkchu)编写脚本及整理中文译本数据,自动从英文版生成中文版,SVG / PDF 版本中的书籍图片现在链接至豆瓣页面. Github miloyip/game-programmer 检视/下载中文版 SVG / PDF 「真诚赞赏,手留余香」 赞赏 15 人赞赏 程序员游戏开发书籍推荐 分享 举报 977 文章被以下专栏收录 Milo的编程 进入专栏 97 条评论 写下你的评论 trycatch 这是劝退吧...

2020年Java程序员应该学习的10大技术

摘自:https://www.cnblogs.com/hollischuang/p/12170323.html 对于Java开发人员来说,最近几年的时间中,Java生态诞生了很多东西.每6个月更新一次Java版本,以及发布很多流行的框架,如Spring 5.Spring Security 5和Spring Boot 2等,这些都给我们带来了很大的挑战. 在2019年初,我认为Java 10还是比较新的,但是,在我学习完所有Java 10的特性之前,Java 11.Java 12.Java 12

黑马程序员_学习IOS之字典常用的方法

字典是无序的 数组是有序的.字典分为:可变字典和不可变字典  不可变字典对象 NSDictionary * dict = [[NSDictionary alloc]initWithObjectsAndKeys:@"one",@"1",@"two",@"2",@"three",@"3",@"four",@"4", nil]; //value = ke

黑马程序员——C学习总结之数组排序算法实现

发表试试 黑马程序员--C学习总结之数组排序算法实现,布布扣,bubuko.com

黑马程序员_OC学习笔记之Foundation框架集合类

OC--集合类 1.OC集合类包括NSArray,NSSet,NSDictionary都是以面向对象的方式操作数组,而且OC数组不像C语言中的数组只能存放同一种数据类型,它可以存放任意类型的对象,但是不能存放非OC对象类型如基本数据类型int,struct,enum等 2.OC数组是以对象的方式存在,因此在创建的时候需要为创建的对象前面加* 3.NSArray数组一旦创建就决定了是不是可变,而且永远是可变或不可变 4.NSArray数组和子类NSMutableArray的基本操作: 1>使用NS

黑马程序员_OC学习笔记之description方法和sel

OC--description方法 1.Description方法包括类方法和对象方法.(NSObject类所包含) -description(对象方法) 2.使用NSLog和@%输出某个对象时,会调用对象的description方法,并拿到返回值进行输出. +description(类方法) 3.使用NSLog和@%输出某个对象时,会调用类对象的description方法,并拿到返回值进行输出,把整个对象一次性打印出来,打印对象使用%@. 4.使用@%打印对象如(“@%”,P)默认打印输出为<

黑马程序员_OC学习笔记之@property和@synthesize

[objc] view plaincopyprint? <span style="font-size:24px;">#import <Foundation/Foundation.h> @interface Person : NSObject { int _age; int age; int _height; int height; int _weight; int weight; int _money; int money; } @property int ag

[JavaScript] 初中级Javascript程序员必修学习目录

很多人总感觉javascript无法入门,笔者在这里写一下自己的学习过程,以及个人认 为的最佳看书过程,只要各位能按照本人所说步骤走下去,不用很长时间,坚持 个3个月,你的js层级会提高一个档次,无他,唯有努力与坚持,请看: 1. 从头到尾对一遍<<Javascript高级程序设计>>,不懂的地方可以暂时掠过,给自己对javascript有一个大体的印象 2. 认认真真的读完这本书:<<编写可维护的javascript>>,从编码规范,技巧,模式,等各个方面