程序员要如何学英语?

一般来说,程序员可算是英语水平比较好的群体,因为在这个行业,英文资料是最全面、最及时,对英文资料的需求也最迫切的。就我观察,刚入门不久的程序员一般都能查阅英文文档,找到需要的信息。但是另一方面,我也发现,经常阅读英文文档的程序员,英语水平许多时候却不像“经常阅读英文”的样子。所以我在这里列几点自己的学习心得,供大家参考。

第一,既要看代码,也要读文档。

读文档只读代码,是很多程序员的习惯,也是导致程序员虽然读了很多英文资料,英文水平却没有相应提高的原因之一。以前曾在《程序员》上看到介绍阅读技术图书方法的文章,提出过“先代码后文字”的方法,也就是“先看代码,看不明白再看文字”。这种阅读法能极大提高阅读效率,但如果技术图书只看代码就足够,还要文字干什么呢?很多时候,代码只是冰山一角,代码背后的思维和逻辑才是真正的重头戏,只有写成文字才能解释,也只有阅读文字才能理解。

举个例子吧,两段代码都是 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 之类的网站,不要因为问题与自己无关而忽略,多留心这些问题到底是什么,注意人家是如何表达的。只有经过这样的锻炼,才能在自己遇到问题时迅速找到可能的解决方案,节省时间。

有人说,以汉语为母语的程序员,学习英语已经是迫不得已,不但要会阅读,还要会读、会表达,真是难上加难。这种说法有一定道理,但是在目前并没有更好的解决方案,学会阅读、认准读音、锻炼表达,确实可以给自己带来好处。长远来看,要改变这种情况,需要中文技术圈的所有人员努力贡献高质量的资料(原创和翻译都可以),如果只是“无责任转贴”,既不亲自验证,也不整理格式,中文技术资料的整体质量只会持续恶化,反向逼迫更多的人把英语学好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/510094.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html怎么设计自动出现提示的数据列表?怎么设计数据列表像百度一样怎么随用户输入而更新

<!DOCTYPE html> <html><head><meta charset"utf-8" /><title>hello</title></head><body><h2>输入查询的城市</h2><form autocomplete"on"><input type"text" id"s…

程序员从优秀到卓越的几点建议

和其他技术一样&#xff0c;编程也有层次阶段之分——业余爱好者、普通级别和专家级别。关于这个问题我问过很多很多次—— 如何从优秀到卓越&#xff1f;这是一个程序员应该扪心自问的最重要的问题。至少&#xff0c;在他们职业生涯的某些时候。 为了给出一个令人满意的答案&a…

Impala UDF - Impala调用Hive UDF函数

Impala 中运行 Hive UDF 场景&#xff1a;部分查询需要快速返回&#xff0c;使用Impala进行快速、复杂的查询 1.简单的UDF函数过滤&#xff0c;判断是否包含“好”字&#xff0c;返回boolean类型 import org.apache.hadoop.hive.ql.exec.UDF;/*** ClassName: UdfTest* Descri…

想要成为真正优秀的程序员是不是真的很难?

很多人认为要想成为一名优秀的程序员&#xff0c;那就需要一天24小时每天不断地编程——睁开眼睛要编程&#xff0c;闭上眼睛睡觉的时候还要梦到编程——我认为这是一种矫枉过正的方法。沿着这条路走&#xff0c;只会让你精疲力尽&#xff0c;犹如夸父逐日一般&#xff0c;死在…

Impala查询 - HDFS缓存数据

HDFS缓存数据命令 查看缓存池信息 hdfs cacheadmin -listPools -stats 查看已缓存的数据信息 hdfs cacheadmin -listDirectives -stats Impala表卸载缓存数据 alter table dw_crawler.bsl_zhongda_weibo_article_hive set uncached; 创建缓存池 hdfs cacheadmin -addPool a…

html怎样实现数据列表的下拉效果

目前支持浏览器&#xff1a;火狐、欧朋。。 谷歌不支持 <!DOCTYPE html> <html> <head> <meta charset"utf-8" /> <title>hello</title> </head> <body> <form action"testform.php"method&q…

Java 调用 Impala - JDBC 调用Impala

java通过JDBC 调用Impala服务 Maven项目中 pom.xml引用<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.7.1</version></dependency><dependency><groupId>…

html中怎样实现在输入框中出现提示

<!DOCTYPE html> <html> <head> <meta charset"utf-8" /> <title>hello</title> </head> <body> <form action"testform.php"method"get"> 请输入网址&#xff1a;<input ty…

HUE WorkFlow Schedule 调用Hive参数传递,外部参数传递,时间参数传递

目录 WorkFlow传静态参数 Schedule 传动态参数 oozie常用的系统常量 场景&#xff1a;HUE执行任务需要从外部传入参数&#xff0c;不能在脚本写死&#xff0c;比较麻烦 WorkFlow传静态参数 执行的脚本代码如下 CREATE EXTERNAL TABLE ${hivevar:database}.${hivevar:table…

函数调用过程简单分析

C/C函数调用过程分析 这里以一个简单的C语言代码为例&#xff0c;来分析函数调用过程 代码&#xff1a; 1 #include <stdio.h>2 3 int func(int param1 ,int param2,int param3)4 {5 int var1 param1;6 int var2 param2;7 int var3 param3;8 …

HUE Schedule 定时调度 - 启动时间设置问题(执行次数过多,时区问题)

在启动Schedule 时需要设置开始时间&#xff0c;结束时间不用讨论&#xff0c;开始时间设置时尽量为当前时间 因为开始时间设置如果小于今天&#xff0c;比如设置为2019-01-01&#xff0c;定时器是每天1:29分启动&#xff0c;则会将日期之前的次数执行了&#xff0c;即执行开始…

Kafka(六)Kafka基本客户端命令操作

转载自&#xff1a;https://blog.51cto.com/littledevil/2147950 主题管理 创建主题 如果配置了auto.create.topics.enabletrue&#xff08;这也是默认值&#xff09;这样当生产者向一个没有创建的主题发送消息就会自动创建&#xff0c;其分区数量和副本数量也是有默认配置来…

linux平台C++开发基本知识

最近工作中&#xff0c;需要在linux上开发C程序。有了下面的问题。 1&#xff0c;linux平台C开发和win32 C开发有什么区别呢&#xff1f; 2&#xff0c;除了C语言&#xff0c;数据结构等必须的知识外&#xff0c;还需要些了解什么呢&#xff1f; 3&#xff0c;如何在linux平台开…

Impala 调用Hbase 报错 LeaseException

impala调用Hbase表数据操作时&#xff0c;提示 LeaseException 异常&#xff0c;主要原因是hbase数据过大&#xff0c;调用期间没有汇报心跳导致 WARNINGS: LeaseException: org.apache.hadoop.hbase.regionserver.LeaseException: lease -8355984789923245890 does not exist…

mitmproxy 中间人代理工具,抓包工具,linux抓包工具 mitmproxy 使用

mitmproxy是一个支持HTTP和HTTPS的抓包程序&#xff0c;类似Fiddler、Charles的功能&#xff0c;可以在linux以命令行形式的展示抓包信息 mitmdump&#xff1a;它是mitmproxy的命令行接口&#xff0c;利用它我们可以对接Python脚本&#xff0c;用Python实现监听后的处理。 mitm…

Ajax学习总结+案例

一、AJAX简介 1、Asynchronous JavaScript And XML指异步 JavaScript 及 XML 2、老技术新用法。是基于JavaScript、XML、HTML、CSS新用法 二、同步和异步&#xff08;理解&#xff09; 三、第一个异步请求案例&#xff08;熟悉编码步骤&#xff09; 四、XmlHttpRequest&…

Spark 运行内存不足Not enough space to cache rdd in memory,Container killed by YARN for exceeding memory

日志报错&#xff08;WARN类型最后执行成功可以忽略&#xff09;&#xff1a; 19/04/15 12:35:37 INFO memory.MemoryStore: Will not store rdd_2_5119/04/15 12:35:37 WARN memory.MemoryStore: Not enough space to cache rdd_2_51 in memory! (computed 1109.7 MB so far)…

Spark 某两个节点数据分析速度慢 - hbase数据删除(分裂) 元信息未删除导致 There is an overlap in the region chain.

基于Hbase2.0&#xff0c;Spark2.2 问题描述 执行Spark处理Hbase数据时&#xff0c;遇到某两个Excutor处理速度特别慢&#xff0c;如图 正常速度10多分钟 左右处理完成&#xff0c; 一个多小时有另外一个处理完成&#xff0c;还有一个在处理中。 分析原因 1.查看hbase数据分…

在MFC程序中增加控制台窗口

MFC程序中&#xff0c;如果想要输出调试信息&#xff0c;我们一般都是TRACE或者使用LOG文件&#xff0c;都不是很方便&#xff0c;第一个需要我们在调试状态下&#xff0c;第二个也要配置麻烦而且不直观。而使用Console来显示调试信息应该是更好的选择。下面介绍几种在MFC程序中…

mysql配置

MySQL5.6.11安装步骤&#xff08;Windows7 64位&#xff09; http://jingyan.baidu.com/article/f3ad7d0ffc061a09c3345bf0.html1. 下载MySQL Community Server 5.6.21&#xff0c;注意选择系统类型&#xff08;32位/64位&#xff09; 2. 解压MySQL压缩包 将以下载的MySQL压缩包…