4 puntos por GN⁺ 2025-08-20 | Aún no hay comentarios. | Compartir por WhatsApp
  • La forma de programar de izquierda a derecha mantiene el programa en un estado válido desde el momento en que se escribe el código, lo que maximiza el soporte de herramientas como el autocompletado del editor
  • Las list comprehensions de Python dificultan el autocompletado por el uso de variables no declaradas y la ausencia de inferencia de tipos
  • Rust y JavaScript permiten construir programas de forma natural de izquierda a derecha, por lo que el uso de variables y la exploración de métodos resultan más intuitivos
  • El estilo funcional en C y Python perjudica una experiencia de codificación eficiente por la baja capacidad de descubrimiento de nombres de funciones o estructuras
  • En una lógica de alta complejidad, el código que se desarrolla de izquierda a derecha es más fácil de leer y ofrece mejor mantenimiento y escalabilidad

Programar de izquierda a derecha

El código debe ser válido desde el momento en que se escribe


Limitaciones de las list comprehensions de Python

  • La sintaxis de list comprehensions de Python, words_on_lines = [line.split() for line in text.splitlines()], genera el problema de que el editor no puede ofrecer correctamente autocompletado ni inferencia de tipos, porque necesita acceder a una variable no declarada (line)
  • Durante el proceso de escribir el código de forma parcial
    • si se escribe words_on_lines = [line.sp, el editor no puede saber el tipo de line, así que no puede sugerir métodos
    • también se vuelve difícil detectar errores potenciales, como un typo en el nombre de la variable (lime, por ejemplo)
  • Para recibir sugerencias correctas, hay que escribir código incompleto, y ese proceso resulta poco intuitivo e incómodo

Composición de izquierda a derecha en Rust

  • En el ejemplo de Rust, let words_on_lines = text.lines().map(|line| line.split_whitespace());
    • como la variable (line) se considera declarada en el momento en que aparece por primera vez junto con la función anónima, se vuelve posible obtener de inmediato autocompletado y sugerencias de métodos
    • de hecho, el método split_whitespace también fue fácil de encontrar gracias a la sugerencia automática
  • Este enfoque mantiene el programa siempre en un estado válido al menos de forma parcial, por lo que el IDE o editor puede asistir la escritura de código en tiempo real

Divulgación progresiva (Progressive Disclosure) y usabilidad de APIs

  • La divulgación progresiva (Progressive Disclosure) es un principio de diseño en el que el usuario solo experimenta la complejidad que necesita, y también puede aplicarse a la programación
    • ejemplo: es similar a la UX de un procesador de texto donde las opciones relacionadas solo aparecen al insertar una imagen
  • El lenguaje C carece de este tipo de apoyo
    • como no se pueden explorar todas las funciones relacionadas con FILE *file mediante file., hay que memorizar patrones en los nombres de funciones (fread, fclose, etc.), y resulta difícil descubrir funcionalidades
    • en cambio, en un lenguaje ideal, sería posible descubrir progresivamente funciones relacionadas mediante sugerencias de métodos a través de file.

Diferencia en la capacidad de descubrimiento de funciones y métodos

  • Comparación entre los ejemplos map(len, text.split()) de Python y text.split(" ").map(word => word.length) de JavaScript
    • en Python, como no es predecible cuál será el nombre de la función (len, length, size, etc.), hay que probar varias opciones para saber cuál funciona realmente
    • en JavaScript, basta con escribir .l después de word. para que el editor sugiera métodos como length, lo que da una alta capacidad de descubrimiento
    • incluso con funciones de orden superior como map, el valor de retorno real y el tipo de dato se vuelven evidentes de inmediato

Cuanto más compleja es la lógica, mayores son las ventajas de escribir con estructura

  • En el caso de una lógica compleja (código largo de Python con filter y lambda anidados)
    • hay que revisar repetidamente el inicio y el final del código, y aparecen problemas de legibilidad y de comprensión con expresiones condicionales o emparejamiento de paréntesis
  • En la versión equivalente en JavaScript, el código puede leerse y entenderse secuencialmente de arriba hacia abajo y de izquierda a derecha

Principio clave

El código debe ser válido en cada momento en que se escribe

  • Incluso al escribir solo text, el programa permanece en un estado válido
  • Aunque se escriba hasta text.split(" "), y luego se continúe con .map(word => word.length), el estado intermedio completo siempre sigue siendo válido
  • Este patrón de escritura de código incrementa la posibilidad de soporte en tiempo real por parte del editor, y en un entorno REPL incluso permite verificar resultados al instante

Conclusión

  • El diseño de APIs y lenguajes debe permitir escribir código de forma natural de izquierda a derecha y crear un programa válido en cada etapa intermedia
  • Un buen diseño de APIs es la clave para mejorar esta experiencia de codificación

Aún no hay comentarios.

Aún no hay comentarios.