要真正理解轮子,您需要自己重新发明轮子。前几天,我采访了高级javascript开发人员的职位。 我的同事(也参加了面试)要求应聘者编写一个函数,该函数将执行HTTP请求,并在失败的情况下重复几次。
由于他是在板上编写此程序的,因此伪代码就足够了。 如果他对这个问题表现出很好的理解,我们将感到满意。 但是,不幸的是,他找不到一个好的解决方案。
考虑到他很紧张,我们决定简化该任务,并要求他将基于回调的函数转换为基于Promise的函数。
没运气
我可以说他以前见过类似的代码。 他或多或少都知道这是如何工作的。 伪代码表明他了解这个概念就足够了。
但是他在板上写的代码没有任何意义。 他对JavaScript中Promise的概念只有模糊的理解,并且无法清楚地谈论到他。
如果您是新手开发人员,这可能是可以原谅的,但是如果您申请领导职位,这还不够。 他将如何调试复杂的Promise链,然后向其他人解释他做了什么?

本文是在EDISON Software的支持下编写的,该软件可以保护程序员的健康及其早餐 ,还可以开发定制软件 。
开发人员认为抽象是理所当然的
作为开发人员,我们从事抽象工作。 我们提取否则必须重复的代码。 因此,当我们将重点放在更重要的点上时,我们会接受我们认为理所当然的抽象,并简单地假设它们可以正常工作。
通常是这样,但是当事情变得复杂时,您应该知道这些抽象如何工作。
高级开发候选人认为Promise的抽象是理所当然的。 如果他在一段代码中的某个地方遇到了他,他可能会知道如何与他合作,但是他不理解这个概念,因此无法在面试时重现它。
他只记得代码。 确实没有那么困难:
return new Promise((resolve, reject) => { functionWithCallback((err, result) => { return err ? reject(err) : resolve(result); }); });
我做到了 我们可能都这样做。 您只需要记住一段代码即可使用它。 您或多或少了解它是如何工作的。
但是,如果他真的理解了这个概念,就无需记住它。 他只知道这一点,便可以毫无问题地复制它。
知道你的来源
早在2012年,在前端框架占据主导地位和jQuery统治世界之前,我读过jQuery的创建者John Rezig
的《 JavaScript忍者的秘密》 。
本书将教您如何从头开始创建自己的jQuery,并使您对创建该库的思维过程有独特的理解。 尽管jQuery近年来已成为背景知识,但我还是强烈建议您阅读本书。
这本书令我印象深刻的是我自己能想到的恒久的感觉。 本书中描述的步骤是如此的逻辑和简单,以至于我为自己设定了这样的目标就可以创建jQuery。
实际上,我将永远无法做到这一点-我会发现它太复杂了。 我会认为我的决定过于简单和天真,我只会放弃。 我只是将jQuery视为理所当然并信任它。 在那之后,我可能不明白它是如何工作的。 我只是将其用作黑匣子。
读这本书改变了我。 我开始理解源代码,发现许多实现相当简单,甚至显而易见。
现在,独自提出这些解决方案是完全不同的事情。 但是阅读源代码并自我实现现有解决方案正是帮助您提出自己的想法的方法。
您获得的灵感和发现的模式将改变您作为开发人员的位置。 您会发现,使用并考虑魔术的这个奇妙的库并不是真正的魔术,而仅仅是一个简单而又智能的解决方案。
您可以花一些时间逐步解析代码,这也将迫使您按照作者创建代码的相同步骤进行逐步细化。 这使您对编程过程有更深入的了解,并对自己的决定的执行更有信心。
当我开始在JavaScript中使用Promise时,我认为这是不可思议的。 然后我发现它们是基于回调的,而我对编程的看法已经永远改变了。
该模板本应摆脱回调,是使用...回调实现的?
它改变了我。 这让我意识到这些并不是非常复杂的代码片段,因此我可以弄清楚它们。 如果我有好奇心并渴望潜入这些模型,这些模型将很容易理解。
这是您真正学习编程的方式。 这就是您成为更好的开发人员的方式。
重新发明轮子
因此,让我们重新发明轮子。 编写
自己的数据绑定 ,
自己的Promise甚至是
状态管理解决方案 。
没有人会使用它。 您将自己学到一些新东西。 而且,如果您可以在自己的项目中使用它,那就太好了。 您将进一步开发此代码,并学到更多。
重点不是在生产中使用您的解决方案,而是学习。 编写自己的现有解决方案实施是从最佳实践中学习的好方法。

另请阅读博客
EDISON公司:
20个图书馆
壮观的iOS应用程序