Por qu茅 es 煤til reinventar las ruedas



El otro d铆a, entrevist茅 a un desarrollador de JavaScript que afirmaba ser senior. Un colega que tambi茅n estuvo presente en la entrevista le pidi贸 al candidato que escribiera una funci贸n que produjera una solicitud HTTP y, en caso de falla, vuelva a intentarlo varias veces.

Escribi贸 el c贸digo inmediatamente en la pizarra, por lo que ser铆a suficiente para representar algo aproximado. Si simplemente demostrara que comprende bien cu谩l es la esencia del asunto, estar铆amos completamente satisfechos. Pero, desafortunadamente, no pudo encontrar una soluci贸n exitosa. Luego, descartando esto como emoci贸n, decidimos facilitar un poco la tarea y le pedimos que hiciera una funci贸n basada en las promesas de una funci贸n con devoluciones de llamada.

Pero por desgracia. S铆, era obvio que hab铆a encontrado un c贸digo similar antes. En general, sab铆a c贸mo funcionaba todo all铆. Ser铆a suficiente un boceto de una soluci贸n que demostrara una comprensi贸n del concepto. Sin embargo, el c贸digo que el candidato escribi贸 en la pizarra no ten铆a ning煤n sentido. Ten铆a una idea extremadamente vaga de cu谩les eran las promesas de JavaScript y no pod铆a explicar realmente por qu茅 eran necesarias. Para el junior, esto habr铆a sido excusable, pero la posici贸n del senior ya no estaba dibujada. 驴C贸mo podr铆a este desarrollador eliminar errores en una cadena compleja con promesas y explicar a los dem谩s qu茅 hizo exactamente?

Los desarrolladores consideran que el c贸digo listo para usar es evidente


En el proceso de desarrollo, nos encontramos constantemente con materiales reproducibles. Transferimos fragmentos de c贸digo para no tener que registrarlos cada vez. En consecuencia, enfocando toda nuestra atenci贸n en las partes clave, miramos el c贸digo terminado con el que trabajamos como algo evidente, simplemente asumimos que todo funcionar谩 como deber铆a en 茅l.

Y por lo general, realmente funciona, pero cuando surgen dificultades, una comprensi贸n de su mec谩nica m谩s que vale la pena.

Por lo tanto, nuestro candidato para el puesto de desarrollador senior consideraba que los objetos de promesa eran evidentes. Probablemente se imagin贸 c贸mo tratar con ellos cuando se encuentran en alg煤n lugar del c贸digo de otra persona, pero no entendi贸 el principio general y no pudo repetirlo 茅l mismo en la entrevista. Quiz谩s recordaba el fragmento de memoria, no es tan dif铆cil:

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

Yo tambi茅n lo hice. S铆, todos nosotros, probablemente, alg煤n d铆a lo hicimos. Simplemente memorizaron un fragmento de c贸digo, para que luego pudieran usarlo en su trabajo, mientras solo en t茅rminos generales imaginaban c贸mo funciona todo all铆. Pero si el desarrollador realmente entendiera el concepto, no tendr铆a que memorizar nada, solo sabr铆a c贸mo hacerlo y reproducir铆a f谩cilmente todo lo necesario en el c贸digo.

Llegar a las ra铆ces


En 2012, cuando a煤n no se hab铆a establecido el dominio de los frameworks front-end, jQuery gobierna el mundo y le铆 el libro Secrets of the JavaScript Ninja , escrito por John Rezig, creador de jQuery.

El libro le ense帽a al lector c贸mo crear su propio jQuery desde cero y brinda una oportunidad 煤nica para unirse al tren de pensamiento que condujo a la creaci贸n de la biblioteca. En los 煤ltimos a帽os, jQuery ha perdido su antigua popularidad, pero todav铆a recomiendo el libro. Lo que m谩s me sorprendi贸 de ella fue la sensaci贸n persistente de que yo mismo pod铆a pensar en todo esto. Los pasos que pint贸 el autor parec铆an tan l贸gicos, tan comprensibles que me pareci贸 seriamente que podr铆a crear f谩cilmente jQuery, solo si me dedicaba a los negocios.

Por supuesto, en realidad, no habr铆a dominado algo como esto, habr铆a decidido que era extremadamente dif铆cil. Mis propias decisiones me parecer铆an demasiado simples e ingenuas para trabajar, y me rendir铆a. Atribuir铆a jQuery a cosas evidentes, cuya operaci贸n correcta solo necesita creer ciegamente. Posteriormente, apenas habr铆a perdido el tiempo profundizando en la mec谩nica de esta biblioteca, pero simplemente la habr铆a usado como una especie de caja negra.

Pero conocer este libro me hizo una persona diferente. Comenc茅 a leer el c贸digo fuente y descubr铆 que la implementaci贸n de muchas soluciones es realmente muy transparente, incluso obvia. No, por supuesto, pensar en algo as铆, esto es de otra 贸pera. Pero es el estudio del c贸digo de otra persona y la reproducci贸n de las soluciones existentes lo que nos ayuda a encontrar algo propio.

La inspiraci贸n que dibujes y los patrones que comiences a notar te cambiar谩n como desarrollador. Encontrar谩 que la hermosa biblioteca que usa constantemente y que est谩 acostumbrado a considerar como un artefacto m谩gico, no funciona en absoluto con magia, sino que simplemente resuelve el problema de manera sucinta e ingeniosa.

A veces ser谩 necesario analizar detenidamente el c贸digo, desarm谩ndolo paso a paso, pero as铆, movi茅ndose en peque帽os pasos consecutivos, puede repetir el camino del autor hacia la soluci贸n. Esto le permitir谩 profundizar en el proceso de escribir c贸digo y brindarle m谩s confianza al buscar sus propias soluciones.

Cuando comenc茅 a trabajar con promesas, me pareci贸 que esto era pura magia. Luego descubr铆 que se basaban en las mismas devoluciones de llamada, y mi mundo de programaci贸n se volc贸. Es decir, 驴un patr贸n cuyo prop贸sito es salvarnos de las devoluciones de llamada se implementa mediante devoluciones de llamada?

Esto me ayud贸 a mirar el asunto con otros ojos y darme cuenta de que no hay algunos c贸digos abstrusos frente a m铆, la complejidad trascendental que nunca puedo comprender en mi vida. Estos son solo patrones que se pueden entender f谩cilmente con la debida curiosidad y una profunda inmersi贸n. As铆 es como las personas aprenden a programar y crecer como desarrolladores.

Reinventa esta rueda


Por lo tanto, si茅ntase libre de reinventar las ruedas: escriba el c贸digo para el enlace de datos usted mismo, cree una promesa local o incluso tome la decisi贸n de manejar sus condiciones con sus propias manos.
No importa que nadie use todo esto, pero ahora puedes hacerlo. Y si tendr谩 la oportunidad de utilizar posteriormente tales desarrollos en sus propios proyectos, esto generalmente es excelente. Puedes desarrollarlos y aprender algo m谩s.

El punto aqu铆 no es enviar su c贸digo a producci贸n, sino aprender algo nuevo. Prescribir la implementaci贸n de una soluci贸n existente por su cuenta es una excelente manera de aprender de los mejores programadores y, por lo tanto, perfeccionar sus habilidades.

Source: https://habr.com/ru/post/472006/


All Articles