¿Cuáles son algunas habilidades de programación, algoritmos o marcos que se ven muy bien pero que son muy simples?

Introduciré el concepto más simple en programación que sigue siendo tan poderoso que todos lo usan.

Inyección de dependencia , un término de 50 $ para un concepto de 10 centavos (tenga en cuenta que está estrictamente relacionado con OOP): pase todas sus dependencias en el constructor de su objeto.

Hacer esto producirá enormes beneficios, como poder probar el objeto, simular partes del mismo, hacerlo flexible y reutilizable y brindarle una mejor arquitectura en general.

Simple y efectivo. Un ejemplo simple (Ruby):

clase HelloWorldProvider
llamada de def
“Hola Mundo”
fin
fin

clase HelloWorld
def initialize (sentencia_proveedor)
@sentence_provider = oración_proveedor
fin

llamada de def
pone @ oración_proveedor.call
fin
fin

proveedor = HelloWorldProvider.new
hello_world = HelloWorld.new (proveedor)
hello_world.call

# => hola mundo

clase NamedHelloWorldProvider
def inicializar (nombre)
@name = name
fin

llamada de def
“hola # {nombre}!”
fin
fin

proveedor = NamedHelloWorldProvider.new (“Francesco”)
hello_world = HelloWorld.new (proveedor)
hello_world.call

# => hola Francesco!

Si bien el ejemplo es horrible, es fácil ver cómo puede reemplazar al proveedor con una oración diferente, o cómo puede probar todo: los dos objetos hacen dos cosas muy diferentes (uno sale a STDOUT, los otros proporcionan “hola mundo” ” cuerda).

Cuando se trata de simplicidad y frescura, mi favorito personal es la macro Lisp 🙂

Es una forma de decirle al compilador “amigo, si ves esta palabra aquí, no te molestes con el resto del código; llame a esta función que he definido aquí para obtener el código de reemplazo y compílelo en su lugar “.

Eso es todo, eso es todo.

Sin embargo, esto es algo que permite un estilo completamente nuevo de programación, llamado “metaprogramación”: escribir programas que escriben programas.

Suena un poco raro, pero en realidad no lo es: los metaprogramas no son de ninguna manera diferentes de un programa normal; de hecho, ¡solo los escribes en el mismo idioma que ya estás usando!

Por ejemplo, tengo esta aplicación que le permite mostrar y manipular diferentes formas geométricas en la pantalla con un lenguaje “natural”:

Los detalles de cómo funciona no son importantes, pero hay una función que toma una “oración” e intenta traducirla al código Lisp real. Normalmente, ese código solo se pasa a eval , para ser compilado y ejecutado. Nada extraño aquí, todo lo que podrías haber hecho en cualquier idioma.

Sin embargo, haz esto:

(defmacro shapelang (y cuerpo cuerpo)
`(progn
, @ (mapcar # ‘cuerpo de análisis)))

… Y ahora podemos escribir funciones que usan nuestra sintaxis personalizada!

(defun hola ()
(Shapelang
(haz un círculo grande * blanco *)
(moverlo hacia arriba)
(moverlo hacia arriba)
(haz un círculo pequeño * azul *)
(moverlo a la derecha)))

Lo que el compilador realmente ve dentro de la función hello es esto:

(PROGN (INSERTAR-ULTIMO EN ESCENA (CÍRCULO DE INSTALACIÓN: COLOR * BLANCO *: TAMAÑO 100))
(MOVER-Y (ÚLTIMA ESCENA) -20)
(MOVER-Y (ÚLTIMA ESCENA) -20)
(INSERTAR-ULTIMO EN ESCENA (CÍRCULO DE INSTALACIÓN: COLOR * AZUL *: TAMAÑO 20))
(MOVER-X (ÚLTIMA ESCENA) 20))

Eso es genial si me preguntas 🙂

Fractales

Los fractales pueden ser increíblemente hermosos, pero como resultado de funciones recursivas, son muy simples de implementar.

El programa que genera estos fractales se realizó en menos de 100 líneas de código limpio usando Haskell y apenas requirió matemáticas de secundaria:

Eché un vistazo al código C de un programa que mostraba el famoso conjunto de Mandelbrot a continuación. No conté el número exacto de líneas de código, pero una vez más, era engañosamente pequeño, y una vez más, apenas requería matemáticas de la escuela secundaria, además de números complejos, que de todos modos son fáciles de aprender.

Inspirado por los bonitos gráficos de Mickael Bergeron Neron, ¿podría sugerir el autómata celular – Wikipedia?

El más conocido de estos es Conway’s Game of Life – Wikipedia, que crea un patrón de patrón 2D cambiante basado en un patrón de inicio 2D. Me gustan los autómatas celulares 1D, que crean patrones 2D estáticos de una línea a la vez.

Apuesto a que casi todos los que programan por diversión han escrito un programa de Juego de la Vida.

Increíblemente fácil de escribir, resultados realmente geniales,

No hay ninguno. La programación es difícil. Si estás buscando algo simple y fácil, estás en el campo equivocado. Cualquier cosa que parezca genial es difícil de hacer y requiere mucha habilidad y conocimiento.