2008-09-30 11 views
28

C++ fue el primer lenguaje de programación en el que realmente me metí, pero la mayor parte de mi trabajo fue académico o para programación de juegos. La mayoría de los trabajos de programación en los que vivo requieren programadores Java o .NET y tengo una idea bastante buena de las tecnologías que necesitan además del lenguaje básico. Por ejemplo, un programador Java podría necesitar conocer EJB, Servlets, Hibernate, Spring y otras tecnologías, bibliotecas y frameworks.¿Qué tecnologías necesitan saber los programadores de C++?

No estoy seguro acerca de C++, sin embargo. En situaciones de la vida real, para la programación empresarial general, ¿qué deben saber los programadores de C++ más allá de las características del lenguaje? Cosas como la API de Win32, ciertas bibliotecas, marcos, tecnologías, herramientas, etc.


Editar: Estaba pensando en la biblioteca estándar, así cuando dije lenguaje básico, lo siento si estaba equivocado o no libre. Me preguntaba si existen requisitos de dominio más específicos similares a todas las tecnologías que los programadores de Java o .NET podrían necesitar para saber lo que los programadores de C++ necesitan saber en general. Estoy de acuerdo en que la biblioteca estándar y Boost son esenciales, pero ¿hay algo más allá o es diferente para cada empresa/proyecto/dominio?

Respuesta

29

En cuanto a todos los idiomas, creo que hay tres niveles interconectados de conocimiento:

  1. Maestro su idioma. Todo programador debe (hacer lo que sea necesario) dominar la sintaxis. Las buenas referencias para lograr esto son:
  2. Conozca sus bibliotecas ampliamente.
    • STL es definitivamente una necesidad ya que se ha incluido en el C++ Standard Library, por lo que sabe que está muy cerca del punto 1: tiene que dominarlo.
    • Conociendo boost puede ser muy interesante, como una biblioteca multiplataforma y genérica.
    • Conozca las bibliotecas con las que debe trabajar, ya sea Win32 API, OCCI, XPCOM o UNO (solo unos ejemplos aquí). No necesita saber una biblioteca de base de datos si desarrolla componentes puramente gráficos ...
  3. Desarrolle su conocimiento de patrones. No se puede evitar Design Patterns: Elements of Reusable Object-Oriented Software aquí ...


lo tanto, mi respuesta a su pregunta sería actualizado: saber su idioma, conocer su plataforma, conocer su dominio. Creo que hay suficiente trabajo aquí, especialmente en C++. Es un trabajo constante que nunca se debe pasar por alto.

4

Biblioteca de plantillas estándar

http://en.wikipedia.org/wiki/Standard_Template_Library

+1

Tenga en cuenta que cuando los programadores de C++ hablan de la "Biblioteca de plantillas estándar" (STL), que casi siempre significan realmente la biblioteca estándar de C++. El STL sirvió de base para gran parte de la biblioteca estándar de C++, pero el STL es obsoleto, excepto en aquellas implementaciones de C++ que no implementan el estándar. –

15

C++ desarrollador tiene que asimilar std y boost bibliotecas.

La lista de otras tecnologías depende en gran medida del tipo de proyecto. Seguramente tendrá alguna interacción con SO, por lo que deberá conocer la API de su entorno.

En cuanto al acceso a datos y otros productos existen toneladas para diferentes soluciones. C++ es mucho más rico que algunos lenguajes administrados en ese sentido. El 99% de los viejos sistemas populares tienen una interfaz C/C++.

Después de que aclaró su pregunta un poco en el comentario a mi respuesta que puedo recomendar:

  • navegador Buena código (SourceInsight o entender para C++, por ejemplo)
  • herramientas de análisis estático (Link, KlockWork inForce , etc.)
  • MySQL \ SQLite (me encontré con estos DB en un gran número de proyectos de C++)
  • tecnologías de interfaz de usuario (OpenGL \ GLUT, DirectX, GDI, Qt, etc)
+0

Sí, pensé que eso fue dado. Lo siento si no estaba claro. Estaba hablando más sobre tecnologías de negocios, si hay alguna. No se trata de lo que C++ necesita saber, pero si hubo otros conceptos ampliamente adaptados utilizados en círculos profesionales. –

4

Esto dependerá en gran medida de la plataforma utilizada y otras restricciones. Como regla general, un buen programador (C++) es (o debería ser) capaz de aprender una API específica de la plataforma en muy poco tiempo. Para C++, es mucho más importante entender las diferentes cadenas de herramientas (por ejemplo, un programador de Windows también debe conocer la cadena de herramientas de GCC) y las diferencias en los compiladores. El programador también debe comprender las limitaciones y el comportamiento dependiente de la plataforma del lenguaje.

En cuanto a las bibliotecas, los programadores de C++ absolutamente necesitan saber STL y Boost. Sin discusión.

+0

El código de C++ más estable en el que he trabajado no usó boost. Si bien es común, aún no es el estándar de la industria. – tloach

+0

Ahora que lo pienso, tampoco usó el STL, teníamos un código interno que cumplía el mismo propósito pero que era específico para nuestra área comercial. – tloach

+0

@tloach: incluso si no terminas usándolos, conocerlos es crucial. Por último, no duplique innecesariamente las funciones existentes. –

1

En ningún orden específico

  • COM/ATL
  • DirectX
  • MFC & Win32
  • STL
  • GDI
  • BOOST
1

si estás usando gcc definitivamente deberías saber gdb. En realidad, debe ser competente con el depurador local para el compilador que esté utilizando. Aparte de eso, existe una gran variedad de bibliotecas que permiten que recoger una API sea más útil que una específica. Sugeriría aprender doxygen sin embargo.

6

tecnologías que usted debe saber como programador C++ (y por lo tanto más conocimientos técnicos que los programadores menores;)):

problemas de rendimiento - lo que hace que las cosas van lentas, cómo detectar y solucionar dichos problemas. También me refiero a cosas como cambio de contexto, líneas de caché, búsquedas optimizadas, uso de memoria y restricciones, y cosas similares que a tu desarrollador promedio de VB/C# no le interesan.

problemas de subprocesamiento: cómo obtener el máximo provecho de una aplicación de subprocesos múltiples, cómo detectar y corregir abusos de la misma.

comunicaciones de bajo nivel, especialmente si se puede conectar a sistemas oscuros que nadie más ha escrito un conjunto de herramientas para (especialmente comunicaciones de radio), latencia y gestión del ancho de banda.

De lo contrario, para herramientas específicas: depende de lo que se oriente, Windows dev será diferente a Linux, diferente de incrustado.

2

Además del material que todos enumeran, tenga en cuenta que el programador C++ tiene espacio en el mercado de sistemas integrados (mucho más que la mayoría de los otros lenguajes de alto nivel). La familiaridad con sistemas integrados y desarrollo puede abrir muchas puertas y oportunidades de trabajo donde no competirás tan fuertemente con el desarrollo de Java, por ejemplo. Así que aprender a codificar el código compacto (compacto después de compilado) y las técnicas de poco uso de memoria es una buena apuesta.

1

Si está usando linux, entonces Valgrind es una herramienta muy útil para verificar cómo su programa trata el acceso a la memoria.

0

La forma popular de usar C++ en el espacio móvil implicaría aprender el desarrollo del sistema operativo Symbian.

http://developer.symbian.com

Cuestiones relacionadas