职业经验 为什么程序员应该学点英文?

阿东 · 2022年07月11日 · 最后由 Jerry li 回复于 2022年07月13日 · 8092 次阅读

引子

虽然关于 IT 相关从业人员应该学习英语,已经是老生常谈了,还是想结合自己十多年从业经历分享一些个人的感受。

我曾经在培训中看到很多刚入行不久同学因为没有英文基础,一遇到问题就用翻译器翻译,或者去百度一下,比如这个 Linux 命令不会用,百度一下,这个错误日志看不懂,直接全部复制粘贴,百度一下,这个工具不会用,百度一下,其实相比起会一点英文同学来说,这样效率其实很低,命令不会用,可以马上 help 看一下,工具不会用,也可以看下工具的帮助文档,查看错误日志排查问题这个效率差距就更大了,本来日志一般把错误原因都写得很清楚了,结果你还要翻译一次,或者去搜索一下,然后搜索时候很可能还没复制对地方,你说尴尬不?

所以英文有时候就是一个阻碍你提高学习和工作效率的绊脚石,并且是拴在脚上那种,它不会直接让你摔到坑里阻碍你前进,可是如果不把它拿掉,你就是一个拖着石头向前冲锋的战士,常常感觉自己精疲力尽,可是实际上冲锋速度却很慢。

接下从几个不同角度来说明掌握英文对 IT 从业者的重要性。

能够获取更多的一手资料

众所周知,近代 IT 行业发展起源于以英语为主的西方世界,近几十年无论是计算机软硬件的发展,还是最近几十年互联网,大数据,区块链,AI 技术的兴起,都离不开西方学术界和工业界做出的巨大贡献。因此有大量的计算机相关一手资料都是英语,无论是计算机书籍,在线课程,技术论坛,开源项目,都充斥着大量的英文资料。如果能够直接阅读或者听懂这些英文资料,将会大大提高学习效率。加上很多比较新的信息还没有对应的中文翻译,即使有了中文翻译,翻译质量也参差不齐,还会反过来来影响你的阅读或者学习。

总之,对于掌握了英语的 IT 从业者来说像是多了一个新的资源池,你不会再被局限于那个小池子里面了。

更好地理解和学习编程语言

不知道大家有没有遇到这种场景:很多 IT 技术或者工具如果一段时间不用了,就很容易忘了,编程语言也是如此,当需要再次需要用又重新开始学习时候发现竟然忘得差不多了!反正我是这样的,后来我发现如果学习时候能够更深入地理解或者联想学习——在现有知识体系做拓展或者关联,而不是完全当成孤立知识来学。这样能够让知识遗忘速度变慢一些,日后重新学习也会快很多。

当你学习计算机语言时候如果有英文基础,有时候可以借助你现有英文知识去记忆和理解,自然会学的更牢固一些,忘得更慢一些。
因为计算机是西方世界发明的,很自然的编程语言也是基于英语的思维方式创造出来的,特别是到了近现代出现的更接近人类自然语言的高级编程语言,比如 Java,python 一类,里面那些基本关键字,内建方法其实都是英文缩写或者干脆就是英文单词,对于一个有一定英文基础的人学习这类编程语言会轻松很多,至少很多东西不用死记硬背,而且很多时候看别人写的程序(这里指的是比较规范代码)也很容易理解。举几个编程语言基础语法的例子,python 里面常用的 range,type,print 这些内建方法都是英文单词,又比如这几个方法__eq__,__doc__,__delattr__,分别对应单词或短语为 equal,document,delete attribution,直接看单词意思基本能猜到干什么的。你可能会说这些都很简单,我直接死记硬背也很快能学会啊,那我们再来看一个例子:

  • Python 里面的 oct(x) 方法 —— 这个方法是把一个十进制的数字转换成 8 进制,那为什么这个方法写作 oct?大家有没有发现 oct 很像英文里面的 October(十月)?但是在古罗马旧立法计算月份时候一年只有 10 个月份(没有现在的一月 January 和二月 February),第一个月是现在的三月 March,最后一个月是十月 December,因此 october 就是古罗马计算月份的 8 月,还要再往前挖的话 Octo 在拉丁文里面是 8。如果知道这个背景,很自然就能把这个方法记住了,比死记硬背效果是不是要好一些?

代码还是那个代码,但是会英语之后看到的代码和不会英语的同学看到代码的感受是不一样的,好像《失控玩家》里面那个带上眼镜后的 NPC,看到了不一样的世界。

更好地理解一些抽象概念

先不说 IT 行业里面本来就有很多没有翻译成中文的名词或者经常使用缩写的名词,比如 AI(arificial intelegence),Jar(罐子)包(java 程序打包后一种格式)—— 是不是很像把代码打包起来放进一个罐子里面。更麻烦的是有很多概念翻译成中文过后反而会阻碍你的理解,我们来看两个例子:

关于 python 可迭代对象(iterable object)和迭代器(iterator object)的例子

在稍微深入学习 python 后,你会碰到迭代器,可迭代对象,这样几个概念,这是我随便从网上搜到的一些解释:

例子一:

例子二:

不知道初学者看到这些解释是什么感觉,反正我第一次学习这些概念时候看到这些文章是越来越懵逼的。
我们再直接搜索英文资料看看,这是从 https://wiki.python.org/moin/Iterator查到解释

An iterable object is an object that implements iter, which is expected to return an iterator object.

An iterator object implements next, which is expected to return the next element of the iterable object that returned it, and to raise a StopIteration exception when no more elements are available.

In the simplest case, the iterable will implement next itself and return self in iter. However, this has its limitations and may produce unexpected results in concurrent environments (e.g. with the multiprocessing API).

You can use iterables in for loops, to construct lists with list comprehensions, or as input arguments for the list function.

我们先不去看具体技术相关的解释,单从英文角度分析下两个概念的关系。首先,这两个概念是指的同一个东西(object),一个是叫做 iterable 的 object,一个是 iterator 的 object,但是不知道是不是出于简洁的原因,通常把 iterable object 翻译成可迭代的对象,而 iterator object 翻译成迭代器,这其实会给初学者造成一些困扰,单从字面意思看以为是两个不同的概念。我们再看 object 前面的修饰词,一个是形容词 iterable,一个是名词形式 iterator,即使不知道这个单词意思,根据构词法也猜到了这两个单词相关性很强,类似于 beautiful/beauty。我们再根据英语词法猜一下,iterable 指的是可迭代的,后面跟名词 object 后理解成可迭代对象——泛指一类可以迭代的对象,iterator 是一个具体的名词,后面跟名词 object 后是一个合成名词,理解成迭代器对象,因此 iterator 的属性应该更多一些,而事实也确实如此——可迭代对象不一定是迭代器对象,但迭代器对象一定是可迭代的对象。你看这个翻译过来有点绕的关系,如果结合英文去理解这个关系是不是不用死记硬背了?

关于 metaclass 的理解

Meta 这个词经常作为前缀和一些单词组合,比如 Meta-learn,Metacognition,中文通常翻译为元学习,元认知,meta-class 一般译为元类。元类?我第一次看到这个名词完全不知所措,和看到 meta-class 没什么区别。还是直接查下 meta 什么意思,参考 wiki 之后我们发现 meta 作为前缀,可以抽象出一个模式为——an X about X(wiki 详细解释贴在文章末尾),比如元认知就是关于认知的认知,元类其实是关于类的类,或者说成创造类的类,虽然还是有点绕,至少比什么元类好理解。

英文和中文并不是一一对应的关系,有的概念中文里面有,英文里面没有,比如中医里面上火你没法直接找到一个英文单词;反之,有的概念英文有,中文却没有,比如我们刚说的 meta-class,meta 这个没法直接找到一个中文字或者词与之对应。刚查了下,虽然 “元” 这个字也有基本的,根本的意思,但我看到元认知,元类这种词是想不到那里去的,看到 “元” 我第一反应还是人命币。这时候借助英语去理解这一类抽象概念能够帮助我们更好地理解。

更多的工作机会

掌握英语之后除了学习资源池的扩大,选择机会也会随之增多,如果只会中文,就只能选择国内一些 IT 公司,有了英语技能加持之后呢就有了更多的选择,比如需要英文能力的外企,或者直接就是海外的工作岗位。总之几多不压身,多学一点没有坏处,是不是?

7.12 根据留言更新部分内容

学到什么程度?

既然是码农学英语,那么就直接以始为终的学习,简单说就是够用就行。比如你想学 python,去找找 python 英文书,课程,代码看看,能不能看懂,写代码时候能不能用英文写注释,用英文给方法命名。比如你想进外企,那么基本的和你的技术相关的听说读写能不能达到要求?如果你想试试外企 PM,scrum master,BA 这些对英文要求更高职位或者直接去海外工作,那么可能需要更系统的学习了。

学习资源

没有太多推荐的,其实借助 Google 或者 bing 多用英文搜索,用不了多久你就会慢慢发现你需要的东西。还有很多开源技术就多去看官方文档。这里想到两个网站给大家推荐下,一个是众所周知的 github,上面除了开源项目,其实也有很多技术文章,教程。一个是 coursera.org——一个视频学习网站。

怎么学?

如果是走野路子就是不懂就查,指哪打哪,只考虑阅读情况下给大家推荐两个工具,一个翻译工具,一个语法工具.

这样做的好处是见效快,不足是缺乏系统性学习,中后期很快遇到瓶颈,特别是对于基础比较薄弱同学。我也是最近一年报了网课开始系统学习,有兴趣的同学可以私聊,不在这提了,不然成了推销课程的了。

参考文献

共收到 13 条回复 时间 点赞

目前我的情况是这个:

  1. 英文文章:这块没有好的文章论坛啥的,期待推荐一下 IT 方面的
  2. 官方文档:这个目前能看一些,还在努力的积累阶段
  3. 英文书籍:目前我还看的不是很懂,读的不是很多
  4. 公开课: 偶尔看,不多。 冒昧的问下,大佬有什么好的英文资料推荐吗?

该学习那些英文呢

点赞,英文文章或者官方文档都是很好的教材,而且不得不承认,国外大部分的文章写起来条理性很足,前因后果都会交代地很清楚,相对来说国内大部分都是类似随笔那样,只记录个结论,但是为啥会这样,不一定会说。

未学习英格里希前:命名 aa , bb ,cc ,AA
当学习英语后:QString GetName(),getAge()

前段时间看某个教程的中文版本,有一句操作的中文翻译很狗血,怎么想都不明白到底要干嘛,还原成英文后我瞬间茅塞顿开

英文:Create a file named Dockerfile in the same folder as the file package.json with the following contents.
翻译:使用以下内容在与 Dockerfile 该文件相同的文件夹中创建一个文件。package.json

专业词汇量够,其实也没必要特意去学。技术类的文档没啥复杂的语法。除非特别前沿的技术,都没有国内有人理解翻译的那种,一般不那么前沿的技术翻译还算信雅达。

嗯,很多时候其实是我们语文水平影响了我们的理解。

最最最重要的一点,学会使用英文搜索
英文文档看不下去,先全局翻译,再逐个对比一下,没啥问题

Ouroboros 回复

确实是,还有就是缺乏一定的基础和一些必要准确清晰的概念。一篇技术文章或者技术书籍可能涉及一些基础知识,通常会假设读者已经有相关背景了,这样会造成缺乏相关知识的读者阅读困难。

Mango 回复

😅 这有点坑

阿东 #10 · 2022年07月13日 Author
迷龙 回复

更新部分内容~

阿东 #11 · 2022年07月13日 Author
王中 回复

更新部分内容,希望对你有帮助

没学英文,但是看日志看多了就知道啥啥啥了😂

学好英文还有一个好处就是选择工作的时候多一个外企的选项。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册