Conceptos de código limpio

Después de observar los cambios que se han ido realizando en los proyectos de código de mis alumnos, me puse a pensar en el concepto de código limpio el cuál para mi significa lo siguiente:

El código limpio es aquel código que es fácil de leer, fácil de entender y muestra un rendimiento óptimo.

¿Pero qué piensan otros programadores acerca del código limpio? para esto, voy a tomar algunas citas del libro Código limpio de Robert C. Martin.

Empecemos con Bjarne Stroustop, desarrollador del lenguaje de programación C++ y autor de The C++ Programming Language

Me gusta que mi código sea elegante y eficaz. La lógica debe ser directa para evitar errores ocultos, las dependencias deben de ser mínimas para facilitar el mantenimiento, el procesamiento de errores completo y sujeto a una estrategia articulada, y el rendimienot debe ser óptimo para que los usuarios no tiendan a estropear el código con optimizaciones sin sentido. El código limpio hace bien una cosa.

Grady Booch, autor de Object Oriented Analysis and Design with Applications

El código limpio es simple y directo. El código limpio se lee como un texto bien escrito. El código limpio no oculta la intención del diseñador si no que muestra nítidas abstracciones y líneas directas de control.

Big’ Dave Thomas, fundador de OTI, el padrino de la estrategia Eclipse.

El código limpio se puede leer y mejorar por parte de un programador que no sea su autor original. Tiene pruebas de unidad y aceptación. Tiene nombres con sentido. Ofrece una y no varias formas de hacer algo. Sus dependencias son mínimas, se definen de forma explícita y ofrece una API clara y mínima. El código debe ser culto en función del lenguaje, ya que no toda la información necesaria se puede expresar de forma clara en el código.

Michael Feathers, autor de Working Effectively with Legacy Code.

Podría enumerar todas las cualidades del código limpio pero hay una principal que engloba a todas ellas. El código limpio siempre parece que ha sido escrito por alguien a quien le importa. No hay nada evidente que hacer para mejorarlo. El autor del código pensó en todos los aspectos posibles y si intentamos imaginar alguna mejora, volvemos al punto de partida y sólo nos queda disfrutar del código que alguien a quien le importa realmente nos ha proporcionado.

Después de observar estas citas y algunas más, creo que las características que debe cumplir el código limpio son las siugientes:

  • Legible
  • Simple
  • Elegancia
  • Eficaz
  • Óptimo
  • Con pruebas

Seguro se pueden agregar más características para un código limpio, un buen código.

Año nuevo

Y bueno ya comenzó otro año, hay tantas cosas por hacer qué uno anda todo norteado. Creo que una de las cosas interesantes este año es que el curso de introducción a la programación con Java, el cuál doy casi cada 6 meses, tiene personas animadas para aprender a programar. Tal vez fue un poco cruel el hacer que la clase sea de 8 a 10 de la mañana pero bueh…

A pesar de que ayer regresé a mis días normales de trabajo, aún me siento fuera de lugar. Será por qué me desvelé mucho en vacaciones y estuve enfermo… whatever…

homer-thinking.png

Pero bueno, este año tengo que retomar mi dominio sobre clojure y retomar todas las cosas que se quedarón pendientes desde diciembre, hay tanto por pensar, qué hasta me dió por escuchar música que no escuchaba desde hace mucho tiempo.

Bueno es hora de comenzar a trabajar en este año nuevo.

¿Qué hacer?

A veces no sé ni por donde empezar cuando tengo que realizar alguna actividad. Así que el día de hoy he comenzado a formalizar las cosas que mejor me funcionan a la hora de trabajar.

¿Qué es lo que quiero hacer?

La primera cosa que se tiene que hacer es entender el problema que vas a atacar, esto implica que tendrás que hacer muchas preguntas: “¿qué?, ¿cómo?, ¿cuándo?, ¿donde?, etc”. La segunda cosa que hay que hacer es definir un plan de acción: ¿cómo voy a atacar el problema, qué opciones tengo. Y la tercera es atacar el problema y en caso de ser necesario regresar al primer punto.

¿Por donde empezar?

Una vez que ya entendiste el problema, lo primero que hay que hacer es definir nuevas tareas. Una vez que estén definidas nuestras tareas, hay que comenzar a definir tiempos para resolverlas. Esto implica que debes de haber tenido que realizar un examen de restrospección sobre ti mismo, entendiendo en que cosas eres experto y en que no y así poder definir deadlineas cada vez más exactos.

Comienza a programar

Una vez que comienzas a programar, no pares hasta que termines de implementar el funcionamiento que buscas. Cuesta mucho tiempo el tener que estar revisando el funcionamiento para cada linea de código que implementas.

Domina las herramientas que estás usando

Las herramientas que estás usando siempre conllevan un grado de complejidad al aprenderlas. Esto no implica que debas de dejar de aprenderlas porqué lleguen a ser muy complejas. En todo caso dominalas y ve el potencial que te pueden proveer.

Define tiempos para todo

Lleva un control de los tiempos que tienes y dedicadas a cada tarea. Comienza a dividirlas en las siguientes áreas:

  • Pensando.
  • Aprendiendo.
  • Haciendo.
  • Compartiendo.
  • Revisando.

Una vez que las tengas identificadas, dentro de cada área, vuelve a dividir las actividades por tiempos:

  • Dedicación: Poco tiempo.
  • Dedicación: Mucho tiempo.
  • Estado de la actividad.
  • Cuál es el siguiente paso.