[译] 为什么自己动手写代码能让你成为更好的开发者

617 阅读6分钟

为什么自己动手写代码能让你成为更好的开发者

要想真正地理解轮子,你需要重新造轮子

Photo by [Jon Cartagena](https://unsplash.com/@cartega?utm_source=medium&utm_medium=referral) on [Unsplash](https://unsplash.com?utm_source=medium&utm_medium=referral)

前几天,我参与了一个关于 JavaScript 开发人员的高级开发岗位面试。我的同事在这次面试中要求面试者写一个能执行 HTTP 调用的函数,如果没有成功的话可以多次尝试。

当他开始在白板上写代码之后,其实写伪代码就可以了。如果他对这个问题理解的比较好,我们也会比较开心。但是很不幸,他不能给出一个好的解决方案。

考虑到他可能比较紧张,我们决定降低难度让他写一个将回调的函数转换为 Promise 的函数。

运气有点差。

当然,我可以说他以前看过类似的代码。他或多或少知道它是如何工作的。一个伪代码的解决方案就可以证明他理解那个概念。

但是他在白板上写的代码完全没有意义的。他对 JavaScript Promise 的概念只有模糊的理解,无法很好地解释它。

如果你是初级的开发者,你可以避免这种情况,但是如果你想申请一个高级开发者的职位,做到这些还是不够的。他要如何调试复杂的 Promise 链并且向他人解释他做了什么呢?


开发者习惯于抽象

作为开发者,我们的工作中充满抽象概念。我们将本来需要重复的代码概念化。因此,当我们专注于更重要的部分时,会不假思索地将这些概念进行运用并假设它们有效。

一般说来,它们的确有效,但当遇到复杂情况时真正理解这些抽象代码就很有价值了

那位高级开发职位的应试者不假思索地就写出来这段 promise 抽象的代码。如果是在某处看到这段代码的话他大概懂得如何运用,但是他并没有真正弄懂它的意义,所以无法在工作面试中重现这段代码。

他本可以直接把这段代码背下来,这其实一点都不难:

return new Promise((resolve, reject) => {
  functionWithCallback((err, result) => {
   return err ? reject(err) : resolve(result);
  });
});

我就这么干过。也许,我们都这么干过。把一段代码背下来以便直接使用,多少明白一点它的意义。

但是假如他真正理解这段代码,就没必要死记硬背了。那段代码会了然于胸,绝不会写不出来。


理解源代码

早在 2012 年,在前端-后端模式流行之前,jQuery 是世界的佼佼者,我当时正在阅读 jQuery 创始人 John Resig 写的 “Secrets of the JavaScript Ninja” 。

这本书教你如何从零开始创建自己的 jQuery ,让你理解创建库后面的思维过程。尽管 jQuery 在随后几年淡出了大众视线,我还是强烈推荐读一下这本书。

读这本书时我最深的一个感悟是,我总感觉自己本应该能想得出这个主意。里面描述的步骤非常符合逻辑并且非常直白,真让我觉得只要我当时想,jQuery 本该是建的。

当然,现实中,我永远不可能做到 —— 我准会认为那太过复杂。我准会觉得自己的方法太过简单幼稚不可能有效而放弃。我会理所当然认为 jQuery 才是有效的。后面我可能根本不会花时间研究它为什么有效。我会把它当成个黑箱子那样使用。

读这本书改变了我。我开始阅读源代码然后发现许多解决方法都十分直接,甚至明显。

现在,自己设计解决方法当然完全是另一回事。但是阅读源代码然后自己重新启用已有方法,恰恰是能帮你写出自己的代码的方法。

作为开发者,这个过程中你得到的灵感和学到的方法会让你改变。你将发现,你所使用和以为神奇的库其实并不神奇,只是个简洁聪明的方案。

理解代码需要花费时间,一步步来,但也能让你经历创始人当初经历的同样一点一点逐渐前进的脚步。这让你更理解编程过程,也让你更有信心去创建自己的方案。

当我开始使用 JavaScript 的 Promise 时,我认为它们充满魔力。后来我明白它们只不过是基于回调,我对于编程的看法永远地改变了。

旨在摆脱回调的这种模式是使用……回调来实现的?

这改变了我。我意识到这些代码对我来说并不是复杂到无法理解。如果我有足够的好奇心和意志力去投入进入就能轻易理解。

这就是学会编程的真正法门。这就是成为更好的开发者的途径。


重新造轮子

去吧,去造你自己的轮子。编写自己的数据绑定,编写自己的 Promise 甚至是自己的状态管理解决方案

即使不会有人使用也没关系。你会从中成长。如果你能把它用在自己的一个项目中,就很好了。你会开发得更好并成长更多。

重点是不要把你的方案用在生产上,而是在学习中。针对已有的方案编辑自己的执行代码是向最优秀的人学习的好方法。

这就是成为更优秀的开发者的方法。

如果发现译文存在错误或其他需要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可获得相应奖励积分。文章开头的 本文永久链接 即为本文在 GitHub 上的 MarkDown 链接。


掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 AndroidiOS前端后端区块链产品设计人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划官方微博知乎专栏