Programar es fácil, programar es difícil

Es curioso cuando escucho a personas hablar de la dificultad de la programación ya que algunos me cuentan lo fácil que es programar y otros me dicen que es difícil. Hay personas que dicen que te puedes hacer un portal con X funcionalidades en dos días y otras que hace falta una correspondiente ingeniería, documentación, test de pruebas, etc. En resumen, he oído de todo. Por ello me gustaría aquí comentar en que consiste programar y si en realidad es tan fácil como unos cuentan o realmente es tan difícil como cuentan otros.

Programar es dar ordenes al ordenador para que realice un trabajo. En ciertas maneras un programador debe enseñar y comunicarle al ordenador que debe hacer. En cierta manera, al igual que existen personas que conocen diferentes idiomas como español, inglés o alemán y hacen de traductores, un programador también es un traductor de un lenguaje humano a un lenguaje más matemático.

Entonces, si programar solo es traducir ideas de un lenguaje humano a un lenguaje máquina, ¿por qué hay tanta discrepancia cuando se opina sobre la dificultad de programar?.

Ser profesores de las máquinas

Todo se resume pensando que nosotros somos los profesores de las máquinas. Cuando éramos pequeños alguien nos enseñó a atarnos las zapatillas. “Pones aquí el dedo, rodeas con el cordón el dedo, haces una vuelta…”. Estuvimos practicando una serie de pasos secuenciales una y otra vez hasta que lo aprendimos. Sinceramente, ¡fue muy duro!. Pero al final cuando conseguimos hacerlo de carrerilla llamamos a eso: “Atarse los zapatos“.

Igualmente, hubo muchas más cosas que nos costó aprender: andar, hablar, ir en bici, etc. A todas estas secuencias de acciones les dimos un nombre para poder abreviar la comunicación cuando hablamos con otra persona. Cuando pedimos a alguien que ande, esta persona ejecuta pasos preaprendidos previamente.

Si ahora le dijésemos que ande con las manos seguramente nos mirará con cara incrédula y nos diga que no. Tu puedes decir, “¿por qué no?. Es posible andar con las manos. ¡Lo he visto en youtube!“. Sin embargo, nadie le ha enseñado aún andar con las manos por lo que hemos pasado de dar órdenes sencillas de alto nivel a tener que dar órdenes más complejas de bajo nivel si queremos que ande con las manos.

La programación es exactamente lo mismo. Siempre estamos enseñando al ordenador introduciendo secuencias de acciones. Finalmente, cuando tenemos una secuencia satisfactoria le damos un nombre y en un futuro para abreviar en la comunicación con la máquina tan solo la nombramos como en la comunicación con las personas cuando damos una orden de andar. Cuanto más alto nivel sean las instrucciones que queramos dar, más secuencias aprendidas debe tener el ordenador y podremos hacer más programa en menor número de palabras o instrucciones.

Enseñar a diferentes niveles de abstracción

Pero programar a alto nivel tiene también sus problemas. Sería como dar ordenes a una persona que ya ha aprendido y ya es adulta. Cuando nosotros pedimos que haga algo, lo hará como desde su infancia ha aprendido. Si deseásemos que hiciese algo pero de otra forma, no solo tendremos el problema de tener que volver a enseñarle a bajo nivel, también tendremos el problema de que ya tiene unos hábitos y deberemos lidiar además con lo que ya tiene aprendido. En programación ocurre lo mismo. Desear añadir más funcionalidades u opciones a una librería o framework se va volviendo más complicado a medida que esa librería sabe hacer más cosas.

Programar a bajo nivel detallando los pasos tu mismo, tiene como ventajas que moldeas el comportamiento del ordenador como tu quieras. Sería como tener un niño pequeño que quieres que de mayor sea futbolista y estas constantemente enseñándole tus conocimientos de futbolista. Cuando sea mayor seguramente será un buen futbolista según tus conocimientos. Pero como desventajas se necesita más esfuerzo para conseguir menos resultados o, mejor dicho, resultados más específicos.

Por ello, cuando oigas a alguien que programar es fácil, seguramente tendrá una librería, herramienta o framework y sus necesidades están contempladas por esa librería utilizando ya el propio conocimiento de la librería. Seria como contratar a un experto y pedirle que haga lo que sabe hacer.

Cuando oigas que programar es difícil, seguramente serán casos en el que las necesidades son muy dispersas y no dispone de una librería o framework que le pueda ayudar a todo teniendo que estar programando a bajo nivel. También puede que tengan que estar añadiendo funcionalidad a una librería que ya de por sí tiene ya mucho conocimiento y código. También he visto algún caso en el que el programador no sabe enseñar a las máquinas y, como he dicho antes, darle nombre a las secuencias de ordenes para abreviar la comunicación en un futuro para poder darle la misma orden.

Conclusión

Por ello cada secuencia que enseñes o cada instrucción que comuniques puede tener una complejidad dispersa. Programar es enseñar y al igual que no todo el mundo sabe aprender todas las cosas, no todos los programas pueden asimilar todas las funcionalidades que quieras. En conclusión, no se trata de si programar es fácil o difícil. Preguntate: “¿Cómo de difícil es lo que quieres enseñar a tu ordenador?”

Portada de Genbeta