Uso del Lenguaje C en monitorización
«El lenguaje de programación C» (o, simplemente, Lenguaje C) es el título del libro publicado en 1978 por Brian W. Kernighan y Dennis M. Ritchie donde introdujeron la idea de presentar un programa de ejemplo llamado «¡Hola mundo!» y que es modelo común en casi todo tutorial para programar, sin importar el lenguaje usado.
Tal vez de allí sale la idea de la omnipresencia del Lenguaje C. Ese libro presentó muchos paradigmas, o al menos varios estilos de escritura que aún hoy seguimos usando. Pero también el Lenguaje C tiene un oscuro pasado que os sorprenderá…
Leyenda: «The C Programming Language (La programación en Lenguaje C) https://commons.wikimedia.org/wiki/File:The_C_Programming_Language_logo.svg»
Lenguaje BASIC y el ABC de la programación
Yo aprendí Lenguaje BASIC de la mano de Thomas E. Kurtz y John G. Kemeny… en un libro. Cuando por fin los ordenadores llegaron a nuestra vida diaria (larga historia) lo que tuve a mano fue el Microsoft Quick Basic® (no confundir con Microsoft QBasic®, ese vino mucho después) y muy poco utilicé el Microsoft GW-BASIC®. En 1990 supimos en la universidad acerca de la especificación ANSI C, que había salido el año anterior, pero allí en ingeniería estábamos enfrascados, por practicidad, con el Lenguaje Pascal. Poco después avanzamos al Microsoft Visual Basic® para llegar entonces a un punto de inflexión en la programación privativa: Microsoft Visual Studio 97®, la primera suite ofimática con varios lenguajes, incluyendo Java y C++ (sí, de este último «nació» el Lenguaje Rust en 2010… con el que compilan el popular navegador Mozilla Firefox®).
Para este punto el Lenguaje C había madurado lo suficiente como para evolucionar, pero, ¿de dónde viene en realidad? Aunque nunca hubo un «Languaje A» como tal, lo que sí existió fue el «Basic Combined Programming Language» o BCPL (Lenguaje Intermedio O incluido) el cual luego sí que transmutó al Lenguaje B, pero ambos no fueron suficiente para el nuevo hardware (esto lo estoy simplificando demasiado, ya veo a los historiadores persiguiéndome con antorchas y hoces). Resulta ser que, en 1969, inventaron el ordenador PDP-7 con el que al año siguiente nació Unix®. El siguiente computador fue el PDP-11 con el que pudieron ejecutar el Lenguaje C para reescribir Unix® y así fue que nació la leyenda en 1972.
Lección aprendida
De lo que los programadores se dieron cuenta fue de que el Lenguaje C podía ser implementado en muchos hardware distintos; la tarea no era ni es fácil, todavía hoy es una ardua labor. Pero si queremos algo muy bien estructurado y con buenos cimientos, el Lenguaje C está llamado a ello.
Pero cuidado. El Lenguaje C se eleva, o mejor dicho, se abstrae tanto del hardware que puede haber serios problemas luego. Nos acerca mucho al hardware, tanto que logra que entendamos más y más sobre distintos y muy diferentes componentes electrónicos. Eso es lo bueno y que puede ayudarnos en el área de monitorización, especialmente en el área de industrias.
Hardware, software y Lenguaje C
El Lenguaje C tiene un problema muy parecido al que relatamos en un artículo anterior sobre hardware: un serio problema con el acceso a la memoria (Random Access Memory o RAM). Si tenemos un rango de memoria asignado, por decir 100 a 200, si hacemos un ciclo que lea hasta 201 tendremos grandes inconvenientes. De esta manera, a propósito, realizan programas que hurgan más allá de lo que le corresponde y el Lenguaje C lo permite. Otro problema es la inicialización de variables; se le asigna un lugar en la memoria pero el valor que estaba en ese sector no es «borrado». Fíjense en el entrecomillado: debemos colocar nosotros mismos en cada variable el valor inicial que necesitemos: si es numérica, cero (generalmente), pero si es una fecha allí empiezan los problemas.
Lo anterior conduce a otro de los problemas: manejar variables que manejan diferentes tipos de datos, por ejemplo «sumar» una fecha con una cadena de texto. El cuarto problema principal es liberar alguna variable para luego volver acceder a ella: no hay aviso o advertencia de nuestro error, si estamos de suerte y el sistema operativo no ha tocado ese sector de memoria donde estaba nuestra variable ni cuenta nos daremos, pero en algún momento nuestro algoritmo fallará.
Si bien C++ proviene del Lenguaje C, debo hacer la aclaratoria de que el primero es orientado a objetos y el segundo a la programación estructurada; por ello, es útil a nuestros propósitos de construir pequeños guiones para monitorización. Aunque sería un artículo completo el describir ambos modelos de programación, puedo afirmar que C++ incluye la programación estructurada pero se aprovecha de los objetos para sacar provecho del más avanzado hardware que tenemos actualmente, en especial los múltiples núcleos.
No todo está perdido
¿Recordáis que os mencionamos el lenguaje Pascal y su uso en ingeniería? Pues bien, este lenguaje no permite las operaciones entre diferentes tipos de variables; además, su proclive de sintaxis hacia las matemáticas lo hacía útil en ese campo. Sin embargo, también adolece en lo demás de lo relatado acerca de las excepciones del Lenguaje C.
Ahora existen lenguajes modernos y seguros como Rust (inspirado en C++) e incluso el Lenguaje Swift (inspirado en el mismo Rust con Haskell, Ruby, Python y C#) que eliminan todos estos «inconvenientes» de manejo de memoria. Pero los cientos de millones de líneas de código hechas en Lenguaje C (ver el proyecto del kernel de Linux, por ejemplo) harían necesario crear otro lenguaje expresamente para migrar; por ello, actualmente mejor se trabaja en el cambio de manera progresiva: lento pero seguro.
Por toda esta respuesta razonada, incluimos a C en nuestra lista de los lenguajes más utilizados y cuando debamos monitorizar en algún punto álgido podremos recurrir a él con toda certeza, aunque el trabajo será duro (dicen que con el Lenguaje C hay que reinventar la rueda; yo digo que más bien hasta podremos hacer ruedas octogonales, si es que las necesitamos de esa manera).
Pandora FMS
Contamos con mucha flexibilidad en cuanto a lenguajes se trata; por ejemplo, en la creación de un módulo de inventario remoto bien pudiéramos utilizar C++ o incluso Java. El detalle está en que, independientemente del lenguaje usado, este devuelva un valor con formato específico. ¡Incluso nuestros agentes están creados con C++ y Perl!
Si el lector está interesado en conocer mejor el alcance de Pandora FMS le invitamos a entrar aquí.
En el caso de contar con más de 100 dispositivos para monitorizar, el lector puede contactar con el equipo de Pandora FMS a través del siguiente formulario.
Además, recuerde que si sus necesidades de monitorización son más limitadas tiene a su disposición la versión OpenSource de Pandora FMS. Encuentre más información aquí.
Programador desde 1993 en KS7000.net.ve (desde 2014 soluciones en software libre para farmacias comerciales en Venezuela). Escribe regularmente para Pandora FMS y ofrece consejos en el foro. También colaborador entusiasta en Wikipedia y Wikidata. Machacador de hierros en gimnasios y cuando puede se ejercita en ciclismo también. Fanático de la ciencia ficción. Programmer since 1993 in KS7000.net.ve (since 2014 free software solutions for commercial pharmacies in Venezuela). He writes regularly for Pandora FMS and offers advice in the forum. Also an enthusiastic contributor to Wikipedia and Wikidata. Crusher of irons in gyms and when he can he exercises in cycling as well. Science fiction fan.