Lucca Arancibia@quplucca

Esta no es una duda o algo similar. Sin embargo, me pareció bastante curioso el comentario de un amigo mío, el cual mencionaba y sostenía que C y C++ están "muriendo". Y como se ha vuelto común ese mito desde la llegada de nuevos lenguajes de programación como Go o Rust he intentado hacer una especie de "investigación" acerca de lo que hace dudar a muchos de meterse a esta tecnología. Entonces, si no es una molestia, quería compartir esta información con la comunidad de EDTeam :)

Un poco de historia

Rebobinando un poco en el pasado, y empezando por el primer lenguaje a debate, C es un lenguaje de programación creado en los años 70 por Dennis Ritchie y el equipo de los Laboratorios Bell, y fue hecho con la intensión original de hacer al sistema operativo Unix multiplataforma (dentro de lo que cabía. Es decir, que pudiera compilarse fácilmente en una gran cantidad de sistemas)

En este video del canal oficial de EDTeam (en el minuto 12:28), el grande de @alvarofelipe introduce brevemente a este lenguaje (y curiósamente, también los otros dos lenguajes ya mencionados. Un grande ;) )

Y... ¿C++? Pues, ¡Es un superset del lenguaje C! Así como conocemos a TypeScript que vino para agregarle a JavaScript tipado estático, y terminó por agregarle cosas como modificadores de acceso a miembros de clases, entre otras cosas; El lenguaje C++ vino para agregarle Programación Orientada a Objetos a C ¡y terminó por agregarle sugar-syntax a más cosas también!

Entonces con esto podemos definir que C es un lenguaje de programación compilado y de muy bajo nivel, y que C++ es un lenguaje construido sobre C y que le agrega más funcionalidades a este

Un dato curioso es que, en la mayoría de casos, una vez te aprendes C++, ya no te es taaaaan necesario aprenderte C, ya que puedes hacer las mismas cosas que este lenguaje, aparte de que tienes todas las ventajas de C++

¿C++ es compatible con C?

¿Me creerías si te dijiera que un compilador de C++ puede compilar los mismos programas de C en la mayoría de casos?

Mira estos dos programas Hello, world!

1/* Programa "Hello, world" escrito en C. Importas 2 * una librería con "#include" y luego usas su 3 * función "printf" 4 */ 5#include <stdio.h> 6 7int main() 8{ 9 printf("Hello, world!\n"); 10 return 0; 11}
1/* Programa "Hello, world" escrito en C++. Importas 2 * la librería con "#include" y luego usas su 3 * buffer "cout" definido en el namespace "std" 4 */ 5#include <iostream> 6 7int main() 8{ 9 std::cout << "Hello, world!" 10 << std::endl; 11 return 0; 12}

Si te das cuenta, ambos programas tienen una estructura similar. Ahora, ¿Sabías que puedes compilar el programa de C con el mismo compilador de C++? Solo basta con reemplazar #include <stdio.h> con #include <cstdio> (en este caso, puede que ni siquiera sea necesario hacer esto. O así fue cuando lo intenté con el compilador GCC de mí máquina)

¿Qué ventajas ofrecen estos dos lenguajes de programación?

Pues, ambos lenguajes son de bajo nivel, y tal y como lo describe @alvarofelipe en el video anterior, ¡Eso significa que con estos lenguajes se tiene acceso a los componentes físicos de la máquina! No te equivoques. Es muy normal que uno piense que Lenguaje de bajo nivel = Mucho poder en la máquina, fuaaaa soy imparableeee. En realidad no es del todo así, porque un lenguaje de bajo nivel puede resultar muy incómodo de usarse para desarrollar aplicaciones de mayor nivel como, por ejemplo, aplicaciones de escritorio, o desarrollo Web del lado del Backend

Pero aquí algo interesante con C++: Este lenguaje tiene mucho reconocimiento por ser utilizado para aplicaciones de alto nivel, los mejores ejemplos son la mayoría de aplicaciones de Adobe. Y todo ese reconocimiento nació de sus grandes características como la posibilidad de trabajar con el paradigma de Programación Orientada a Objetos. Y como dije, tienes compatibilidad con C usando C++, entonces, eso lo vuelve un lenguaje de programación muy utilizable para todo tipo de cosas, ¿No? ¡Algo así como Java!

Otra ventaja muy conocida es la enorme velocidad que ofrecen estas dos tecnologias, y se debe principalmente a que son lenguajes de programacion compilados. Y compiladores como GCC, LLVM, y C Builder generan un ejecutable muy optimizado, y eso hace que sea muy veloz y ligero (a diferencia de lenguajes como Python o JavaScript que son interpretados, y más lentos en general)

Si te interesa la diferencia entre compiladores e intérpretes, aquí tienes otro video de EDTeam

Aparte, estos dos lenguajes en particular, son extremádamente maduros. Lo que significa que hay muchas librerías y frameworks de muy buena calidad para realizar aplicaciones de todo tipo (por ejemplo, ahí tienes a Qt, GTK, Crow

Mucho sobre Programación Orientada a Objetos, ¿Verdad? Si no lo entiendes muy profúndamente, mírate este video de EDTeam ;)

Ahora que lo pienso, creo que estoy patrocinando mucho a EDTeam, ¿No? Jajajajajaja

Bien, bien. Pero, ¿Y entonces por qué quieren reemplazarlo?

Con esto podrías estar algo confundido, ¿No? ¿Por qué hay gente que cree que Go y Rust serán los nuevos lenguajes para este tipo de trabajos?

En primer lugar, creo que deberíamos sacarnos de la cabeza eso de que "C y C++ van a morir; Go y Rust son el futuro de esas areas, porque por si no lo sabías, Rust utiliza algunas de las librerías de C y C++ para funcionar (mira nada más esto)

Sin embargo, no nos hagamos los ciegos, y aceptemos que C y C++ tienen muchos problemas. En el video anteriórmente mencionado, @alvarofelipe comenta que C puede ser inseguro si no se usa corréctamente (cosa que soluciona, un poco, C++). Pero creo que hay otros problemas que también hay que mencionar:

  • Librerías decentralizadas: Aunque esto no es 100% malo en algunas ocasiones, esto hace que manejar dependencias sea muy complicado e incómodo, a diferencia de Rust que tiene a Cargo, y Go que tiene su propio repositiorio. Aunque actuálmente, esto se solucionó relativamente con la aparición de CMake y Conan, no son tan maduros como los otros dos lenguajes ya mencionados
  • Compilación lenta: Aquí es un punto medio, porque C es bastante rápido en sus tiempos de compilación, sin embargo, es culturalmente sabido que C++ es demasiado lento. Tan lento, que Go se creó pensando en eso (Y sobre Rust, pues, es demasiado lento también, aunque no tanto como C++)
  • Impopulares: Su popularidad bajó mucho estos últimos tiempos, entonces puede que no encuentres tantas ofertas laborales como con Go o Rust a día de hoy

¿Entonces C y C++ son malos lenguajes?

No lo son ¡Son lenguajes muy buenos y bastante fuertes! Cabe destacar que puedes hacer de todo con ellos (y sí, con de todo hablo de de todo). Tanto como lo que cuentan de C#:

Conclusión

Estos lenguajes son bastante buenos, y no creo que deban ser subestimados. Pero hay que ser sinceros, no hay tanta demanda de estos lenguajes como la hay en otras tecnologías más modernas como Go y Rust. Si estos lenguajes son de tu gusto, ¡No te desanimes y no dejes de aprenderlos! No caigas en el engaño de que lo de hoy es Go y Rust, pero como siempre, no te cases con C y C++ y mejor aprende estos otros lenguajes porque se están volviendo tendencia, y muy merecidamente

Y si eres un programador principiante que solo entiende Python o JavaScript (como yo también lo fui) y crees que C y C++ tienen una potencia excepcional, tampoco te caigas en ese pensamiento, porque a día de hoy, esos lenguajes son bastante rápidos y solo notarás la necesidad de usar alternativas (como las ya mencionadas) si reálmente necesitas velocidad. No existe un lenguaje de programación perfecto

Muchas gracias por llegar hasta aquí :) Y ojalá le guste a la comunidad de EDTeam este intercambio de conocimiento ♥


Escribe una respuesta