程序员要如何学英语?

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

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

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

举个例子吧,两段代码都是 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,一经查实,立即删除!

相关文章

Impala 查询导出到文本,本地系统

Hive查询导出到文本使用 insert overwrite local directory 在Impala中不支持,Impala使用,注意--output_delimiter与-B 一同使用,否则不生效 impala-shell -q "select birthday,b.uid from dw_crawler.bsl_weibo_article a,ods_xxx.…

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…

ros(7)自定义service数据

创建Persom.srv 新建srv文件夹 在srv文件夹中创建Persom.srv&#xff0c;编辑文件 string name uint8 age uint8 sexuint8 unknown 0 uint8 male 1 uint8 female 2--- string result 修改package,xml add_service_files(FILESPerson.srv )generate_messages(DEPE…

Hive表 Parquet压缩 , Gzip,Snappy,uncompressed 效果对比

创建两张表&#xff0c;通过一种是parquet &#xff0c; 一种使用parquet snappy压缩 创建表 使用snappy CREATE EXTERNAL TABLE IF NOT EXISTS tableName(xxx string) partitioned by (pt_xvc string) ROW FORMAT DELIMITED FIELDS TERMINATED BY \001 STORED AS PARQUET TB…

html中怎么自动获得搜索文本框的光标焦点

<!DOCTYPE html> <html> <head> <meta charset"utf-8" /> <title>hello</title> </head> <body> <form action"demo_form.php"method"get"> <!--一个页面只能指定一个autofo…

ubuntu16.04 + kinetic +turtlebot2配置

安装ros-kinetic请参考ubuntu 16.0安装ros-kinetic 配置turtlebot2 1.更新 sudo apt-get update2.安装turtlebot相应的源 sudo apt-get install ros-kinetic-turtlebot ros-kinetic-turtlebot-apps ros-kinetic-turtlebot-interactions ros-kinetic-kobuki-ftdi ros-kineti…

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…

Turtlebot入门-配置网络

配置网络 在工作站和Turtlebot都要同步时钟 输入如下命令&#xff1a; sudo apt-get install chrony ntpdate sudo ntpdate ntp.ubuntu.com 2.获取Turtlebot和工作站的IP地址&#xff0c;在终端执行&#xff1a; ifconfig sudo service ssh status 如果显示ssh: unrecogn…

RTTI-运行时类型识别

RTTI 编辑RTTI&#xff08;Run-Time Type Information)&#xff0c;通过运行时类型信息程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型。中文名RTTI外文名Run-Time Type Information属 于程序函 数typeid目录 1 RTTI介绍 ▪ typeid函数 ▪ …

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>…

Linux 、shell 时间函数 - 获取七天前所在周

[rootiZj6c3ral1ugubn9usrsi8Z ~]# echo $(date -d -7day %Y%W) 201912

动态创建二维数组

int **p; p new int*[10]; //注意&#xff0c;int*[10]表示一个有10个元素的指针数组 for (int i 0; i ! 10; i) { p[i] new int[5]; } 这里是将p作为一个指向指针的指针&#xff0c;它指向一个包含10个元素的指针数组&#xff0c;并且每个元素指向一个有5个元素的数…

html上传文件

<!DOCTYPE html> <html> <head> <meta charset"utf-8" /> <title>hello</title> </head> <body> <form action"testform.php"method"get"> 请选择上传的多个文件&#xff1a;&l…

相机参数关系

焦距 f 35mm 最高分辨率&#xff1a;42562832 传感器尺寸&#xff1a;36.023.9 mm 根据以上定义可以有&#xff1a;u0 4256/2 2128 v0 2832/2 1416 dx 36.0/4256 dy 23.9/2832 fx f/dx 4137.8 fy f/dy 4147.3

Kafka 不停机修改某一个topic数据保存时间

查看topic信息 ./kafka-topics.sh --describe --zookeeper zk:2181 --topic topicName25/03/08 16:05:29 INFO zkclient.ZkClient: zookeeper state changed (SyncConnected) Topic:topicName PartitionCount:3 ReplicationFactor:3 Configs:Topic: topicName …

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

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