每周翻译系列第一篇-当我需要的时候再去学
每周翻译系列第一篇-当我需要的时候再去学
Hbzhtd前言
为了锻炼英语阅读能力,我决定每周翻译一篇个人认为讲得不错的文章,不限制主题。本文是第一篇,The Greatest Developer Fallacy Or The Wisest Words You’ll Ever Hear?第一次看到这篇文章是在耗子叔的博客,个人认为说的很有道理,深受启发,遂作为第一篇翻译文章。
你听过的这句话,到底是程序员的真理还是谬论?
“我会在我需要的时候再去学”!这些年来,我听过这句话很多次了;当你身处在像软件开发一样快节奏的行业里时,这似乎时是一种非常务实的态度。从某些方面上看,它确实很务实,但从另一些方面上看,我对这句话感到厌烦。这句话已经成为了我们整个行业的座右铭,但却并没有让我们的行业变得更好。问题出在于,开发者把自己伪装成一个聪明且务实的人,但其实只是把这句话当成逃避的借口。有太多的东西需要我们去了解,随着你的前进,逐步掌握某些知识是必要的——这是工作的一部分。但是,在前进的过程中,“捡着学知识”和把所有的事情都推到要用到的时候再去学,这两者是不同的。
现在整个行业的人基本上都是多面手,可能一直以来都是如此,只是我以前没能亲眼看到,但是这两种我都不喜欢。没有人真的会愿意花费时间,持续多年并且深入地去学习任何知识,比如计算机基础知识,或是你现在工作中用到的最新的技术,也不会是你现在每天都在敲的代码所属的语言。为什么会如此?因为这些知识可能在你学完之前,它就已经被替换、取代、边缘化甚至被时代淘汰了。我和许多人谈论过这件事,但没有人会真的把它视作一个问题。“仅仅只是务实的态度而已”。在大多数时候,我们都只是彼此的克隆机器罢了。你需要一个Java工程师,我是一个Java工程师,你也是一个Java工程师,我的邻居也是一个Java工程师。我们之间有什么区别?基本没有。好吧,我过去有一点jQuery的经验。很好,所以你知道如何创建一个手风琴式的菜单吗?当然,我只需要Google一下然后把我能找到的别人写得最好的代码偷过来就行了:)。在大多数时候,如果你需要雇佣一个真正的专家(任何方面,可能你正在写一个优雅的解析器,或者需要可视化一些大数据),那么我希望你准备好了足够多的啤酒和三明治,因为你可能需要花很多时间在这儿。
好吧,有很多种方式可以使你脱颖而出,比如我有更好的沟通能力,这是为什么我做的更好。沟通能力确实很重要,但是,开发者基于软实力而不是开发技能去让自己脱颖而出,似乎本末倒置了。我们都可以沟通的很好,但是代码是一团糟:)。该死,我真的不应该说,我也是一个通才。我当然希望认为自己是一个T类型的人,但是如果我们诚实一点,我更可能是一个短横线类型,或者下划线类型,可能还带有一点凸起:)。对于那些外行的人来说,这些凸起看起来像是巨大的钟乳石——确实是T型的。你看起来像是一个专家,但你从来都不是。这只是你在众多多面手中的一个优势之一。
投资你的未来
我不想去宣扬我们应该如何去投资我们的职业未来,所有人都知道我们应该这么做。大多数人可能认为他们实际上是在投资,忙碌的工作,写很多的代码,可能甚至还读了一些书,当然,这一定可以使他们在大约10年后成为一个专家,20年后成为一个高级专家。(我一直想要写一些关于这方面的,也许某天我会写的:))?但是,如果情况的确如此,每个老人都会成为很多方面的专家,但事实恰恰相反。可能是因为人们不知道如何去建立专业知识(这话有一定道理),但对此我表示怀疑,人们缺少的或许并不是知识,而是欲望。那句关于意志和方式的话是什么来着——完全适用于这种情况?
我已经完全跑题了。“投资职业未来”只是那些流行的事情之一,重点是“我会在我需要的时候再去学”。对我的父亲来说这句话很不错,而且至今为止也帮助我不少。但让我们把这种想法应用在金融行业,“我会在我需要钱的时候再去投资”。不知何故,好像听起来没那么务实了。
你不知道你所不知道的东西
我们都经过这样的时刻,当我们在解决一个麻烦的问题时候,有一个人来到你边上,告诉了你一个算法x或是技术y,并且又快又简单。有人告诉你更“便捷”的方法,这是幸运的,否则你可能需要花费数天或者数周来解决,而且还有可能是一团糟。但是,这不能怪你,因为你不知道你所不知道的东西。这就是为什么我不喜欢这句话的原因。你学不到你认为不存在的东西。Google可以缓解这个问题,但是不能完全解决。在实际中,你可能会遇到许许多多的问题,除非你知道这是哪一类的问题,否则你会处处碰壁(_e.g. 如果你了解一点搜索和传播约束,解决数独问题就是简单的,否则会非常难)。如果你意识不到存在一种算法,或是不知道这个算法的适用性,那你就学不会。你无法利用一个你不了解的技术去解决该技术所适用的问题。不可能总是会有人在旁边告诉你正确的方向。 我敢打赌,现在有十亿行级的代码可以被百万行级更快更干净更简单的代码所取代,就是因为写代码的人不知道他所不知道的东西。
我好像在为相反的观点辩护,如果知道自己所不知道的东西是一个解决办法,因此,我们应该努力去拓宽自己的知识边界。对尽可能多的东西有表面的了解,可能可以帮助我们渡过难关,当我们遇到问题的时候就能够识别这个问题,并且知道需要深入学习相关知识。但恰恰相反,粗浅的了解并不会让你记住任何东西,因为我们的大脑不是这样工作的。如果我们不进行深入地了解某个概念,我们的大脑就会很快地把它标记为不重要,这是浪费时间的(回想一下你以前的考前突击,第二天你还记得多少?)。然而,如果你对某个对象建立了深度的理解,有意思的是,你也会拓宽你的知识(而且你可以很轻松地记住它)。我的祖父是一个核物理学家,数十年的工作所加深的知识使他成为了一个专家,但是同时,他也成为了一个优秀的数学家,不错的化学家,相当好的地质学家,以及合格的生物学家等等。这只是一些实例证据,追寻知识的深度会带来知识的宽度。
你能学得足够快吗?
有些东西需要长时间才能学会。我可以自信的说,我可以毫不费力地掌握一门我之前从未见过的orm框架,因为我曾经用过类似的,而它们的概念都是一样的。但是,如果你需要做一些语音到文本的转换操作就没那么简单了,因为你没有足够的基础知识。你可以期待google有一些东西给你复制粘贴,但这是一个坏例子,只有那些大学的研究人员才会去做这些烂事。那如果是建立一个网站呢,我们都知道怎么去做,但是如果你需要每天为1000万个用户去做这件事呢?我们只需要去学习关于拓展的一切知识,但是用户将会等我们一个月或两个月来加快速度:)。哦是的,我好像变蠢了,我们唯一要做的就是聘请一个专家然后…额…等等,我们的啤酒和三明治已经没有了。
为什么我应该关心?
和高手一起工作真的很爽。 你以前或许体验过,他们说的每句话都非常新颖和有趣,你可以从每一行代码中学到新的技巧,你几乎可以感受到你的大脑正在扩展:)。你想要向这些高手学习,但遗憾的是,你找不到这样的高手。因为所有人都是在“需要”的时候进行学习,所以不可能在任何时候教任何人任何知识。这里面的智慧是这样的,你想要同高手一块工作,但是高手同样想和高手一块工作,所以问题来了,你怎么确保高手是想和你一起工作的?在需要的时候能够学到知识是一项不错的技能,但是作为一名程序员,你不应该让他成为你的哲学。是的,这是一个巨大的行业,你不可能学会所有东西,所以你需要有选择性的学习,如果你足够好奇,想去更深入的学习,那么最后你会发现你也掌握了其他很多很多的东西。并且如果你做的确实足够好,那么其他的高手就会想要和你一起工作,因为他们可以从你身上学到新东西,当然你也可以。这样双方都能获利。
生词
Fallacy 谬论
Wisest 最明智的
pragmatic 务实的
annoyed by 对什么感到生气
mantra 座右铭
whole 整个的
guise 伪装
stuff 东西,泛指
pick certain things up 掌握某事
as you go along 随着你的前进
generalists 多面手、通才
a bunch of 多数
accordion menu 手风琴式菜单
differentiate 脱颖而出
bumps 凸起
uninitiated 外行的
mentality 心态上的
encounter 遇到、遭遇
applicability 适用性
bet 打赌
opposite 对立的
see someone through 看透
superficial 表层的
skimming 粗略浏览
reinforce 加强
cramming 填鸭式学习