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/delete deberí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.