全文共1944字,预计学习时长4分钟
图源Unsplash,拍摄者JonCartagena
某天,笔者给一名应聘高级职位的JavaScript开发者面试。面试中有一道题目是要求面试者编写一个能够展示HTTP呼叫的函数,若没写出来就多试几次。
由于是在白板上写,只要面试者能写出伪代码,就已经足够了。但如果他还能分享一些对该问题的理解,那就更好了。很遗憾,他没能想出一个好方法。
我们看出他的紧张,决定把题改得简单些,让他将回调函数改为承诺函数。
他也失败了。
能看得出他曾见过类似编码,也或多或少知道操作的方法。写出伪代码表明他已理解概念,这本已足够了。
但是他写在白板上的代码完全没意义。他只略懂JavaScript承诺函数的概念,但并不能很好地解释它。
如果作为中级开发者,他还能蒙混过关,但要应聘高级职位,就行不通了。他如何能解析一个复杂的承诺链,并解释给别人听呢?
开发者需要不假思索地使用抽象
开发者和抽象打交道。他们要提取代码,使其变抽象,否则就要重做。所以当人们把精力放在更重要的部分上,他们理所当然地断定抽象能发挥作用。
通常来说,抽象确实能起作用。但当事情变得复杂,开发者就要真正了解抽象是如何运作的。
竞争高级开发者职位的面试者就理所当然地使用了承诺抽象。如果他在某一处发现了一段代码,他很可能知道如何使用它,但他并未真正理解概念,因而无法在面试时重现操作。
他本可以记住代码,这没那么复杂:
returnnew Promise((resolve, reject) => {
functionWithCallback((err, result)=> {
return err ? reject(err) :resolve(result);
});
});
笔者就背过代码。可能大家都背过。只要记住了一段代码,人们就能使用它,也算或多或少了解其运作的方式。
但如果那位面试者已完全理解概念,就无需记代码了。他已经从深层了解了这个代码,并轻松地再现它。
了解自我根源
2012年,前端框架尚未成为主流,jQuery(一种JavaScript代码库)还是世界霸主。笔者当时正在读jQuery创始人约翰·莱西格的《JavaScript忍者的秘密》。
这本书教人们如何从小白一步步到创建个人的jQuery,让人们以独特的视角了解代码库创建背后的思维过程。尽管jQuery在过去几年已经淡出人们的视线,笔者还是强烈推荐这本书,很值得一读。
书中最令人触动的是,它让读者一直觉得自己也能建出jQuery。书中各步骤都很有逻辑、直截了当,让读者觉得如果自己尝试去做,也能成功创建。
当然,现实中笔者永远做不到,因为这一切太过复杂,而自己的方法太过简单、天真,根本没法成功,很快就会放弃。笔者只会想当然的认为jQuery是可行的。在此之后,可能也不会花时间思考其工作原理,只会把它当作一个黑匣子。
然而这本书改变了笔者。阅读源代码后,笔者发现许多步骤是以非常直白,甚至显而易见的方式去实施。
目前,自己想出解决措施确实是另一回事,但是阅读源代码、重新执行现存的措施的确能有所助益。
从中受到的启发和发现的模式会将人变为一名开发者。人们会明白,正使用的、像魔法一般了不起的图书馆其实没那么神奇,它不过是一个简单、有智慧的解决方案。
人们或许要花时间一步步理解编码,但作者也是这么过来的,每一步都很微小却很扎实,最终创造出编码。因此,人们能深入了解编码过程,能更自信地设计编码、创造自己的解决方案。
记得刚使用JavaScript承诺时,笔者觉得它太神奇了。在明白它们仅仅基于回调函数后,笔者对编程的看法就此改变。
这一模式本是为了摆脱回调函数,结果却......再次使用回调函数来执行?
这一切改变了笔者。这些并非是过于复杂、让人无法理解的编码片段。如果有兴趣、有意愿钻研的话,笔者也可以轻松地理解这些模式。
这才是真正要学习的编程方法。只有这样,才能成为一名更出色的开发者。
造出自己的轮子
那就继续向前,重新改造轮子吧。编写出自己的数据绑定、自己的承诺函数、甚至自己的状态管理解决方案吧。
哪怕将来没人使用,也没关系。开发者们能从中学到东西,如果他们能在自己某个项目中使用这些编码,就已经很棒了。他们会继续研发,也更有收获。
在生产中运用解决方法并非重点,学习才是。对现有解决方案的实现进行编码,是向榜样学习的最佳途径。
留言 点赞 关注
我们一起分享AI学习与发展的干货
欢迎关注全平台AI垂类自媒体 “读芯术”
(添加小编微信:dxsxbb,加入读者圈,一起讨论最新鲜的人工智能科技哦~)