Docencia en C++: Breve introducción al lenguaje

Motivación


Durante 2018 se constituyó, dentro del proceso de estandarización del lenguaje ISO C++, el subgrupo de trabajo SG20 (C++ Education Study Group) focalizado en proporcionar directrices curriculares y de enseñanza para C++.

El documento de trabajo P1389R0 publicado por dicho grupo (disponible en http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1389r0.html) anima a integrar herramientas básicas de programación en los cursos introductorios de C++, tales como package managers, build systems y debuggers, entre otras. Nuestra serie de posts anterior, centrada en la integración de Visual Studio Code, Mingw-w64 y CMake en el entorno MS Windows, responde precisamente a esta directriz.

Asimismo, el documento P1389R0 sugiere facilitar a nuestros estudiantes una breve introducción acerca del lenguaje en la que se aprecien sus fortalezas y casos de uso moderno, pero que huya de comparaciones innecesarias con el lenguaje C que puedan llevar a considerar C++ un mero 'C con clases', un error muy extendido incluso en nuestros días. En efecto, aun cuando muchas fuentes se refieren a C/C++ como una unidad temática, ambos lenguajes son de hecho radicalmente diferentes, hasta el punto de que introducir C como primer paso en un curso en C++ puede resultar dramáticamente contraproducente (un punto éste analizado de forma muy convincente en CppCon 2015: Kate Gregory 'Stop Teaching C'https://youtu.be/YnWhqhNdYyk). Este post pretende proporcionar una presentación al lenguaje en la línea sugerida por P1389R0.

Acerca del lenguaje C++


C++ es un lenguaje de programación multiparadigma de propósito general especialmente diseñado para la programación de sistemas. Sus principios fundacionales incluyen maximizar la eficiencia (sin dejar lugar a lenguajes de más bajo nivel salvo ensamblador), el empleo de abstracciones de coste cero y la retrocompatibilidad.

El primer proceso de estandarización internacional del lenguaje, ISO C++ 1998-2003, permitió la incorporación de técnicas de programación genérica y, con ellas, el desarrollo de una biblioteca estándar en la que algoritmos, estructuras de datos e iteradores se interrelacionaban de forma natural y eficiente. 

Los estándares posteriores ISO C++ 2011/14/17 han proporcionado mejoras sustanciales al núcleo del lenguaje (semántica de movimiento, expresiones lambda, inferencia automática de tipos, inicialización uniforme, expresiones constantes, etcétera), así como una notable extensión de la biblioteca estándar (punteros inteligentes, programación multihilo, sistema de ficheros, expresiones regulares, etcétera).

C++ es ampliamente utilizado en aquellos ámbitos donde priman los requerimientos de eficiencia y una alta flexibilidad y control del código. Entre ellos, cabe señalar (más información en el documento P1389R0, así como en http://www.stroustrup.com/applications.html):

  • Tecnologías basadas en la web (Amazon, Facebook, Google).
  • Gráficos, CAD (computación en GPGPU, Adobe Technologies, Autodesk).
  • Industria de los videojuegos (títulos Triple A, Unreal Engine).
  • Sistemas embebidos (Renesas' R-Car H3).
  • Sistemas operativos, GUIs (MS Windows, Apple's IOKit subsystem, KDE, Qt).
  • Sistemas financieros (Bloomberg, IMC Financial Markets, Morgan Stanley).
  • Machine learning (Tensorflow).
  • Computación y tecnología científica (CERN, James Webb Telescope, NASA’s Mars Rovers).

Para obtener información actualizada acerca de las novedades del lenguaje, puedes visitar el portal de la fundación sin ánimo de lucro Standard C++ Foundation (https://isocpp.org/), impulsada por empresas punteras del sector tecnológico como Microsoft, Google e Intel, entre otras.

No hay comentarios:

Publicar un comentario