La importancia del lenguaje C


El lenguaje C es bastante cuestionado por los nuevos estudiantes hoy en día, muchos no entienden el por qué su aprendizaje, lo ven innecesario debido a que hay otros más fáciles de aprender, otros con los que se puede lograr cosas más vistosas, como un gran juego, por ejemplo. Además de que C no es un lenguaje orientado a objetos, llega esto a pensar “¿para qué aprenderlo si no lo vamos a usar?” y es que esto quizá tenga algo de sentido, por lo general las personas que estudian programación tienen diferentes objetivos, donde C, no es el lenguaje más conveniente de usar. Pero para ver la utilidad e importancia del mismo, debemos de verlo desde un punto de vista más técnico. Para esto voy a citar las palabras de un amigo que quiso colaborar con la redacción de este artículo, antes de su respuesta las preguntas habían sido:


¿Qué tipos de personas usan el lenguaje C?


El empleo de C depende de la calidad como programador del individuo, del mercado meta hacia el que se proyecte, y sobre todo, del objetivo del código a desarrollar. C no está concebido, ni es su objetivo en modo alguno, codificar gestiones de alto nivel. Compréndase el amplio y dominante conjunto de rutinas que llamaríamos de Aplicación: manejo de interfaces, accesos a bases de datos, impresión de documentos, salva y restaura de información, etc. Su perfil es preponderantemente, pero no exclusivamente, de sistema. Este es un punto clave: C no está limitado al desarrollo de softwares de sistema. Debido a su estructura, la concepción que lo soporta y el conjunto de sus funciones estándar, C es un lenguaje que posibilita al programador, mejor que cualquier otro lenguaje incluido C++, orientarse a cómo quiere que el computador haga algo en específico, y no limitarse a qué quiere que el computador haga, ignorando o dejando fuera de su alcance, de qué forma va a realizarlo. Esto posibilita que el programador optimice el código al máximo obteniendo un eficiente resultado en la corrida de las rutinas desarrolladas. Ello sucede debido a que se elude, en gran parte, uno de los enemigos de la eficiencia; las necesarias, pero lentas, capas de abstracción siempre presentes.

De igual forma se tiene a disposición la posibilidad de trabajar a un nivel bajo, tan bajo como sea permisible y recomendable. Este tipo de desarrollo no está destinado, desde luego, al programador de calidad media, ya que como es fácil percibir, deben tenerse al menos conocimientos reales de algoritmia (ej. en el empleo de recursos como arboles binarios o tablas hash, y haciendo uso estricto y fiel del álgebra proposicional), análisis algorítmico (ej. haciendo posible realizar estimaciones asintóticas de costo y recursos computacionales utilizando principalmente la notación de Landau), arquitectura de sistemas (ej. siendo capaz de emplear recursos de memoria o manejo de concurrencia), entre muchos otros aspectos.

Desde luego, sin estos conocimientos se puede programar en C, pero el resultado quedará muy lejos de la elevada calidad posible a obtener, e incluso, puede resultar altamente contraproducente para la eficiencia del sistema en desarrollo.

De igual manera, el tiempo de desarrollo será considerablemente mayor que el que requeriría programar en algún otro lenguaje, pero ese es un elemento que debe contemplarse en la planificación del proyecto y presupuestarse debidamente.

Este lenguaje no está orientado al que desea armar un software utilizando componentes pre-elaborados, desarrollar una bonita interfaz a partir de JQuery o manejar una base de datos a través de una interfaz gráfica. Estamos hablando de otro nivel completamente diferente de programación muy distante de los que se ve diariamente entre los programadores a nuestro alrededor.

Algo que nunca debe perderse de vista, es que no es necesario desarrollar un software totalmente en C. En un software pueden, e incluso deben en muchas ocasiones, coexistir variadas tecnologías de desarrollo. C puede resultar ideal para desarrollar un conjunto de bibliotecas de funciones de cálculo, unas rutinas de manejo de auto-detección/auto-corrección, o manejo de compresión, etc. Para luego ser compilado e invocado desde los módulos de Aplicación cuando sea necesario.

¿El lenguaje C es difícil de aprender?


Suele decirse que programar en C es muy difícil, y las grandes masas no comprenden porqué, ya que sienten que al leer en un fin de semana un manual sobre C, comprenderlo y aplicar exitosamente los ejemplos del texto han dominado el lenguaje. Y es allí el gran error, C es mucho más que su propio contenido. Yo solía decir, años atrás en que impartí varios cursos de C, que el citado lenguaje no era complejo, por el contrario, es estupendamente sencillo y explícito, que su auténtico valor radicaba en su amplio alcance y versátil profundidad. Al igual, colega, como creo te citaba en un mensaje anterior parafraseando a Goethe, que el hecho de ser capaz de sacar en una guitarra la canción de moda no convierte a alguien en músico, ser capaz de escribir un conjunto de rutinas empleando el lenguaje no convierte a alguien en programador; menos aun en un lenguaje como C.

¿Crees que el lenguaje C se deje de usar?


C nunca desaparecerá. Diariamente utilizamos, sin percatarnos, infinidad de código en nuestras PC y dispositivos móviles desarrollado en ese lenguaje. Y se desarrollan nuevos productos incesantemente en el mismo. Es un lenguaje excelentemente retribuido, financieramente hablando, y que nunca perderá vigencia. Sólo que mientras más se popularizan los entornos de desarrollo de construcción rápida, pre-elaborado todo componente posible, y que apenas requiere configurarse y enlazarse a otro componente más para luego ser adornado con algunas líneas de código, la brecha con C se hace más amplia y profunda, y el lenguaje parece tan distante que pareciese desaparecer de la vista.

¿Qué lenguaje de programación recomendarías para empezar?


El camino al conocimiento, por lo menos en las ciencias informáticas, no es lineal. Es profundamente ramificado y convergente. Existen básicamente dos enfoques didácticos de desarrollo en la automatización de procesos; llamémosle, a título personal: Matemático-Lógico y Físico-Electrónico. El primero tomaría en cuenta los elementos puramente algorítmicos y algebraicos con independencia total de cómo estos se ejecutarían a partir de las diversas características y peculiaridades de los lenguajes, sistemas operativos y arquitecturas hardware presentes en el mercado. Sería esto lo más cercano a la enseñanza de la programación mediante el uso de diagramas de bloques y pseudocódigo. Sólo que en este caso a través del empleo de un lenguaje real de programación. Para implementar esta concepción de aprendizaje mi recomendación recaería en uno de mis lenguajes favoritos: Python. No voy a extenderme en sus virtudes y campo de aplicación; de ello podré hablar luego.

El otro caso se centra en hallar la vía óptima, o al menos más eficiente, para implementar un aparato matemático definido tomando en cuenta los elementos antes desdeñados: lenguaje, sistema operativo y hardware. Esta es una programación tendiente al nivel de máquina sin llegar a una concepción de ensamblador. Para este caso mi recomendación sería C.

Una vez más, como tantas veces he dicho, la decisión la dicta el mercado. Aunque en este análisis estamos hablando de enseñanza y en ese caso la preparación no se orienta a la realidad del mercado sino al posible mercado potencial para algún momento futuro dado.

Yo personalmente no creo que se aprenda a programar, REALMENTE, estudiando programación solamente. Pienso que el éxito técnico como programador depende de un conjunto de estudios paralelos que se efectúan como componentes del objeto pedagógico, siendo uno de ellos la programación en sí. Esta aparente contradicción se comprende, o se ilustra mejor, en áreas del conocimiento como Teoría de Compiladores. Este importante e imprescindible conocimiento se reparte, dada su amplitud y complejidad, en varias asignaturas, sin cuyo conocimiento, difícilmente se pueda llegar a ser un gran programador. Entre ellas podemos citar: matemático discreta, matemático computacional, máquinas computadoras, sistemas operativos, etc. Teoría de Compiladores es extremadamente importante, y a partir de allí se obtiene una cabal comprensión del computador; como equipo y como proceso. Esta comprensión es fundamental, y he podido comprobar que desgraciadamente muy, muy escasa.

La preparación, no obstante, no ha de quedar limitada a estas dos áreas antes mencionadas, ya que el profesional debe estar preparado para el desarrollo de software como industria. Para ello mi recomendación, en ese caso, podría caer en otro de mis lenguajes acompañantes: Java. A través de Java el futuro profesional puede relacionarse con temas como Inyección de Dependencias, Inversión de Control, Integración Continua, Testing, Refactorización, y muchos otros más que en algún momento podré conversarlos ampliamente.

Y así sin detenernos, colega, para Estadísticas R es mi recomendación, no lo uso con mucha frecuencia, aunque lo mantengo instalado en mi máquina, pero tengo gran opinión de él. Como ves, no se trata de uno u otro. Todos tienen algún valor y debe buscarse una concepción de enseñanza-aprendizaje integradora, aunque selectiva.

Conclusión: Lenguaje C y su importancia


Con esto, debe quedar claro en los estudiantes el por qué con el lenguaje C no se puede lograr crear aplicaciones móviles con una linda interfaz gráfica, o un gran juego en 3D. C, como se ha dicho anteriormente, está orientado para trabajar en el desarrollo de software a nivel de sistema, aunque tómese en cuenta que esto no es exclusivo, a su vez, el lenguaje nos permite sacar la máxima eficiencia de nuestros programas, de las mejores que puede existir.

Con el lenguaje C no vamos a hacer juegos ni vamos a hacer aplicaciones para luego subir a la Play Store, con C vamos a trabajar en un campo más abstracto en la ciencia de la computación, entendiéndose abstracto como crear un sistema operativo, un lenguaje de programación, arboles binarios, tablas de hash, etc. Debido a esto, C se orienta a un tipo de programador de con un alto nivel de conocimientos. Conocimientos que permitan dar la posibilidad de trabajar en centros de investigación, desarrollo de inteligencia artificial, simulaciones de niveles superiores, etc. Para los que se pregunten por qué se imparte los estudios del lenguaje C en las universidades, pueden buscar respuesta en otro artículo que hice ¿Qué carrera estudiar para Aprender a Programar?. Aunque para dar una pequeño adelanto de la razón de esto, se debe al tipo de carrera que el estudiante escoge, es decir, si estudia Licenciatura en Computación, naturalmente se comenzará las clases de programacióncon el lenguaje C. Citando un párrafo del artículo antes mencionado:
Los Licenciados en Computación son profesionales con el uso de la computadora. Se enfocan en el estudio, funcionamiento y comportamiento de un computador, tiene fuerte relación con el hardware y su función contribuye al desarrollo tecnológico por medio de la creación de drivers, controladores, sistemas operativos, compiladores, lenguajes de programación, etc. Utilizan cálculos matemáticos avanzados que les permite desarrollar nuevas tecnología como la robótica, inteligencia artificial, realidad virtual, su trabajo está fuertemente ligado a la electrónica ya que mientras uno desarrolla un mejor hardware (electrónica) el otro crea software que saca el mayor provecho de esos componentes (computación).

He ahí la razón de esto. C no es un lenguaje de programación difícil de aprender, esto son digamos leyendas urbanas creadas y fomentadas por personas realmente perezosas que no se esfuerzan en lo que hacen, prefieren decir que es muy difícil y así evitar toda la responsabilidad de su incompetencia. Nada es difícil; difícil es que la persona se esfuerce y estudie.

Para concluir, con el lenguaje C se puede trabajar sin tener tanto conocimientos, pero claramente no se le sacará el mayor provecho a la herramienta.

Para finalizar, para las personas que creen que aprender C es innecesario, tomo el momento para orientarlo y decir que no, C nunca va a dejar de existir, no piensen que porque otros lenguajes son más fáciles de aprender C es obsoleto, todo lo contrario. Si otro lenguaje es fácil de aprender, como Phyton, se debe a que hay miles de líneas de código escritas en C que permitieron eso. Que una computadora sea tan fácil de manejar hasta el punto que un niño pueda navegar en internet, se debe a la gran participación activa del lenguaje. Que existan computadoras e incluso calculadoras que resuelvan complejos problemas matemáticos, se debe en gran parte al lenguaje C. Estas y muchas otras cosas más son creadas con el lenguaje expuesto, y deja en claro que su vigencia en el mercado, y en el aprendizaje perdurará.


También te puede interesar:




No hay comentarios