Curso de programación moderna en C++
Un curso de “C++ moderno” de acceso libre, dirigido a desarrolladores que ya conocen C, ha suscitado debate sobre cómo debería aprenderse C++ y si la experiencia previa en C ayuda o estorba. Los comentaristas comparan este material con otros libros y cursos, discuten el papel de los punteros crudos frente a los smart pointers, STL frente a código hecho a mano en contextos embebidos y de kernel, y subrayan la importancia de entender la compilación, las herramientas de build y los modelos de memoria. Muchos señalan que C++ sigue siendo central en campos como los sistemas embebidos, los motores de juegos, HPC y finanzas, pero sostienen que su complejidad, la fricción de las herramientas y los enfoques de enseñanza hacen esenciales los recursos cuidadosamente elegidos —y a menudo un “subconjunto moderno” restringido— para el uso real.
Audiencia y alcance del curso
- El curso está dirigido a personas que ya conocen C y OOP básica, no a principiantes absolutos.
- Se considera una buena opción para desarrolladores de C embebido que quieren “dar el salto” o usar C++ como “mejor C”.
- Algunos dicen que otro recurso (learncpp.com) es más amigable para principiantes y más detallado.
Cómo aprender C++ (desde C, Java/JS o desde cero)
- Hay un fuerte desacuerdo sobre si deberías aprender C primero:
- Un lado: C++ está construido sobre la máquina abstracta de C; entender C y los punteros crudos es esencial.
- El otro lado: los idioms de C pueden ser perjudiciales al llevarlos a C++; es mejor aprender C++ directamente y evitar los malos patrones de C.
- Para personas que vienen de Java/JS, se recomiendan varios libros y cursos en video; algunos libros canónicos de C++ son criticados por ser malos tutoriales.
- Varios comentaristas sostienen que C++ (y Rust) requieren tanto estudio al estilo libro como proyectos prácticos, a diferencia de lenguajes “hackeables” como Python/JS.
C++ embebido y de bajo nivel
- Preocupaciones: RAM limitada, sin heap, sistemas de larga duración, complejidad de allocators, soporte de excepciones y tamaño binario.
- Reglas prácticas comunes en embebidos:
- A menudo evitar STL, excepciones, RTTI y asignación dinámica pesada.
- Usar características del lenguaje C++ (RAII, constructores, templates,
constexpr/consteval) sin incorporar grandes bibliotecas. - Considerar alternativas de terceros tipo “embedded STL” cuando las excepciones están desactivadas.
- Se comparten varios enlaces y mini tutoriales sobre:
- El modelo de objetos de C++ y cómo las clases se traducen a C.
- C++ bare-metal sin la biblioteca estándar.
Prácticas y trampas del C++ moderno
- Muchos argumentan que los smart pointers y RAII deberían enseñarse temprano, no como temas “avanzados”;
new/deletedeberían ser raros en código nuevo. - Debate sobre los punteros crudos:
- Algunos dicen que deben aprenderse en profundidad.
- Otros dicen que su papel como propiedad debe minimizarse, usándolos sobre todo como referencias anulables/no poseedoras.
- Advertencias sobre patrones sutiles que son legales en C pero indefinidos en C++ (por ejemplo, type punning).
- Quejas sobre la complejidad del lenguaje (por ejemplo, libros enteros sobre inicialización) y áreas incompletas como Unicode/texto.
Estilo de enseñanza y materiales
- Opiniones mixtas sobre el formato basado en diapositivas:
- A algunos les gustan las diapositivas concisas; otros creen que las diapositivas por sí solas son débiles para aprender.
- Críticas a las introducciones tipo “feature dump” que enumeran cada constructo antes de mostrar un uso práctico.
- Se recomienda:
- Combinar el estudio con proyectos reales o bases de código open source.
- Enseñar explícitamente pronto el modelo de compilación (translation units, templates, LTO).
Herramientas y sistemas de build
- Deseo de entornos de desarrollo containerizados con múltiples compiladores y analizadores estáticos.
- Algunos ven la containerización como evidencia de que las herramientas de C++ no son “modernas”; otros hacen lo mismo con Rust/Python por aislamiento.
- Meson y CMake (a menudo con Ninja) son los principales sistemas de build sugeridos; la gestión de dependencias en C++ se considera ampliamente dolorosa.
- Se discute el uso de devcontainers o Nix para domar toolchains y la visibilidad de bibliotecas.
C++ en la industria y el mercado laboral
- C++ sigue usándose mucho en:
- Compiladores, kernels de sistemas operativos, navegadores, bases de datos, HPC, gráficos, robótica, trading/HFT y motores de juegos.
- Panorama laboral percibido:
- Menos puestos que web/Python, pero a menudo más “interesantes algorítmicamente”.
- Se citan salarios muy altos en trading/HFT; promedio en juegos; relativamente bajos en embebidos.
- Algunos sugieren ampliar hacia Python, C# o gestión de proyectos si el objetivo son puestos de “más alto nivel”.
- Rust se menciona a menudo como una alternativa atractiva, pero se ve a C++ como arraigado, especialmente en juegos y sistemas.