Lenguaje de programación C++: ¿en qué se diferencia de C, dónde se aplica y es adecuado para empezar?

Junto con la asistente del Departamento de Matemáticas Fundamentales y Aplicadas de la Facultad de Informática de la Universidad Estatal de Moscú, Sofía Sazonova, te contamos si vale la pena aprender C++, si es realmente tan difícil y cuánto ganan los desarrolladores de C++.
C++: qué es este lenguaje, cómo surgió y cuáles son sus ventajas
En la década de 1980, el programador danés Bjarne Stroustrup modelaba la distribución de llamadas entre estaciones telefónicas. Trabajaba con el lenguaje C, similar a un código máquina en forma de instrucciones de código binario.

A Stroustrup no le gustaba el lenguaje C: era demasiado lento y no admitía la programación orientada a objetos, es decir, no podía representar un programa como un conjunto de objetos, no era claro ni visualmente atractivo.

Entonces Stroustrup decidió mejorar el lenguaje C, cruzándolo con otro lenguaje retro llamado Simula. En C++ se introdujeron clases, verificación estricta de tipos, funciones en línea y otros elementos que simplifican y aceleran la programación.

Inicialmente, estas mejoras se percibieron simplemente como una extensión del lenguaje base. Pero muy rápidamente, "C con clases" se convirtió en una herramienta de trabajo confiable para millones de desarrolladores.
"Se puede decir que C++ es un lenguaje de nivel superior en comparación con C: a diferencia de este último, opera con abstracciones.

C++ tiene varias ventajas importantes:
  • Velocidad. C++ procesa datos más rápido que la mayoría de los lenguajes de alto nivel como Python.
  • Portabilidad. A diferencia de muchos lenguajes, incluido el aún más alto nivel C#, C++ no depende de una plataforma: el desarrollo se puede transferir fácilmente de un sistema operativo a otro.
  • Versatilidad. C++ admite múltiples estilos de programación, como programación procedural y programación orientada a objetos. Además, C++ proporciona una abstracción de datos. Gracias a esto, se puede utilizar para resolver casi cualquier tarea".
Qué se puede escribir en C++
En C++, se crean aplicaciones de alto rendimiento, controladores, estándares gráficos y juegos. Por ejemplo, el sistema de gestión de bases de datos MySQL, que es la base de muchas aplicaciones de alto rendimiento, está escrito en C++. También los principales productos de Microsoft, los juegos icónicos Counter Strike y World of Warcraft están escritos en C++.

En C++, se escribe código que debe funcionar de manera rápida y confiable, por lo que el lenguaje a menudo se utiliza como base para equilibradores de carga en servidores y algoritmos gráficos complejos. En C++, se puede escribir código para GPU (unidad de procesamiento gráfico). Por ejemplo, se crean sombreadores para juegos y software gráfico: se ejecutan en paralelo en la GPU y permiten realizar cálculos complejos sin demora.

En C++, se pueden escribir algoritmos complejos y no triviales, para lo cual el lenguaje cuenta con una gran biblioteca llamada STL (Standard Template Library), que implementa una gran cantidad de algoritmos y estructuras de datos. A veces, C++ se utiliza para optimizar el código, agregar velocidad y rendimiento o adaptar la aplicación a plataformas específicas.
"A pesar de su versatilidad, el lenguaje tiene sus limitaciones. Por ejemplo, no es conveniente procesar registros, que son archivos con información sobre las acciones en el programa, o recopilar estadísticas del servidor. También será difícil escribir algoritmos para aprendizaje automático o servidores para procesar solicitudes: en el primer caso, Python con su gran cantidad de marcos sería más adecuado, y en el segundo caso, Java o C#".
Existe el mito de que C++ solo es adecuado para aplicaciones complejas, porque incluso las operaciones simples escritas en él parecen comandos complicados. Pero estos problemas se pueden resolver fácilmente gracias a las grandes bibliotecas de código abierto en C++, que contienen muchas funciones auxiliares y facilitan en gran medida el trabajo. Por lo tanto, se puede escribir cualquier cosa en C++: desde un servicio de alto rendimiento hasta programas simples para calcular áreas o resolver sistemas de ecuaciones algebraicas.
Lo que un desarrollador de C++ necesita saber
"Si planeas una carrera como desarrollador de C++, debes aprender algoritmos y estructuras de datos generales. No hay ninguna entrevista en la que no se necesiten.

Si quieres escribir código en C++ y trabajar en cálculos complejos, tendrás que comprender la programación paralela, donde las instrucciones se ejecutan simultáneamente en varios procesadores. También deberás aprender el estándar abierto para la paralelización, OpenMP. A los ingenieros de desarrollo de software les conviene conocer matemáticas discretas, estadísticas y algoritmos.

Otra área de desarrollo es la gráfica por computadora y el desarrollo de juegos, donde es necesario escribir sombreadores y OpenGL. Aquí será útil el conocimiento de las interconexiones con OpenCL, un marco para cálculos paralelos en unidades de procesamiento gráfico, o CUDA, un compilador con extensiones necesarias para escribir código en GPU".
También te puede interesar:

Lo que un programador necesita saber antes de una entrevista y cómo pasarla con éxito
¿Es adecuado C++ para principiantes?
Hay otro mito igualmente extendido sobre C++. Se dice que es un lenguaje difícil y no es adecuado para comenzar en la profesión.
Es fácil entender por qué lo llaman difícil. Aquí tienes un ejemplo del clásico programa "¡Hello, World!" en C++:
//include <iostream>     
using namespace std;

void function_name ()
{
    cout << "Hello, world" << endl;
}

int main()
{
    function_name(); // Llamada a la función
    return 0;
}
Y este es un ejemplo de código en Python:
print('¡Hello, World!')
// => ¡Hello, World!
Esto es lo que dice el creador del lenguaje sobre la dificultad del lenguaje C++ según este artículo:

"C++ es realmente difícil y se requiere un esfuerzo para aprender a usarlo. Pero la gente siempre quiere lo imposible: un lenguaje aún más fácil, con más características y que siga siendo compatible con el código existente".

C++ puede ser un excelente comienzo en el campo de la informática, pero solo si estás dispuesto a hacer el esfuerzo. A diferencia de muchos lenguajes de alto nivel como Python o Java, no es tan "amigable". El código no se lee de manera intuitiva, tienes que trabajar con la memoria tú mismo: asegurarte de que no haya fugas de datos y liberar espacio para que el programa funcione. Para esto, primero debes comprender los fundamentos del funcionamiento de una computadora.

Pero el esfuerzo se compensa con creces con el crecimiento del nivel de habilidad. Con C++, puedes comenzar si estás seriamente comprometido y estás dispuesto a profundizar. Este lenguaje proporciona una excelente base que te ayudará a avanzar con confianza y resolver problemas no solo a nivel de código.
"En mi opinión, C++ es el lenguaje óptimo para comenzar, porque proporciona una base. Si una persona quiere ser desarrollador y comprender profundamente este tema, no debe comenzar con lenguajes de bajo umbral de entrada como Python o JavaScript.

Por supuesto, se puede aprender a programar más rápido en base a ellos. Pero debido a la simplicidad de estos lenguajes, es fácil pasar por alto cosas importantes y no saber cómo funciona la memoria, la dirección y muchas otras cosas. Es difícil, pero importante. En mi experiencia, las personas que comenzaron con Python, por ejemplo, luego les resulta más difícil sumergirse en los detalles y comprender por qué el programa no funciona".
¿Se puede comenzar directamente con C++, sin aprender C?
Este tema es objeto de debate eterno en la comunidad. Algunos, incluido el propio Stroustrup, dicen que no es necesario aprender C. Se puede comenzar directamente con C++, donde no es necesario trabajar directamente con caracteres y memoria y perder tiempo en las complejidades que se tendrían que enfrentar en C.

Para ver la diferencia, echa un vistazo a cómo se ve la creación de una dirección de correo electrónico en C:
char* compose(const char* name, const char* domain) 
{ 
  char* res = malloc(strlen(name)+strlen(domain)+2); // espacio para las cadenas, '@' y 0 
  char* p = strcpy(res,name); 
  p += strlen(name); 
  *p = '@'; 
  strcpy(p+1,domain); 
  return res; 
} 
Y así es como se ve la misma acción en Python. No hay operaciones complicadas con caracteres y memoria:
string compose(const string& name, const string& domain) 
{ 
  return name+'@'+domain; 
}
Otra opinión es que es mejor comprender los conceptos básicos teóricos con C, por lo que para aquellos que "profundizan", es mejor aprender ambos lenguajes de manera secuencial.

Mira cómo los desarrolladores resuelven un problema de programación olímpica de cinco maneras diferentes en C. A juzgar por sus soluciones, parece que sabiendo C, se puede aprender fácilmente muchos otros lenguajes, ya que este lenguaje proporciona una base de conocimientos sólida.
"La pregunta es qué quieres lograr. Si quieres profundizar en el tema, es mejor aprender C primero. Con él, puedes comprender la arquitectura básica de las computadoras y los fundamentos teóricos, incluidas las operaciones a nivel de bits, el manejo de memoria dinámica y los números de punto flotante. Por lo general, enseñamos de esta manera: proporcionamos una base y luego, en el segundo año de estudio, cambiamos a C++ con sus características y peculiaridades".
¿Qué es más popular: C o C++?
Tanto C como C++ han estado consistentemente entre los cinco lenguajes más populares durante muchos años. Algunos índices los evalúan por separado, mientras que otros los incluyen en una categoría general.

Por ejemplo, según el índice TIOBE de noviembre de 2022, C ocupa el segundo lugar, detrás del lenguaje más popular del mundo, Python. C++ está dos puntos por detrás de C, en el cuarto lugar.

En la encuesta de Stack Overflow de 2022, por otro lado, C++ ocupa el sexto lugar, mientras que C ocupa el séptimo lugar.

En el índice PYPL, ambos lenguajes están en la misma categoría y ocupan el cuarto lugar, por detrás de otro lenguaje relacionado, C#.
¿Cuánto gana un desarrollador de C++?
C++ se utiliza en casi todas las grandes empresas, por lo que puede ser una buena herramienta para el crecimiento profesional.

El nivel de salario depende no solo de la experiencia, sino también del conocimiento de los marcos, algoritmos y bibliotecas. Según las vacantes publicadas en Indeed, en promedio, un desarrollador junior puede esperar un salario de 20-24 mil pesos mexicanos, mientras que un desarrollador intermedio o senior puede ganar hasta 45 mil mxn.
Cómo y por dónde empezar con C++: libros y recursos
Antes de sumergirte en el lenguaje, familiarízate con la teoría básica de la programación orientada a objetos, ya que esto te ayudará a sumergirte más rápidamente en el tema.

Para aquellos que decidan comenzar aprendiendo el lenguaje C:
Si prefieres comenzar directamente con C++, estos libros pueden ser útiles:
Durante el proceso de aprendizaje del lenguaje, no olvides las bibliotecas STL y BOOST:
También será de gran ayuda:
Leer otros artículos de Blog
Lee otros artículos relevantes del mundo de la tecnología y el espíritu empresarial.