驴Hay alguna manera de mejorar mis habilidades 10 veces? 驴Existe alg煤n secreto m谩gico que, si supiera esto, le abrir铆a un mundo completamente nuevo de destreza y productividad en el desarrollo de software?
Aqu铆 es donde los esc茅pticos piensan: 鈥溌o puedes cortar esquinas aqu铆! 隆Todos tienen que practicar para ser buenos! " Y esto es cierto, pero 驴qu茅 practican los expertos para acelerar el desarrollo de software? 驴Hay algo clave que pueda marcar una gran diferencia?
隆Si! 隆Ahi esta!
Pero incluso si lo comparto con usted, incluso si lo explico en detalle para usted, puede llevarle 10 a帽os crecer y apreciar plenamente su simplicidad.
Al menos eso es lo que me pas贸. Esto me lo ense帽贸 en ingl茅s sencillo mi maestro de programaci贸n de la escuela secundaria. Camin茅 paso a paso a trav茅s del proceso de aplicaci贸n usando algunos ejemplos de c贸digo. Y esto realmente sucedi贸 solo despu茅s de 10 a帽os. Pero ahora, a trav茅s de la experiencia, aprecio profundamente esta lecci贸n, y aunque s茅 que realmente no puedes apreciarla a primera vista, la compartir茅 contigo.
Este secreto es la diferencia clave entre el rendimiento promedio y el rendimiento 10x. Al aprovechar este secreto, puede ser m谩s efectivo en 贸rdenes de magnitud.
Puede escribir c贸digo que sea m谩s reutilizable y menos propenso a romperse cuando se introducen nuevos requisitos y se producen cambios en el c贸digo.
El secreto para ser 10 veces m谩s productivo es dominar la abstracci贸n. Muchos desarrolladores tratan la "abstracci贸n" como una mala palabra. Es posible que escuche consejos como "no resuma demasiado pronto" o el famoso "expl铆cito de Zen Python es mejor que impl铆cito", lo que implica que lo concreto es mejor que lo abstracto. Y todos estos son buenos consejos, dependiendo del contexto.
Pero las aplicaciones modernas usan una gran cantidad de c贸digo. Si imprime el c贸digo fuente de las 10 mejores aplicaciones modernas, estas resmas de papel competir谩n con la altura de los rascacielos, y el mantenimiento del software cuesta mucho dinero. Mientras m谩s c贸digo crees, m谩s cuesta.
La abstracci贸n es la clave del c贸digo simple.
Las abstracciones adecuadas pueden hacer que el c贸digo sea m谩s legible, adaptable y mantenible al ocultar detalles que no son importantes para el contexto actual y al reducir la cantidad de c贸digo necesario para hacer el mismo trabajo, a menudo varias veces.
"La simplicidad es restar lo obvio y agregar algo significativo".
- John Maeda: las leyes de la simplicidad
La abstracci贸n no es una calle de sentido 煤nico. Est谩 formado por dos conceptos adicionales:
- Generalizaci贸n : eliminar partes duplicadas (obvio) y ocultarlas detr谩s de una abstracci贸n.
- Especializaci贸n : el uso de la abstracci贸n para un caso de uso espec铆fico, agregando solo lo que deber铆a ser diferente (significativo).
Considere el siguiente c贸digo:
const doubleList = list => {
const newList = [];
for (var i = 0; i < list.length; i++) {
newList[i] = list[i] * 2;
}
return newList;
};
No hay nada malo con el c贸digo, pero contiene muchos detalles que pueden no ser relevantes para esta aplicaci贸n en particular.
- Incluye informaci贸n detallada sobre la estructura de datos del contenedor utilizada (matriz), lo que significa que solo funcionar谩 con matrices. Contiene la dependencia del formulario de estado .
- Incluye l贸gica de iteraci贸n, lo que significa que si necesita otras operaciones que tambi茅n deben visitar cada elemento en la estructura de datos, tambi茅n deber谩 repetir una l贸gica de iteraci贸n muy similar en este c贸digo. Esto induce a la repetici贸n , lo que puede violar el principio DRY (no se repita) .
- Incluye una asignaci贸n expl铆cita en lugar de una descripci贸n declarativa de la operaci贸n a realizar. Es prolijo .
Nada de esto es necesario. Todo esto se puede ocultar detr谩s de la abstracci贸n. En este caso, una abstracci贸n tan universal que cambi贸 la forma en que creamos aplicaciones modernas y redujo el n煤mero de bucles expl铆citos para los que necesitamos escribir.
"Si tocas una cosa con profunda conciencia, tocas todo".
- Thih Nhat Hanh
Usando la operaci贸n de mapa, podemos acortar el c贸digo a una l铆nea, eliminando lo obvio (las partes que probablemente repetiremos en un c贸digo similar) y enfoc谩ndonos en lo significativo (lo que deber铆a ser diferente para nuestro uso). Ejemplo:
const doubleList = list => list.map(x => x * 2);
Los desarrolladores junior piensan que necesitan escribir mucho c贸digo para obtener m谩s valor.
Los desarrolladores senior entienden el valor del c贸digo que nadie necesita escribir.
Imag铆nese un programador que populariz贸 el uso de la operaci贸n de mapas en lenguajes de programaci贸n como JavaScript. Mapee los res煤menes lejos de detalles como el tipo de datos que est谩 mapeando, el tipo de estructura de datos que contiene los datos y la l贸gica de iteraci贸n requerida para enumerar cada nodo de datos en la estructura de datos. Esto ha aumentado el rendimiento de cada aplicaci贸n que he creado en la 煤ltima d茅cada.
Jeremy Ashkenashizo que varias de estas operaciones fueran populares en JavaScript, y allan贸 el camino para muchos atajos de sintaxis geniales que ahora damos por sentado en JavaScript, us谩ndolos primero en CoffeeScript. Cre贸 Underscore, que gener贸 Lodash (todav铆a la herramienta de programaci贸n funcional m谩s popular en JavaScript) y Backbone, que populariz贸 la arquitectura MVC en JavaScript y sent贸 las bases para Angular y React.
John Resighizo jQuery que fue tan popular e influyente que form贸 la colecci贸n m谩s grande de m贸dulos JavaScript reencapsulados (complementos jQuery) hasta despu茅s de unos a帽os, aparecieron los m贸dulos Node est谩ndar y los m贸dulos ES6. La API jQuery Selector fue tan influyente que se convirti贸 en la base de la moderna API DOM. Me beneficio de esta API casi a diario cuando pruebo los componentes React .
Las abstracciones adecuadas son palancas poderosas que pueden afectar significativamente el rendimiento. La abstracci贸n no es una palabra abusiva. Los m贸dulos, funciones, variables, clases son todas formas de abstracci贸n, y la raz贸n por la que existen es para simplificar la abstracci贸n y componer abstracciones.
No puedes crear programas complejos sin abstracciones. Incluso el lenguaje ensamblador usa abstracciones: nombres para instrucciones, variables para direcciones de memoria, puntos de c贸digo para subrutinas (como llamadas a funciones), etc. El software moderno proporciona una capa de abstracciones 煤tiles, y estas capas le dan la ventaja.
"Dame una palanca lo suficientemente larga y un punto de apoyo sobre el que pueda apoyarme, y ceder茅 al mundo entero".
- Arqu铆medes
La clave de la simplicidad: el secreto que buscamos es c贸mo reducir la cantidad de c贸digo que creamos, c贸mo hacer mucho m谩s con mucho menos. Cuando domines esto, ser谩s 10 veces mejor programador. Lo garantizo.
Descubra los detalles de c贸mo obtener una profesi贸n de alto perfil desde cero o subir de nivel en habilidades y salario tomando los cursos en l铆nea pagos de SkillFactory:
- Curso de aprendizaje autom谩tico (12 semanas)
- Aprendizaje de ciencia de datos desde cero (12 meses)
- Profesi贸n anal铆tica con cualquier nivel inicial (9 meses)
- Curso de Python para desarrollo web (9 meses)