IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

程序员为什么要学好英语

乱象,印迹 2016-02-07 14:45:35 累计浏览 3,044 次
本机暂存

   在我上大学的时候,除去普通的英语课程,专业课程里还有一门《计算机英语》。当时大家的普遍认为,普通的“英语”是过四六级用的,《计算机英语》才是专业真正需要的。

   等到工作了,我发现很多人都持这样的观点:程序员应该学好英语。这样才能方便地查找资料,迅速地学习最新的知识。换句话说,“学好英语”在很多人看来,就是是“学好专业英语”——这项要求已经很高了,我曾经在《程序员要怎样学英语》里提到,不但要能看懂文档,还要知道“黑屏”是blank screen,“死机”是system halt,否则查找就会很费力。

   但是今天我想强调的是,对程序员来说,学好“英语”而不是“专业英语”是非常重要的。只学好专业英语,看得了技术文档,但那一大堆专业术语和概念可能会像陨石一样,没来由地坠落下来,只能生吞活剥地硬背。如果学好英语,你才会有融会贯通的感觉,知道那些术语和概念原来是从地里长出来的,底下连着根茎。

   程序员经常被认为是呆头呆脑的古怪家伙,讲一口外人听不懂的语言,其实技术世界里的很多术语都是从生活经验中借鉴而来,是非常形象而有趣的。可惜,这些意味和趣味无法通过翻译传递,也很难在硬邦邦地研读时体会到。所以如果你只看中文资料,或者以学习“专业英语”的态度来对待,即便能记住,也只能硬背下来。天长日久,“古怪”的感觉也就油然而生了。

   比如说cache和buffer,这两个英文单词是完全不一样的,但中文分别翻译为“缓存”和“缓冲”,看起来非常像,很多人确实会搞混(不要吃惊,我的面试经历已经证明了)。分得清的人都知道,“缓存”是cache,“缓冲”是buffer,不过其中还有些麻烦,因为“缓存”很多时候是用于读取的,“缓冲”很多时候是用于写入的。为避免混淆,很多人干脆放弃中文直接说英文,这确实是一种有效的办法,但是cache和buffer到底是什么意思呢,它们是天上掉下来的,还是地里长出来的?答案是后者。

   cache在“缓存”的含义诞生之前就存在了,意思是a secret place of storage,也就是“用于存放物品的隐蔽区域”,比如动物贮存食物的地方,或者人类埋藏金币的秘穴。所以用cache来命名计算机中的“缓存”是非常恰当的:cache把数据存储起来加快读取,而且它必须是隐蔽的。我已经见过无数程序员写的不透明缓存了,这种“缓存”必须改动主线业务,使用和维护都异常麻烦,如果程序员多懂一点英文,知道cache原本的意思,问题会少很多吧。

   buffer也是这样,它原本的意思是devices or pieces of material for reducing shock or damage due to contact,也就是“用来减少接触时产生的震荡或损坏的装置或材料”,比如为了用于逃生的气垫,或者汽车上用的减震器。用buffer来命名计算机中的“缓冲”也是非常巧妙的:buffer用来解决两种设备在数据交互时的数据丢失(或者阻塞等待)的问题。我读大学的时候,老师特意强调“缓冲是用来解决速度不匹配的问题”,让大家印象深刻。但是如果大家多懂一点英文,知道buffer原本的意思,估计不用老师强调自己也能理解了。

   再比如serialize和flatten,这两个单词Java程序员都熟悉,其它程序员也不会陌生。前者是“序列化”或者“串行化”嘛;后者,嗯,有些人翻译为“扁平化”,还有些人干脆不翻译,就叫flatten好了。总之,这两个词都比较难记忆,给其他人解释的时候也很麻烦。

   文档里是这么描述serialize的:the object can be flattened into bytes and subsequently inflated in the future。不妨看看flat和serial原本的意思。flatten的意思是“打扁、推倒”,serial的意思是“无间隔的规律摆放”。这样看来,整个描述是非常形象了:“序列化”指的是把对象拆散成一堆紧密码放好的字节(也就是字节数组啦),之后还能组装起来。有很多人纠结serialize到底是“序列化”还是“串行化”,如果你懂得seralize和flatten的真正意思就会知道,“序列化”还是“串行化”都不合适,但是,也无所谓。

   没错,程序员面对的是机器和科技,但这并不意味着他们的工作就没有任何乐趣,就需要硬生生造出很多“天外飞仙”一般的术语。恰恰相反,许多技术术语都像庄稼一样,把生活经验当成诞生的土壤,所以显得非常生动形象。如果程序员的母语是英语,他看到cache, buffer, serialize, flatten之类的单词,虽然也要学习其专业含义,但有背景知识和生活经验可以借鉴,所以“背靠大树好乘凉”。但如果程序员的母语是中文,英文又不够好,就没有这种优势,那些专业术语就像陨石雨一样难以理解和应付,只能生吞活剥,麻烦不说,久而久之也容易变得无趣。

   有人说,好的翻译可以解决这种问题。一定程度上来说确实如此,比如董乐山先生当年翻译的“导弹”,朗朗上口又生动形象,大家一听都明白。可惜如今这样用心的翻译家已经太少了,加上新单词出现太快,翻译的速度根本跟不上。所以对程序员来说,真正的出路还在于自己,不要自我束缚在“专业英语”的世界里,而是要认真完整地学英语,了解英文单词本来的意思,真正懂得用英语思考和理解世界,才能收获融会贯通的效果。

   当然,这个道理反过来也是成立的,还记得前不久被关掉的“曲径”吗?它的命名和cache, buffer, serialize等等一样,其中的逻辑“不足为外人道也”,老外程序员如果只懂中文技术资料,看到这个名字多半也要挠头瞪眼了。

同分类推荐文章

  1. 科技爱好者周刊(第 401 期):如何赚到10亿美元 (2026-06-26 08:05:38)
  2. 如何做决策 - 从 Go 的一个 issue 说起 (2026-06-26 08:00:00)
  3. Seven Player:Windows上播放115网盘视频的增强工具 (2026-06-09 00:06:47)

查看更多 开发者 文章 →

建议继续学习

  1. AWStats简介:Apache/Windows IIS的日志分析工具的下载,安装,配置样例和使用(含6.9中文定义补丁) (累计阅读 10,087)
  2. MogileFS 的介绍(MogileFS 系列1) (累计阅读 5,147)
  3. 我对开源的看法 (累计阅读 4,922)
  4. 五款最好的免费同步软件 (累计阅读 4,807)
  5. Pixel light 中的场景管理 (累计阅读 4,351)
  6. 论“重复造轮子” (累计阅读 4,312)
  7. Java陷阱(2010版) (累计阅读 4,094)
  8. 聊聊 Apache 开源协议 (累计阅读 3,725)
  9. 那些被大佬带进沟里的名言 (累计阅读 3,203)
  10. 网站架构的选择 (累计阅读 2,034)