程序员要如何学英语?
一般来说,程序员可算是英语水平比较好的群体,因为在这个行业,英文资料是最全面、最及时,对英文资料的需求也最迫切的。就我观察,刚入门不久的程序员一般都能查阅英文文档,找到需要的信息。但是另一方面,我也发现,经常阅读英文文档的程序员,英语水平许多时候却不像“经常阅读英文”的样子。所以我在这里列几点自己的学习心得,供大家参考。
第一,既要看代码,也要读文档。
读文档只读代码,是很多程序员的习惯,也是导致程序员虽然读了很多英文资料,英文水平却没有相应提高的原因之一。以前曾在《程序员》上看到介绍阅读技术图书方法的文章,提出过“先代码后文字”的方法,也就是“先看代码,看不明白再看文字”。这种阅读法能极大提高阅读效率,但如果技术图书只看代码就足够,还要文字干什么呢?很多时候,代码只是冰山一角,代码背后的思维和逻辑才是真正的重头戏,只有写成文字才能解释,也只有阅读文字才能理解。
举个例子吧,两段代码都是 x = 5; 看起来没差别,但一段的文字说明是“x should be not more than five”,另一段的文字说明是“x should be no more than five”。不查词典,你能弄清楚两种说法的区别吗——前者是“x必须小于等于5”,后者是“x应当只有5”,光看代码估计很难意识到这些。
近年来,有越来越多的技术人员投身译介活动,这本来是一件好事,但如果平时只看代码,英文阅读能力不过关,反而会造成更多的困扰。经常有希望翻译技术文档的程序员来找我讨论翻译问题,希望了解一些句子应该如何表达。一开始我也认为这是中文表达的问题,但后来逐渐发现,其实更多的问题出在英文阅读上,所以我的回答经常是:你觉得作者这里说的是什么意思?引导对方把原文的意思逐步表达出来,其实这时候,真正的译文已经浮出水面了。
最近的例子来自这句话:
But as with any web-based system, atom-based solutions trade latency for scalability, making atom often inappropriate for very low-latency notifications.
这句话之所以难翻译,问题似乎在于,除去句子的主干,之前有一个 But as…, 之后又有一个 making…。然而我最后发现,对这个句子有疑问的程序员其实根本没搞懂 trade…for…的用法(翻译为“基于 atom 的解决方案需要权衡延迟性和扩展性”),如果明白它是“牺牲 xx 换取 xx”之后,整个句子就相当好理解,也非常容易翻译了:与所有基于 web 的系统一样,基于 atom 的解决方案为追求可扩展性,增大了延迟,所以 atom 往往并不合适用对延迟要求极低的提示。
要避免出现这个问题,首先要做的是改变“只看代码不看文字”的习惯,或者至少要做到“阅读文字之后,能明白它的意思与代码是一致的”;另一个有效的办法是通过阅读纯文字的英文资料来学习某些新的知识(比如关于原理的细致讲解),这个方法我推荐给许多朋友,非常有效。
第二,注意读音。
以前总听人说,中国人学了很多年英语,其实是哑巴英语。不知道现在的情况有多少改观,但就我所见,不少程序员虽然阅读了大量英文资料,也会加入英文的讨论组,也敢开口说,但是还会在读音上出现许多问题。这里说的“读音”其实不是字正腔圆的口音,而是一些术语的读音。
计算机科学的术语来源非常广泛。比如设计模式里,有一种模式叫 Facade,许多人往往直接读作’fəkɑ:d,其实这个词来自法文,正确的读音其实是fə’sɑ:d;再比如“伪”代码的 pseudo,正确的读音是’su:dəʊ,但是我很少遇到能把它读对的程序员,许多人干脆不会发这个音。
也许有人说,这些问题不重要,大家“将错就错”,约定俗成就好了,但事情没有这么简单。以前我参加技术聚会,有位嘉宾(技术高手)把框架名 chameleon(变色龙)读成了’tʃəmiljən,而正确的读音是kə’miljən,因为没有文字资料,许多人听了半天才知道他说的是什么,一些不熟悉 chameleon 的听众更是到结束也没明白。中国人聚会尚且如此,如果有机会参加中外技术交流,读错造成的问题就更大了。
解决这个问题有一个非常好的办法,就是学习美国大学的公开课,耶鲁、斯坦福等学校的计算机系都放出了许多高质量的公开课,国内也有非常好的翻译,学习其中的精品课程,不但能夯实基础,还能顺带学会许多每天都要遇到,但不会或者读错的术语。
第三,锻炼英文表达。
如果你背过单词,大概听到过“被动单词”和“主动单词”的说法,前者是指“看到了能认出来”的单词,后者指“表达时能主动应用”的单词。就我的观察,许多程序员掌握的大多数英语,都属于“被动英语”——看到了能认识,但要表达同样的意思,未必说得出来。
初看起来这样似乎没有问题,可是查阅资料时,不会表达就成了大的障碍。相比中文技术资料世界中“无责任/不负责转贴”泛滥的情况,英文技术资料的质量要高得多,Google 搜索资料的准确性也远高于百度;但是,要能够顺利应用英文资料,需要“主动”输入信息,描述问题,这时候“被动英语”就成了大问题。
我自己多次遇到过这样的情况:即便答案近在咫尺(输入正确的关键词,Google 的第一条结果就是答案),但程序员就是一筹莫展——因为他不知道计算机的“嘟嘟”声是 beep,不知道搜“并发”资料应该用 concurrency,也不知道“死机”是 system halt,“黑屏”是 blank screen,“(登录时)不停跳转”是 infinite loop……
要解决这个问题,最好的办法是在阅读资料时多用心,记住这些说法;另一方面,没事的时候多浏览 stackoverflow 之类的网站,不要因为问题与自己无关而忽略,多留心这些问题到底是什么,注意人家是如何表达的。只有经过这样的锻炼,才能在自己遇到问题时迅速找到可能的解决方案,节省时间。
有人说,以汉语为母语的程序员,学习英语已经是迫不得已,不但要会阅读,还要会读、会表达,真是难上加难。这种说法有一定道理,但是在目前并没有更好的解决方案,学会阅读、认准读音、锻炼表达,确实可以给自己带来好处。长远来看,要改变这种情况,需要中文技术圈的所有人员努力贡献高质量的资料(原创和翻译都可以),如果只是“无责任转贴”,既不亲自验证,也不整理格式,中文技术资料的整体质量只会持续恶化,反向逼迫更多的人把英语学好。
程序员要如何学英语?相关推荐
- 新手程序员要不要学英语?
每天读一篇一线开发者原创好文 作为在中国工作的程序员,不懂得英语似乎也不妨碍找到好工作,升职加薪.但程序员这个工种则稍有不同,因为程序,尤其是高级语言,基本上都是由英语和数字表达式构成的.英语对于程序 ...
- 程序员用新华字典学英语
一直有朋友问我英语是怎么学的,其实我觉得学好英语没有什么好的方法,坚持听说读写,三年之后必有成果.下面说一下我的英语学习经历. 我学习英语的经历刚开始真的很奇葩,因为我用的是新华字典!对的,没有打错, ...
- 程序员也要学英语——介词攻略
目录 介词的原理 1. 实词与虚词 2. 介词的功能 介词的构成形式 1. 简单介词 2. 短语介词 3. 合成介词 4. 分词介词 介词学习的误区 介词学习的诀窍 1. 在介词学习中常遇到的困难 1 ...
- 程序员也要学英语——英语构词法
目录 英语构词法 一.派生 二.合成 三.混合 四.截断 五.缩写 六.转化 总结 简单几分钟掌握基本英语构词法,对背单词有一定增益.文章整理自英语兔视频:英语构词法,希望看完后能加深你对英语单词发展 ...
- 程序员也要学英语——倒装、强调和省略
目录 一.倒装 1. 完全倒装句 1.1 副词在句首的倒装 1.2 介词短语在句首的倒装 1.3 表语在句首的倒装 1.4 There be句型倒装 2. 部分倒装句 3. 形式倒装句 二.强调 1. ...
- 程序员也要学英语——冠词攻略
目录 冠词概念 冠词分类 1. 不定冠词:a/an 1.1 泛指用法 1.2 表示数字"1" 1.3 表示"每" 1.4 主谓一致 1.5 固定表达 2. 定冠 ...
- 【非广告】这是一份专为程序员编写的英语学习指南
转载于机器之心 选自GitHub 作者:于江水 虽然 PHP 是最好的语言,但所有程序员必须学会的只有英语.面对铺天盖地的英文文档和教程,我们能做到的只有以最快的速度学会这门语言了.近日,一名程序员把 ...
- 程序员为什么不能只学好“专业英语”?
文/余晟 在我上大学的时候,除去普通的英语课程,专业课程里还有一门<计算机英语>.当时大家的普遍认为,普通的"英语"是过四六级用的,<计算机英语>才是专业真 ...
- 程序员学英语 英语语法框架 10种词性 9种成分 8种句型
程序员学英语 关于: 这是由星辰写的关于 程序员学英语 的笔记,内容如有错误,请联系邮箱修改:2589857361@qq.com 笔记PDF版本已上传到GitHub.Gitee.CSDN.千寻简博客中 ...
最新文章
- python 生成器笔记
- RuntimeError 之 : CUDA error: device-side assert triggered
- Eureka Client的使用
- Notepad++中用正则表达式匹配中文
- [Leetcode][第63题][JAVA][不同路径2][动态规划][压缩路径]
- dlog()是什么意思 matlab语言,Matlab
- python post cookies_python 之post、get与cookie实战
- Mybatis-语法笔记
- Linux(12.1-12.6)学习笔记
- Java开发工具 IntelliJ IDEA(idea使用教程,手把手教学)内容很全,一篇管够!!!
- Round14—最小生成树
- 每天学习虚幻4(一)
- 第16周收录103起融资,芯片创企为热点丨潜在周波啊
- 解决因cocosStudio发布的csb文件过大导致的加载游戏界面卡的问题
- WebSocket 是什么原理?为什么可以实现持久连接?
- 如何解读测试结果出现负数
- 科研用matlab还是python_科的解释|科的意思|汉典“科”字的基本解释
- C语言初阶(18) | 数组详解
- 2020Android手机专业摄影,这 7 款手机,就是 2020 上半年的拍照巅峰
- c语言之圆的周长、面积、圆球的体积--改良版
热门文章
- python对象的三个属性_Python 对象属性的访问
- JAVA入门级教学之(abstract抽象类)
- 太阳能电池基本特性实验报告_太阳能电池基本特性研究实验报告的数据处理Ini怎么?太阳能电池基 爱问知识人...
- pythonspot_python-Spotipy-列表索引超出范围
- 多线程百度网盘爬虫Python完整源码
- android+内存清理+代码,最新版本:Android一键式清理,内存清理功能的实现
- css3宽度变大动画_动画演示流量计的工作原理
- java 168转换成861_java实验-java语言面向对象编程基础
- linux统计代码注释率,统计代码注释率
- php保存复制粘贴的网页内容,JS实现网站内容的禁止复制和粘贴、另存为