¿Por qué usar realmente C en el año 2021?

En los últimos años han sucedido una serie de fenómenos tecnológicos en cuanto a los lenguajes de programación, en particular la creación de nuevos lenguajes con los cuales programar, algunos mas sencillos que otros. Algunos de los programadores nos decimos: ¿Por qué otro lenguaje más?, ¿No e mejor mejorar uno existente a crear uno nuevo y volver a aprender todo desde el principio con el tiempo que conlleva?.
Un lenguaje nuevo es buena idea pero es necesario tiempo extra para estudiarlo a fondo y a lo mejor ya dominas un lenguaje bien y pasar a otro es una tarea compleja principalmente si no sabemos su futuro.
El lenguaje C es uno de los lenguajes más versatiles y potentes a la vez que difícil en teoría porque a la verdad he comprobado que es más fácil de muchos lenguajes de supuestamente muy alto nivel en la actualidad. No puedo decir que java sea más fácil de usar que C, ni C sharp, por ejemplo.
El lenguaje C es muy directo y vas al grano con lo que deseas, en ocasiones tener quecrear una clase y tener una estructura ibligatoria te hace olvidar cosas que ya tenías en la mente porque tu mente ahora está enfocada en los datos y no en el algoritmo, por lo tanto por mucha facilidad que tengan algunos lenguajes no elimina la posibilidad de escribir software confuso y difícil de mantener.
En C sí se puede hacer programación a objetos y en ocasiones esta programación es más legible que su contrapartida C++, usando estructuras y punteros a funciones también puedo lograr la sintaxis objeto->método();

Ej


#include
#include

struct AUTOMOVIL
{
char *color;
int peso;
};

typedef struct AUTOMOVIL AutoMovil;

AutoMovil *create_new(void)
{
return (AutoMovil *) malloc(sizeof(struct AUTOMOVIL));
}

int main(int aargc, char *argv[])
{
AutoMovil autos1 = {«rojo», 30}; /* Especie de constuctor */
AutoMovil *camion = create_new();

puts(autos1.color);

autos1.peso = 50;

camion->color = «verde»;
camion->peso = 39;
printf(«%s %d\n», camion->color, camion->peso);
return 0;
}

Un programa creado en C es muy portable a cualquier lado salvo que use una librer’ia de tercero no disponible en la otra plataforma.
Yo personalmente he podido crear cualquier cosa desde C sin necesitar de otro lenguaje.
C no te embrutece, otro lenguaje m’as sencillo si puede hacerte perder habilidades que pudieras tener como el manejo eficiente de los datos, algoritmos de ordenar, etc. Al no tener estas habilidades tendrias que depender de librerias de terceros para solucionr tu problema, su dificultad es una ventaja aunque esta dificultad es aparente, te das cuenta que resuelves tu problema directamente y sin rodeos, se confia en el programador.En C se puede reutilizar el software de manera sencilla y no requiere la activacion de clases que devuelve otra clase para hacer lo que deseas simplificando enormemente el programa, en C++ es similar pero C++ aunque digan lo contrario es evidente tiene ciertas sobrecargas minimas pero las tiene y hay un dicho antiguo que dice que la suma delas menores optimizaciones es igual al rendimiento total. Un programa enorme es lento si no se tiene en cuenta esto desde el principio aunque en apariencia al principio el programa sea veloz porque no se ha escrito tanto en su interior. Pero cuando el proyecto crece te das cuenta del resultado. crear una clase en un lenguaje de alto nivel requiere varias operaciones mientras que C solo usa las nativas de la cpu minimas como mover un byte, poner dato en un registro, etc, comparat un entero… de ahi su eficiencia.

Saludos en otro momento escribo sobre esto ampliamente debo seguir trabajando…

if(strcmp(TRABAJO, «ESCLAVITUD») == 0)
vacaciones_activate(&MICENTRO, NULL);

¿Te resultó interesante? Compártelo ...



haylemhcb

Publicado por haylemhcb

Forma parte de GUTL desde el 12 mayo, 2020. Me gusta la programación y el software libre. Soy autodidacta. Trabajo en el policlínico de Stgo de las Vegas René Bedia Morales como responsable de Seguridad informática y Administrador de red. Anteriormente trabajé en el INOR(Oncológico como técnico y luego Jefe de seguridad informática)

Este artículo tiene 9 comentarios

  1. ¡Qué envidia que puedas programar en C! ¿Tu trabajo también lo realizas en C?
    Lo que más me atrae de C es que genera un ejecutable real, con código nativo. Y claro está, su desempeño en cuanto a recursos.

    Hoy hay otros lenguajes como Go y R que están ganando popularidad (incluido el mundo empresarial) y creo que comparten ciertas ventajas con C.

    Saludos!

    • Go y R son muy buenos pero hasta ahora no he tenido que hacer nada extra que no se pueda hacer en C, y lo que no se pueda se usan librerías como otros lenguajes que de igual manera terminamos usando librerías de terceros. He usado java y me parece muy bueno al igual que python, lo que me inclina más a Java es el que puedes descargar la librería en la carpeta del proyecto y redistribuirlo fácilmente incluso crear un instalador con el jdk dentro, con python igual con pyinstaller pero hay cosas que no he podido usar desde python aún cómodamente desde otro sistema que no sea GNU/Linux como es la librería gtk3 que en el caso de windows hay que instalar todo el sdk de windows y las librerías msvc y no me ha funcionado con pìp install porque no me instala el paquete. Y estoy tratando de hacer los programas que sean multiplataforma, pero todavía la parte de redistribuir le proyecto no está decidida finalmente en python y si en java y otros. Estuve indagando sobre webassembler y me parece interesante, se puede escribir un programa en C y en vez de compilar a maquina se puede compilar a webassembler y el programa funciona en una página web sin necesidad de nada más y esto ya lo traen los navegadores actuales, sólo se debe compilar con un compilador wasm creado para ello. Muy interesante la verdad.

      Cualquiera puede programar en C y se dará cuenta de la facilidad real, esa supuesta complejidad solo se aplica a determinadas características como los punteros que una vez que se entienden son muy útiles.
      Uno de los libros que recomiendo es El lenguaje de programación C de Kernigan y Ritchie. Y el otro que fue el primero por elque aprendí los 3 tomos de Cómo programar en C para mí los mejores libros de la historia. Conozco otros libros que marcaron mi vida como los libros de Orelly, etc.

    • Otros lenguajes tambíen pueden generar ejecutablesnativos pero en caso de C es muy eficiente incluso que C++, porque aunque muchos no lo entiendan a nivel de código una clase lleva varias operacionesen código máquina para ser escritas, pero una función solo una pocas líneas, una función en memoria puede ser un área pequeña con un nombre al que se puede saltar con jmp en ensamblador por ejemplo algo así como un goto en lenguajes más antiguos(en C todavía se puede usar goto y labesl jeje)
      mientras que una clase podría ser un área que contiene otra referencias a otras partes de la memoria donde están definidos los demás atributos, al final se traduce en varios saltos a diferentes posiciones el rendimiento puede verse afectado en determinadas situaciones donde el tipo de ram sea lento. La suma de cada una de estas lentitudes minúsculas dará una cantidad de espera mayor que será notable si el programa contiene miles o cientos de miles de código.

      Hay problemas que para resaolverse no necesariamente hay que orientarlos a objetos como sumar 2 números que en C sharp por ejemplo necesito crear toda una clase para lograr dicha tarea al igual que en java,etc, entonces por qué tengo que crear toda una clase con sus correspondientes declaraciones public y private tan solo para escribir hola mundo, si el objetivo es ser más productivo y rápido y por que hay una tendencia a complejizar la apis nativas que se podrían mantener así flexibles pero con funciones de alto nivel para las tareas que realmente necesitamos como por ejemplo, dibujar un cubo en pantalla en webgl javascript, al final quien termina usando en los shaders… C!!! por qué no hay una función cube(x, y, z) que me ponga un cubo en pantalla 🙂

  2. Todo mi trabajo lo intento hacer en C y hasta ahora lo he logrado, conozco otroslenguajes pero siempre termino con C. Es que con C es todo directo al grano. Para mi es muy rápido programar en C. Conozco Java, pyhton, C++ y otros varios en los cuales he hecho programas para experimentar con ellos, pero siempre por alguna razón termino usando C para todo. Para mí el código es más legible en C si se sabe cómo organizarlo desde un principio, una cosa que no me gusta de otros lenguajes que se dice que facilita la legibilidad y la programación es el definir variables antes de su uso en cualquier parte del programa, esto hace que tengamos una tendencia a usar dicha característica y genera software confuso porque si el código es muy extenso y vemos dicha variable entonces tendríamos que buscar la primera vez que se definió en todo ese código. Sin embargo con C/C++ se declara en un solo lugar y ahi están más visibles.

    • es la segunda vez que leo tu articulo…estoy de acuerdo en todo lo que planteas…en mi caso es peor desde la perspectiva actual …continuo programando en ObjectPascal!!!!!…..mas de la mitad en Lazarus/Linux y como dices ..no he encontrado algo que no lo pueda hacer usando este lenguaje….

  3. Quizás no me pueda explicar bien, en la universidad doy C me fascina ese lenguaje y mi sueño es en un futuro poder contribuir con el soft libre estudio por los libros que comentan el problema radica en la transición de todo lo teórico a un proyecto real de la práctica que tenga una utilidad … No logro empatar esas dos cosas que me recomiendan

    • si conoces la base de C entonces puedes llevar ese conocimiento a cualquier lenguaje. Te pongo un ejemplo. Si haces una función en C que calcula el factorial, es evidente que en otro lenguaje puedas adaptarlo, la mayoría de las veces solo es cuestión de cambiar palabras y símbolos y quizás crear una cierta estructura pero todo lo demás es absolutamente lo mismo. Por ponerte otro ejemplo, podrías hacer una librería C que te construya una página web completa por ejemplo teórico de una librería x llamada creaweb.h

      #include

      void saludar(void)
      {
      insert_text_long(«Hola amigo»); /* Esto escribir’ia un h1 en archivo */
      }

      int main(int argc, char *argv[])
      {
      WEB *miweb = createWeb(«Mi titulo»); /* Esto escribe la estructura */
      WEB_Btn *btn = NULL;
      WEB_Lbl *lbl = NULL;

      lbl = insertLabel(miweb, «Esto es una etiqueta»); /* Esto agrega al html*/
      btn = insertButton(miweb, «Texto del boton»);
      webEvents(btn, «click», saludar);
      web_publish(); /* Esto genera un .html y cierra el archivo */
      return 0;
      }

      Como vez las funciones irian escribiendo en un .html hasta completar lo que quieres y al final cierra todo y genera el archivo. Esto es un ejemplo pr’actico, existen muchos problemas rerales como los programas que existen en los chips de los equipos que usas como los PICS, etc

    • La soluci’on es plantearte problermas reales como>

      Un editor de video.
      Un simulador.
      Una base de conocimientos.
      Base de datos puramente manejadas en C sin sql aunque puedes usarlo con libsqlite

      Un motor de juego
      Un compilador. Recuerdo en uno de los libros que leo hay un proyecto de como hacer un interprete de BASIC y un compilador para el mismo y no es tan complicado realmente, esta en el tomo 3 de Aprendiendo a programar en C, es un libro blanco que se estudia en muchas escuelas, con esa base puedes hacer tu propio lenguaje. Tambien hay ejemplos de como proteger cheques de bancos y cifrar palabras, estas son las bases de todo lo que se sigue haciendo hoy lo demas es cosmetico.

Los comentarios están cerrados.