Para realmente entender a roda, você precisa reinventá-la.No outro dia, entrevistei o cargo de desenvolvedor sênior de javascript. Meu colega, que também participou da entrevista, solicitou ao candidato que escrevesse uma função que executasse a solicitação HTTP e a repetisse várias vezes em caso de falha.
Como ele escreveu isso no quadro, o pseudocódigo seria suficiente. Se ele mostrasse um bom entendimento do problema, ficaríamos satisfeitos. Mas, infelizmente, ele não conseguiu encontrar uma boa solução.
Pensando que ele estava nervoso, decidimos facilitar um pouco a tarefa e pedimos que ele convertesse a função baseada no retorno de chamada para a função baseada no Promise.
Sem sorte
Posso dizer que ele já viu código semelhante antes. Ele sabia mais ou menos como isso funcionava. Pseudocódigo demonstrando que ele entende esse conceito seria suficiente.
Mas o código que ele escreveu no quadro não fazia sentido. Ele tinha apenas uma vaga compreensão do conceito de promessa em JavaScript e não podia falar claramente sobre ele.
Pode ser desculpável se você é um desenvolvedor iniciante, mas se você se candidatar a uma posição de liderança, isso não é suficiente. Como ele depurará a complexa cadeia Promise e depois explicará aos outros o que ele fez?

Este artigo foi escrito com o suporte do software EDISON, que cuida da saúde dos programadores e do café da manhã e também desenvolve software personalizado .
Os desenvolvedores tomam abstrações como garantidas
Como desenvolvedores, trabalhamos com abstrações. Nós abstraimos o código que, de outra forma, teria que ser duplicado. Portanto, quando nos concentramos em pontos mais importantes, aceitamos as abstrações com as quais trabalhamos como garantidas e simplesmente assumimos que elas funcionam como deveriam.
Geralmente é, mas quando as coisas ficam complicadas, você deve saber como essas abstrações funcionam.
O candidato sênior ao desenvolvimento considerou a abstração do Promise garantida. Ele provavelmente saberia trabalhar com ele se o encontrasse em algum lugar de um código, mas ele não entendeu o conceito e, portanto, não pôde reproduzi-lo na entrevista.
Ele conseguia se lembrar do código. Realmente não é tão difícil:
return new Promise((resolve, reject) => { functionWithCallback((err, result) => { return err ? reject(err) : resolve(result); }); });
Eu fiz isso. Todos nós provavelmente fazemos isso. Você apenas se lembra de um pedaço de código para poder trabalhar com ele. Você entende mais ou menos como isso funciona.
Mas se ele realmente entendesse o conceito, não precisaria se lembrar dele. Ele simplesmente saberia disso e o reproduziria sem problemas.
Conheça sua fonte
Em 2012, antes que as estruturas de front-end dominassem e o jQuery dominasse o mundo, li
Secrets of the JavaScript Ninja de John Rezig, criador do jQuery.
Este livro ensinará como criar seu próprio jQuery a partir do zero e fornecerá uma compreensão exclusiva dos processos de pensamento por trás da criação desta biblioteca. Embora o jQuery tenha entrado em segundo plano nos últimos anos, eu recomendo a leitura deste livro.
O que me impressionou no livro foi o sentimento constante de que eu mesmo conseguia pensar nele. As etapas descritas no livro eram tão lógicas e simples que eu realmente senti que poderia criar o jQuery se me desse esse objetivo.
Na verdade, eu nunca seria capaz de fazer isso - eu acharia isso muito complicado. Eu pensaria que minhas decisões são muito simples e ingênuas e desistiria. Eu tomaria o jQuery como garantido e confiaria nele. Depois disso, eu provavelmente não entenderia como isso funciona. Eu usaria apenas como uma caixa preta.
A leitura deste livro me mudou. Comecei a entender o código fonte e descobri que muitas implementações eram bastante simples, até óbvias.
Agora, apresentar essas soluções por conta própria é uma questão completamente diferente. Mas ler o código fonte e auto-implementar soluções existentes é exatamente o que ajuda você a criar suas próprias.
A inspiração que você recebe e os padrões que você descobre mudarão você como desenvolvedor. Você descobrirá que essa maravilhosa biblioteca que você usa e considera mágica não é realmente mágica, mas apenas uma solução simples e inteligente.
Você pode gastar tempo analisando o código passo a passo e também forçará você a executar as mesmas etapas pequenas e graduais que os autores tomaram para criá-lo. Isso proporciona uma compreensão mais profunda do processo de programação e mais confiança na implementação de suas próprias decisões.
Quando comecei a usar o Promise em JavaScript, pensei que era mágico. Então eu descobri que eles são baseados em retornos de chamada, e minha visão da programação mudou para sempre.
Este modelo, que deveria se livrar dos retornos de chamada, foi implementado usando ... retornos de chamada?
Isso me mudou. Isso me fez perceber que esses não eram trechos de código incrivelmente complexos, para que eu pudesse descobrir. Esses são modelos que eu poderia entender facilmente se tivesse curiosidade e desejo de mergulhar neles.
Veja como você realmente aprende a programar. Veja como você se torna um desenvolvedor melhor.
Reinventar a roda
Então, vamos reinventar as rodas. Escreva sua
própria ligação de dados ,
sua própria promessa ou mesmo sua
solução de gerenciamento de estado .
Não importa que ninguém use isso. Você aprenderá algo novo para si mesmo. E se você pode usá-lo em um de seus próprios projetos, será ótimo. Você desenvolverá esse código ainda mais e aprenderá ainda mais.
O objetivo não é usar sua solução na produção, mas aprender. Escrever sua própria implementação de uma solução existente é uma ótima maneira de aprender com os melhores.

Leia também o blog
Empresa EDISON:
20 bibliotecas para
aplicação iOS espetacular