No nos compliquemos

Recuerdo que en una ocasión, mientras cursaba la asignatura de "Arquitectura de Computadoras", me enfrenté a un problema. Era una calificada sencilla: desarmar un equipo, y volverlo a armar pieza a pieza. Evidentemente, la computadora debía funcionar luego del proceso. Me lancé con mi compañera de trabajo al tema, y en un par de minutos habíamos acabado.

O eso pensábamos.

Habíamos dejado todo listo para que al conectar la energía se prendiera el equipo. Al conectarla, no hizo nada. Apagué el equipo, desconectamos el cable de energía y procedimos a revisar. Era algo sencillo, y lo corregimos al instante. Conectamos el cable de energía y… nada. No prendía. Revisamos de nuevo, cable a cable, conexión a conexión. Sacamos las piezas, las colocamos de nuevo, y nada. El equipo no quería prender. Las peores ideas no recorrieron en ese momento: ¿se quemó la fuente?¿la placa? ¿el procesador?. En ese momento, mi compañero decidió verificar si llegaba el poder. La fuente tenía energía, pero a la placa no llegaba. Se había quemado esta, con las consecuencias del caso.

Resignados, nos sentamos a esperar que el profesor llegue y conversar sobre como reponer el equipo. El dijo que habría que revisarla de nuevo, pero su rostro no nos daba mucha seguridad. Y entonces… sentado como estaba, se me ocurrió presionar el botón de Start del case. Y por supuesto, el equipo prendió.

No nos compliquemos

Encontrar la solución a un problema puede convertirse en un dilema de por sí. Muchas veces no es simplemente tratar de resolverlo, si no definir finalmente cual es la mejor solución a implementar. Y desgraciadamente, complicarse es una de los atributos que muchos, aunque se alguna vez, hemos compartido. Realizar la solución más compleja y creativa es algo que nos motiva y nos quita muchas veces el sueño. Prueba que tan bien conoces un tema frente al resto y es una forma de marcar status.

Una persona preguntaba una vez como hacer para postear la foto de su "Mii", esos personajes que tenemos en la nueva consola de Nintendo. Las recomendaciones no tardaron en llegar, y finalmente la chica en cuestión se veía casi al borde del llanto al ver el script que tenía que correr para, tras comprarse un adaptador para Bluetooth e instalarlo en su computadora, pudiera convertir la data del Wiimote en una archivo de imagen. ¿Mi recomendación? Que le tome una foto de su celular o cámara digital. A los minutos, posteaba radeante la imagen de su Mii. Y el resto de participantes no tardaron en tomar la recomendación y todos pudieron ver los Miis del resto.

Hay casos peores. ¿Han revisado alguna vez esos posts en foros o blogs donde alguien utiliza, a modo de ejemplo, una pieza de código y los comentarios o respuestas ignoran practicamente el mensaje original y se abocan a buscar una solución a ese código con menos líneas, cada una más críptica que la anterior y en un lenguaje más complejo y técnico?. Son competencias. Y los desarrolladores y programadores amamos la competencia. Y a muchos les encanta complicarse. Y no tiene nada de malo cuando se refiere a temas propios de ocio, investigación y aprendizaje.

¿Pero es válida para cuando realizamos un trabajo "en serio"?. Nuestro primero interés cuando estamos desarrollando una aplicación es, tras cumplir los objetivos y el alcance del mismo, tratar de realizarlo de la forma más sencilla posible. No complicar el código, recordemos que no nos encontramos en una competencia de quien hace la rutina en menos líneas, ni como optimizar hasta la última instrucción que usamos. Por experiencia, puedo decir que el 90% del tiempo y esfuerzo empleado en optimización brindan normalmente un 5% en rapidez. Son en muy contados casos (el 10% restante) donde las mejoras son sustanciales y aún así, pueden requerir realizar cambios importantes para lograrlos.

Realizar implementaciones claras y sencillas permiten también que terceros entiendan nuestro código tan rápidamente. Si revisamos los proyectos OpenSource más populares, encontraremos que muchos de ellos tienen implementaciones sólidas, bien realizadas, y notablemente sencillas. Es cierto, tal vez podrían haberse ahorrar un par de clases y algunas definiciones adicionales pero al hacerlo ¿habrían sido apreciadas con tanta claridad por el público?

Es tal vez esa una de las razones del éxito de lenguajes y frameworks com Ruby y Ruby on Rails, que se orientan a conceptos más pragmáticos: No repetirse (DRY, Don’t Repeat Yourself) y KISS (Keep It Simple, Stupid). Trabajar en ellos es como hablarle directamente al compilador. Algunos de mis amigos detestaron Ruby por eso, no era lo suficientemente arcano para él.

Escribir más líneas de código no es necesariamente síntoma de mala preparación o flojera. Prefiero muchas veces emplear más código (e incluso, más líneas para la documentación) que usar una sólo línea arcana que probablemente nunca más vuelva a utilizar. Y el mejor código, es el código no escrito. Mientras más sencilla y menos compleja es la solución, más sencillo será encontrar un error en la lógica. De lo contrario, nunca sabremos si aquella solución tan inteligente y compleja no tiene algún conflicto con el compilador nuevo que estamos utilizando, o si no es un problema del S.O. que no implementó correctamente esa instrucción que encontramos en la página 790 del manual de C++. O si simplemente, la hicimos mal.

La evolución de un programador normalmente se inicia cuando escribe un código sencillo con las instrucciones que recién ha aprendido. Luego revisa tutoriales y lee libros más complejos y actualiza ese código. Empieza a practicar más y más, y llega a la curva en esta campana que estamos describiendo. Ha llegado a la complejidad máxima, a la búsqueda de la optimización. Y finalmente llega al punto donde comprende la diferencia entre un código eficiente y un código efectivo. Y llegamos de nuevo a la sencillez, que tan humilde, nos espera en el mismo lugar que la dejamos, a un lado del IDE, lejos de los "X ? Y : W".

 

This entry was posted in desarrollo. Bookmark the permalink.

7 Responses to No nos compliquemos

  1. gersonm says:

    muy bonito….¿ pero no te parece demasiado complicado intentar postear un comentario ? :!:

  2. Es la primera vez que me dicen eso :P . Si tienes sugerencias, estaría más que feliz de implementarlas.

  3. Odin says:

    Muy buenos consejos, y muy oportunos. En este momento estaba justo en esa encrucijada en la que crees que mientras más complicado sea tu código mejor programador eres.

  4. Raul Diaz says:

    Alvaro, me ha encantado tu post, es muy cierto lo que dices, en general la mayoría de las veces las cosas se pueden hacer de forma más sencilla.

  5. Bueno, pero como dice ese favorito que tengo en del.icio.us “How to create an awesome logo” y sólo hay una palabra en esa web: Práctica.

  6. Moussa says:

    Hola Alvaro, efectivamente llevas mucha razon en lo que dices en este mensaje, pero yo querria llevarlo un poco mas alla, hablar del caso extremo de “No nos compliquemos”, particularmente de mi experiencia personal (no tiene mucho que ver con tecnicismos ni conocimientos informaticos pero forma parte de mi vida y si puede ayudar a alguien me sentiria muy satisfecho).
    Mi historia empezo el dia en el que llegue a Barcelona, (soy de Marruecos y debido a la poca oferta de carreras en mi pais tuve que abandonarlo) con 18 años, era la primera vez que salia de mi casa por mas de una semana y que entraba en contacto directo con una cultura totalmente desconocida y opuesta a la que habia conocido hasta el momento. Al llegar a la residencia, donde tenia que alojarme, me encontre con un ex-compañero de Instituto del cual tenia muy buenas referencias, ya que se le consideraba buen estudiante, responsable…Debido a todo lo que teniamos en común decidimos compartir habitación y asi fue como empece a impregnarme de todo lo que me rodeaba. Era un chico que pasaba de todo, no iba a clase ni apuntandolo con una pistola. yo que no sabia lo que era la Universidad y engañado por lo que me contaba él (no tienes que hacer nada durante el curso, esto es super facil, con estudiar dos dias antes del examen apruebas…. ) me deje llevar por la situacion (venia de tener 8 horas de clase diarias y me encontre en un “paraiso”) hasta los primeros examenes. Era diciembre, y me presente al examen de Programacion I sin haber hecho ninguna practica, ni haber asistido ningun dia a clase (No nos compliquemos…para que ir a clase si puedes aprobar sin ir) y como es logico suspendi, pero tampoco me importo mucho la verdad (era un puto inconsciente)y asi suspendi otra asignatura y las practicas de una tercera (solo aprobe las asignaturas que tenian que ver con las mates y la fisica).Asi me plante en el segundo trimestre y descubri que mi gran “referente” en realidad hacia 6 meses que lo habian echado de la Universidad ya que no habi aprobado el minimo de creditos exigidos, decidi cambiarme de compañero de habitacion y comenzar una nueva etapa, ya que me sentia completamente engañado.Y asi fue, como conoci a gente que no era de mi carrera y que no tenia las mismas preocupaciones que yo, esto ,sumado a que el segundo trimestre no estaba motivado para ir a clase ya que perdi la base de programacion del primero, derivo en un autentico caos.Ese trimestre no aprobe ninguna asignatura y el tercero tampoco (ya que mi carrera es una especia de cadena y en cuanto se rompe uno es imposible seguirla).Total que me plante en Septiembre con el 70% de los creditos suspendidos, la moral por los suelos (porque mi nota antes de llegar a la universidad era de 9)y sin tener ni idea de programacion; y como es logico no pude pasar de curso lo que me llevo a odiar mas la carrera y a esforzarme menos, entre en un circulo vicioso, conoci a gente peor que la del 2o trimestre de mi primer año y me deje llevar por vicios que no quiero recordar lo que me hundio durante una temporada larga y cuyas secuelas aun sigo sufriendo actualmente. Ese año empece a comprar practicas de programacion a lamer el culo a compañeros de la Uni para consguir que me dejen copiar sus practicas…Un sinfin de cosas que me averguenzan pero de las que he aprendido mucho y asi fue como acabe ese segundo año, pero el 3o las cosas cambiaron, tenia 20 años y ya era un poco mas consciente de los errores que estaba cometiendo y decidi que ya era hora de cambiar, pero ya no era tan facil, las practicas no eran de printear Hello World y yo aun seguia con ese nivel. En definitiva siempre iba dos escalones por debajo del nivel que se me exigia en la Universidad y actualmente voy a empezar 3o con mucho mucho miedo, ya que no tengo ni idea de programar y es en este curso donde empieza realmente lo serio de la carrera. Asi que he decidido empezar a programar este verano pero no esta tan facil la cosa, me cuesta mucho sentarme a ello por miedo al fracaso a no saber resolver mis problemas a la falta de confianza en mi mismo…..
    Solo quiero que esto le sea util a alguien y que no caiga en lo mismo que yo que rectifique a tiempo y que se ponga las pilas en su momento, yo ya llevo 2 años de mi vida perdidos sin haberlos aprovechado lo mas minimo y es lo que mas me duele.
    De todo esto lo unico que me consuela son las experiencias que he acumulado y que me serviran para mi futuro como persona.
    Espero que nadie se confie tanto como yo y que se complique un poco, ya que si no….
    A cuidarse
    Un alma desesperada

  7. XKlibur says:

    Dios!!, Yari, por qué no puedes escribir un post corto T_T. No nos compliquemos con posts largos U_U XD

    Es cierto lo que dices, las personas tienden a complicar las cosas, a buscar soluciones complejas cuando existen tantos cursos de acción simples U_U.

    Mi código es simple ^^…simplemente complejo XD

    P.D: Me dio risa lo de la compu que no encendía XD

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>