程序员的荒谬之言还是至理名言?
date
Dec 10, 2024
slug
the-greatest-developer-fallacy-or-the-wisest-words-youll-ever-hear
status
Published
tags
Collection
summary
type
Post
Created Time
Dec 10, 2024 11:43 AM
Updated Time
Dec 10, 2024 12:28 PM
AI summary
文章探讨了程序员在技术学习中的心态,尤其是“我会在需要时再学”的观点。尽管这种态度在快速发展的软件行业中看似务实,但实际上可能导致知识的缺乏和行业的同质化。作者强调深入学习的重要性,认为只有通过深入理解一个领域,才能在职业生涯中真正成长并与专家合作。最终,选择一个领域并彻底掌握它,将有助于个人的职业发展和与他人的合作。
Status
关于技术学习,我一直心存疑虑,我应该学什么?为什么我花了很长的时间却没有达到令人满意的结果?这篇文章给了一些启发 The Greatest Developer Fallacy Or The Wisest Words You’ll Ever Hear?。
I will learn it when I need it – 我会在我需要的时候再学
这些年来我经常听到这句话;在像软件开发这样快速发展的行业中,这种态度似乎非常务实。从某种程度上来说,它确实相当务实,但从另一个角度来看,我对这句话感到厌烦。它已经成为我们整个行业的口头禅,而这种心态并没有让行业变得更好。问题是,在看似聪明且实用的开发者表象下,人们用它作为借口来敷衍了事。有太多的东西需要学习,我们也的确需要在工作当中来学习这些东西。但是, “在工作中学习”和“根据遇到的问题捡知识”这两者有着巨大的不同。
整个行业被一群通才所取代,也许它一直都是这样的,我只是没有意识到而已。无论如何,我不喜欢这种情况。没有人愿意花时间深入学习任何东西,无论是计算机科学的基础还是最新的技术,甚至是他们每天使用的编程语言。为什么要去费这个心呢?在你学完之前,它们就会被取代、超越、边缘化或过时。我和很多人讨论过这个问题,但似乎没有人真的认为这是个问题。“接受现实吧,伙计”。与此同时,我们都变成了彼此的复制品。你需要一个Java开发者,我是一个Java开发者,你是Java开发者,我的邻居也是Java开发者。那我们之间有什么区别呢——没有区别!好吧,我有一些jQuery经验。太好了,那么你知道如何构建轮播图吗?当然,我在 Google 上搜索并使用找到的最佳代码。
好吧,确实有一些方法可以让自己脱颖而出,比如我有较好的沟通技巧,这就是为什么我能做得更好。沟通技巧固然重要,但开发者们基于软技能而非技术技能来区分自己——这似乎有点不对劲。我们都沟通得很棒,但代码却一团糟(笑)。唉,我也不该这么说,我也是一个通才。当然,我希望认为自己是T型人才,但如果我们真的诚实的话,我更像是一个破折号或下划线,也许有几个小凸起(笑)。对那些外行来说,这些凸起可能看起来像巨大的钟乳石——确实很像T型。你看起来像个专家,而实际上从未真正成为过专家,这只是在一个通才海洋中的一个小优势。
投资于未来
我不想布道我们应该都去投资我们的职业未来,每个人都知道应该这么做。大多数人可能认为自己确实在投资,他们上班,写很多代码,也许还会读一些额外的资料,肯定这样做十年后会成为专家,二十年后成为高级专家(我打算着重写这一点,有一天我会做到)?但如果真是这样的话,每个老人都会在许多方面成为专家,而这显然不是事实。也许人们只是不知道如何建立专长(这有一定的道理),但我隐约怀疑更多的是缺乏愿望而非缺乏知识。那个关于意志和方法的说法——在这种情况下也完全适用?
我们都有过这样的时刻:尝试解决一个问题时遇到了巨大困难,直到有人过来告诉你算法X或技术Y,然后一切变得快速简单。很幸运那个人恰好在那里向你展示了“容易”的方式,否则你会花费几天甚至几周的时间试图找出解决方案,结果一团糟。你不能为此责备任何人,因为对于未知的知识,你是无能为力的。对我来说,这就是“我将在需要时学习”心态失效的地方。如果你不知道某事物的存在,你就无法学习它。虽然Google在这方面有很大帮助,但它并不能完全解决问题。有许多你在野外遇到的问题,除非你知道你面对的是哪一类问题(例如,如果你对搜索和约束传播有所了解,解数独就变得简单,否则它将非常困难)。如果不知晓某个算法或其适用性,你便无法学习它。如果你没有意识到某种技术具备特定能力,你也无法利用它来解决问题。不会总是有人来指点你正确的方向。我敢打赌现在有一亿行代码可以用一百万行更快、更干净、更好的代码替换,仅仅是因为编写者不知道他们不知道它们是什么。
我似乎在为另一方辩护,如果知道你不知道什么就是关键,那么我们当然应该专注于广度的知识。尽可能多地了解表面信息应该可以帮我们度过难关,我们可以识别问题并在看到它们时更深入地学习所需内容。但这不起作用,浏览主题并不能让你记住任何东西,大脑并不这样工作。如果我们不强化和深入理解概念,很快就会把那些信息视为不重要而遗忘,这是一种浪费时间的方式(回想一下考试前临时抱佛脚,第二天你还记得多少?)。然而,如果你专注于深入理解一个主题——有趣的是——你也会获得广泛的知识(并且你能真正记住)。我的祖父是一名核物理学家,几十年的工作使他对这一领域的深入了解让他成为了专家,但也让他成为一名优秀的数学家、不错的化学家、不错的地质学家、不错的生物学家等。这只是寻求深度带来广度的一些确确实实的“副作用”。
你学的足够快么?
有些技能确实需要长时间的学习才能掌握。对于我来说,即便是一个未曾接触过的ORM框架,我也自信可以在不停顿的情况下迅速掌握,因为我之前有过使用经验,基本概念是相似的。但是,如果任务变成语音到文本的转换,事情就没那么简单了,因为缺乏必要的背景知识。或许我们可以寄希望于Google,找到可以复制粘贴的现成解决方案。不过,这确实不是一个好例子,毕竟这样的工作通常只会在大学的研究室里进行。
那么,让我们考虑建立一个网站吧,我们都熟悉这个过程,但如果我们需要为每天访问量达到千万级别的用户提供服务呢?这时我们就必须深入学习有关系统扩展的一切知识了。我确信用户们会耐心等待一两个月,以便我们能够提升速度(笑)。当然,我这只是开个玩笑,实际上我们需要做的是雇佣一位专家……啊,等等,专家?
为什么要成为专家?
与专家一起工作是非常棒的。你可能有过这样的经历:他们说的每一件事都是新的和有趣的,每一行代码都能学到新技巧,几乎能感觉到你的大脑在扩张。你想向专家学习,所以当找不到专家时真的很遗憾。由于每个人都只在“需要”时学习,因此没人能教别人任何东西。这里的智慧在于,你想要与专家合作,但专家也想与其他专家合作,那你做了什么来确保专家愿意与你合作呢?能够在需要时学习某样东西是一项很好的技能,但它不能成为你作为开发者的哲学。这个行业很大,你不可能学完所有东西,所以选择一个领域并确保你能彻底掌握它。如果你足够好奇去探索有趣的部分,你会发现最终你会对很多其他东西也有不错的理解。如果你做得足够好,其他超级聪明的人也会想要和你在一起,因为他们可以从你身上学到东西,而你也能从他们那里学到很多。每个人都会成为赢家。