La Complejidad en la Programación

Estos días he pasado leyendo un libro de programación, no un libro de un lenguaje de programación especifico, sino a la tarea de programar misma, el libro se llama Code Simplicity, es un libro interesante y debido a que no tengo algo genial que redactar, y me gusta practicar mi traducción de idiomas, pues me he decidido compartir la traducción de una parte del Libro. Así que empieza así:

Las computadoras han creado el mayor cambio social. La Razón es que nos permiten hacer mucho más trabajo con menos personas. Este es el valor de las computadoras, pueden hacer mucho trabajo de una manera muy rápida.

Eso es Genial.

El problema is que las computadoras presentan problemas, y lo hacen todo el tiempo. Las Mayoría de las personas aunque sea una vez ha tenido una experiencia con algún problema con su computador o comportamientos no deseado. 

Esto No es Genial. Entonces

¿que esta Mal con las computadoras?

¿Porque las computadoras presentan tantos problemas? La Respuesta esta en el Software. Hay una Razón y solo una Razón, Mala Programación. Algunas personas culpan a la gerencia, otros culpan al consumidor, pero las investigaciones prueban que la ruta del problema mismo es siempre Mala Programación.

Pero Que significa Mala Programación. Este es un termino muy ambiguo. Los programadores son generalmente muy inteligentes, personas racionales, ¿como es que ellos hacen Mala Programación?

Básicamente todo esto gira entorno a la complejidad. La computadora es probablemente el computador más complejo que se halla podido crear hasta el día de hoy. Realiza billones de cálculos por segundo. Posee miles de millones de partes electrónicas y que todas deben funcionar perfectamente con el hecho de cumplir su trabajo.

Un programa escrito en un computador puede ser muy complejo también. Por ejemplo cuando fue escrito, Microsoft Windows 2000 fue uno de los programas más grandes creados, en un punto giro al rededor de las 30 millones de lineas de Código. escribiendo todo ese código es como escribir un libro de 200 000 000 de palabras - 5 veces el tamaño de la enciclopedia Británica.

La Complejidad de Un programa puedes ser particularmente confusa. debido a que no hay nada en que puedas poner tus manos. Cuando algo se rompe, tu no puedes puedes tocar algo solido y mirar dentro de el. Todo es abstracto, y debido a eso puede ser difícil de lidiar con los problemas. de hecho el promedio de programas de computadoras son tan complejos que no hay personas que puedan entenderlo como funciona en su totalidad. Los cuales los programas más grandes se adaptan a este caso.

Así, la Programación es el acto de reducir la complejidad a simplicidad. De otra manera nadie pudiera mantenerse trabajando en un programa luego de haber alcanzado cierto grado de complejidad. Las complejas piezas de un programa tienen que estar organizadas de una manera simple que un programador pueda trabajar en este sin tener grandes habilidades mentales.

Este es el Arte y el talento que envuelve la programación - reducir complejidad en simplicidad.

Un Mal Programador es alguien que solo falla en reducir la complejidad. Muchas veces esto sucede debido a que las personas escriben en su lenguaje de programación código que solo funciona, sin pensar en reducir la complejidad de otros programadores.

Es algo como esto: Imagina un ingeniero que en necesidad de algo para golpear un clavo en el suelo, inventa un dispositivo que involucra poleas, cadenas y un magneto grande. Tu probablemente estés pensando que eso sería ridículo. 

Ahora imagina que alguien te dice: "necesito algo de código que pueda usar en cualquier programa, en donde sea y que pueda comunicar dos computadoras usando cualquier medio imaginable", esto es definitivamente más difícil de reducir a algo simple. Así que algunos programadores( la mayoría de ellos) en esta situación vienen con soluciones equivalentes a las poleas, cadenas y el magneto grande que es escasamente comprendido por otras personas. Esto no es irracional y no hay nada de malo con ellos. Cuando se enfrentan a una tarea difícil ellos deben hacer lo que pueden con el tiempo que pueden. Lo que hagan funcionar, en lo que ellos concierne, es lo que se supone que tenia que hacer. es lo que el jefe quiere y es lo que se supone que el cliente parece querer también.

Pero de una manera a otra ellos fallan en reducir la complejidad a simplicidad. Luego ellos pasaran este código a otro programador, que añadirá su propia complejidad, teniendo como resultado código incomprensible. 

Cuando un programa alcanza una complejidad infinita, es imposible encontrar todos los fallos en este. Los aviones Jet cuestan millones o billones de dolares debido a que ellos están muy cerca a esta complejidad. Mucho del Software tienen un precio relativamente bajo, a tales precios, nadie tiene el tiempo o recursos necesarios para reducir la complejidad, así empiezan los programas complejos.

Así que un buen programador debería hacer todo lo que esta en su poder para escribir código de la manera más simple que otro programador lo pueda entender. un buen programador crea cosas que son fáciles de entender, así que es fácil de revisar todos los Bugs. 

Ahora esta idea algunas veces es mal entendida como los programadores no deberían tener mucho código o no deberían usar muchas tecnologías avanzadas. Pero eso no es cierto, algunas veces el tener mucho Código Ayuda a la simplicidad, es solo que involucra más escritura y lectura, que en ocasiones puede estar bien. Es necesario tener documentación corta explicando las grandes cantidades de código, pero todo es parte de reducir al complejidad.

Algunas personas creen que escribir de una manera simple toma más tiempo que escribir rápidamente algo que "haga el trabajo". de Hecho, el tomarse más tiempo en escribir código simple al inicio puede convertirse en una tarea rápida comparada al hecho de escribir código rápido al inicio que luego tome tiempo de entender que hace cada linea. Esta es una gran simplificación del asunto. Muchos programas geniales han estado en fase de desarrollo por mucho tiempo solo porque ha sido muy difícil agregar funcionalidad a sus programas complejos.

Y eso es porque las computadoras fallan muy a menudo, porque en la mayoría de los programas allá afuera muchos de los programadores fallan en reducir ala complejidad de las partes que ellos han escrito. Sí, es difícil, pero no se compara a la inmensa dificultad de la experiencia de los usuarios que tienen que usar programas complejos, que hacen fallar el sistema, diseñados por programadores que han fallado en simplificar.
   

Comentarios