为什么重新发明轮子很有用



前几天,我采访了一位自称高级的JavaScript开发人员。 参加面试的一位同事要求应聘者编写一个函数,该函数将产生一个HTTP请求,如果失败,请重试几次。

他立即在板上编写了代码,因此足以描述大概的东西。 如果他只是表明他很了解问题的实质,我们将完全满意。 但是,不幸的是,他找不到成功的解决方案。 然后,兴奋地注销了该记录,我们决定稍微简化一下任务,并要求他根据带有回调函数的promise创建函数。

但是a。 是的,很明显,他之前曾遇到过类似的代码。 总的来说,他知道那里的一切工作。 一个解决方案的草图将足以证明对该概念的理解。 但是,候选人在董事会上编写的代码完全是胡说八道。 对于JavaScript的承诺,他有一个非常模糊的想法,他无法真正解释为什么需要这些承诺。 对于大三学生来说,这是可以原谅的,但是不再有大四学生的职位。 这个开发人员将如何设法消除带有承诺的复杂链中的错误,并向其他人解释他到底做了什么?

开发人员认为现成的代码不言而喻


在开发过程中,我们不断遇到可复制的材料。 我们传输代码片段,这样就不必每次都注册它们。 因此,将我们所有的注意力都集中在关键部分上,我们看待完成的代码是不言而喻的-我们只是假设一切都会在其中正常工作。

通常,它确实有效,但是当出现困难时,对它的机制的理解不仅仅能带来回报。

因此,我们的高级开发人员职位候选人认为承诺对象是不言而喻的。 当他们在别人的代码中遇到某个地方时,他可能想像过如何对待他们,但是他不了解一般原则,也无法在面试中亲自重复。 也许他心底想起了这个片段-并不是那么困难:

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

我也这样做了-是的,我们所有人都可能有一天做到了。 他们只是简单地记住一段代码,以便以后可以在工作中使用它,而只是笼统地想象那里的一切工作。 但是,如果开发人员真正理解了这个概念,那么他就不必记住任何内容-他只知道该怎么做,并且可以轻松地复制代码中的所有必要内容。

扎根


2012年,当尚未确立前端框架的主导地位时,jQuery统治了世界,我读了jQuery的创建者约翰·雷兹格(John Rezig)撰写的《 秘密的JavaScript忍者》

该书教会读者如何从头开始创建自己的jQuery,并提供了一个独特的机会来加入导致创建库的思路。 近年来,jQuery失去了以前的流行,但是我仍然强烈推荐这本书。 我对她的印象最深的是我能想到的所有这些。 作者所描绘的步骤似乎是合乎逻辑的,可以理解,以至于我认为,只要我认真从事工作,就可以轻松创建jQuery。

当然,实际上,我不会掌握这样的东西-我会认为这非常困难。 在我看来,我自己的决定过于简单和幼稚,无法工作,我会放弃。 我将jQuery归因于不言而喻的事物,您只需要盲目相信它们的正确操作即可。 随后,我几乎不会浪费时间去研究这个库的机制,而只是将它用作一种黑匣子。

但是了解这本书使我与众不同。 我开始阅读源代码,发现许多解决方案的实现实际上非常透明,甚至显而易见。 当然,您自己不应该考虑这种事情-这是另一部歌剧。 但是,对他人代码的研究以及对现有解决方案的复制,可以帮助我们提出自己的想法。

您所汲取的灵感和开始注意到的模式将使您成为一名开发人员。 您会发现,您经常使用并且习惯于将其视为魔术制品的漂亮库根本无法与魔术配合使用,而只是简单,有效地解决了该问题。

有时,有必要仔细研究代码,一步一步地将其拆解,但是就像这样,以较小的连续步骤进行操作,您可以重复作者的解决方案。 这将使您更深入地编写代码,并在搜索自己的解决方案时更加放心。

当我刚开始履行诺言时,在我看来这是纯粹的魔术。 然后,我发现它们基于相同的回调,并且我的编程世界完全颠覆了。 也就是说,一种旨在将我们从回调中拯救出来的模式本身就是使用回调实现的!

这帮助我用不同的眼光看待这个问题,并意识到我面前没有一些深奥的代码片段,这是我一生中无法理解的先验复杂性。 这些只是通过好奇心和沉浸感可以轻松理解的模式。 人们通过这种方式学习编程并以开发人员的身份成长。

重新发明这个轮子


因此,随时可以重新发明轮子:编写用于绑定数据的代码,创建自己的承诺,甚至做出决定来用自己的双手来管理您的状况。
没有人可以使用所有这些都没关系-但现在您可以做到这一点。 而且,如果您将有机会随后在自己的项目中使用此类开发,那么通常这很好。 您可以开发它们并学习其他东西。

这里的重点不是将代码发送到生产环境,而是学习新知识。 自行规定实施现有解决方案是从最佳程序员那里学习并磨练您的技能的好方法。

Source: https://habr.com/ru/post/zh-CN472006/


All Articles