Thinking in C

Creo que si los ordenadores pensasen lo harían en C.

Hace no mucho leí un post en algún blog super Web2.0 que decía algo así como: “Compiled languages are dead”

Gran reflexión. Supongo que viniendo de gente para los que su mundo es la Web2.0 es razonable. Os contaré lo que pienso que para eso es mi blog. Yo trabajo principalmente en dos entornos y con dos lenguajes de programación.

Por un lado trabajo en C. Trabajo diseñando e implementando una pila de protocolos WiMAX. Una pasada, se lo recomiendo a cualquiera que se atreva a decir que le gusta el soft. En este trabajo aprendes lo crítico que puede ser poner una sentencia if que casi siempre va o no va a ser cierta. Trabajando en C con código crítico te das cuenta de que detrás de cada línea hay un microprocesador ejecutando lo que escribes. Te das cuenta el problema de reservar memoria cuando no debes, o la importancia del número de parámetros y variables locales de una función. Todo cuenta.
Por otra parte trabajo en C# en proyectoradio diseñando una aplicación de usuario. C# tiene un montón de virtudes y es, probablemente, uno de mis lenguajes de programación favoritos. Tiene abstracciones muy útiles como las propiedades de los objetos, la gestión de memoria automática, las referencias seguras y los delegates. C# ayuda a crear aplicaciones grandes y potentes de forma bastante sencilla. Pero tiene un problema: hace que te olvides fácilmente que debajo de tu aplicación hay unos recursos limitados y una máquina ejecutando código. Lo digo por experiencia.

Supongo que tengo la visión de los dos lados. He escrito mucho C y mucho C#. Trabajar con C ayuda muchísimo a escribir código C# mucho más eficiente y rápido, lo digo de verdad. La gestión de memoria en C ayuda a que en C# no te dejes referencias sin anular. La gestión de la pila, la memoria, las llamadas, los paths de ejecución… todo es muy útil.

Trabajar con C# también ayuda a trabajar en C mejor. Los patrones de diseño orientados a las interfaces, las funciones polimórficas o virtuales… todo es totalmente aplicable a C si se sabe como. Nosotros trabajamos en C orientando el diseño totalmente a objetos. Solo requiere escribir un poquito más de código a la hora de crear las estructuras de datos, pero los paths de ejecución son tan buenos, o mejores, que los tradicionales de C. Un día escribiré un post con algunas de mis técnicas favoritas.

Pero al final, muy abajo, tan cerca del micro que casi lo puedes tocar… está C. Vale, de acuerdo, está el código máquina, pero C es tan parecido al ensamblador… es un ensamblador universal a todos los microprocesadores y puedes estar tan cerca de la máquina como quieras. Por eso creo que si los ordenadores pensasen lo harían en C. Jamás creo que los lenguajes compilados puedan desaparecer, al menos mientras los ordenadores sean tal y como los conocemos o parecidos. Siempre habrá que escribir un intérprete, siempre habrá que escribir software para manejar dispositivos, sistemas de archivos, gestión de memoria… Si queremos que la potencia de nuestros ordenadores no creza de forma absurda, si queremos aprovechar todo lo que son capaces de darnos hay que pensar que detrás de cada línea de phyton o de php hay miles de instrucciones ejecutándose. ¿Todavía nos preguntamos porqué para servir unos tristes 200Kbytes de html haya que tener unos monstruos de servidores? Sin lenguajes compilados no podrían existir routers ADSL/WiFi/Ethernet por 100€. Si los lenguajes javeros no existieran los juegos de móviles serían muchísimo mejores.

En cierta forma, este post es un alegato en favor de aprender informática de verdad. Donde el diseño estructural es tan importante como la codificación de una función. Donde la elección del lenguaje no venga impuesta por la última moda. Es un alegato para que en las escuelas de ingenieros se siga enseñando C como la mejor herramienta para aprender sobre ordenadores, sistemas operativos y sistemas de información. Aprender Java luego es mucho más fácil. C no está reñido con los objetos, simplemente da toda la libertad del mundo para hacer lo que necesites. Kernighan & Ritchie escribieron un libro que todos los escritores de código deberían haberse leído. Aún hay tiempo.

Una respuesta to “Thinking in C”

  1. Marika Says:

    “Creo que si los ordenadores pensasen lo harían en C”
    Aun me acuerdo de ese dia en el que lo dijiste, en la oficina.
    Me ha encantado volver a leer este post, sobre todo ahora que programo en C#.
    Pero mira, Iratxo, C forever,🙂
    Un abrazo

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: