Mejorando el nivel de mi código C / C ++

16

He estado programando durante 3-4 años y siento que ya no puedo ser llamado principiante, pero leí algunas preguntas en este sitio y creo que están hablando de WTF. Siento lo mismo cuando tomo libros de programación hoy en día.

He leído varios libros de programación para principiantes, algunos en C / C ++ y otros en juegos. He escrito algunas cosas más complejas, como AI muy básica, interfaz serial y TCP / IP.

Planeo convertirme en programador de juegos, pero recientemente me he interesado un poco en los sistemas integrados después de tener la oportunidad de trabajar en ellos (la interfaz en serie).

Me ha resultado muy difícil encontrar materiales para continuar mi aprendizaje después de completar la introducción y los libros para principiantes, ya que no hay libros intermedios de C ++ que pueda encontrar.

¿Qué consejo darías para crecer y mejorar mis conocimientos y habilidades? Se agradecerán mucho los recursos específicos.

Skeith
fuente
Para los libros de C ++, vea esta pregunta: stackoverflow.com/questions/388242/…
Naveen

Respuestas:

10

Si está hablando de C / C ++, entonces definitivamente podría usar alguna experiencia adicional. La primera pista que te daré es que C y C ++ son lenguajes completamente diferentes . El mejor recurso para aprender C ++ es StackOverflow: hay muchas personas que tienen grandes cantidades de experiencia y conocimiento.

Lo siguiente que debe hacer es comenzar un proyecto importante, como intentar escribir un motor de gráficos 3D en una API de bajo nivel como DirectX, y cuando su diseño falla miserablemente como lo hacen todos los primeros proyectos, entonces aprenderá algo sobre cómo no programar.

Puede consultar este enlace en StackOverflow para obtener una gran lista de buenos libros para aprender C ++.

DeadMG
fuente
3
No, el mejor recurso para aprender C ++ es un buen libro, o preferiblemente libros.
Neil Butterworth
+1 Para comenzar un proyecto importante. He aprendido más a través de un motor de gráficos en 3D que cualquier cosa que lea en un libro. Te obliga a entrar en situaciones desconocidas que requieren investigación para resolver. No es bonito, no es eficiente, pero aprenderás algo.
SC Ghost
+1 para "Si estás hablando de C / C ++, entonces definitivamente podrías usar alguna experiencia extra". -1 para "El mejor recurso para aprender C ++ es StackOverflow", por lo que no hay voto.
Residuo el
5

En primer lugar, aumente su formación teórica básica en lo que aún no sabe. Estudie la teoría y escriba algunos ejemplos breves.

El ejemplo de fondo teórico básico incluye:

  • Algoritmos y estructuras de datos
  • Diseño de software (UML, patrones de diseño, OOP)
  • Sistemas Operativos y Programación Paralela

Luego, considere aprender un lenguaje adicional (por ejemplo, Java o C #). - Estudiar idiomas adicionales ayuda mejor bajo los pros y los contras de cualquier idioma que esté usando y lo ayuda a aprender las mejores prácticas que quizás no conozca.

Luego elija un nuevo dominio (programación web, gráficos por computadora, procesamiento de imágenes, visión por computadora, acceso a datos, ...). Estudie la teoría y escriba algunos ejemplos breves.

A continuación, cree un ejemplo grande, que encapsule una aplicación de varias capas, manejando el acceso a datos, la interfaz de usuario y un dominio específico que haya elegido. Ponga énfasis en la arquitectura de la aplicación (asegúrese de que sus partes estén tan acopladas como sea posible).

Con suerte, aprenderá cómo aprender nuevos enfoques y tecnologías e integrarlos con una buena arquitectura.


Específicamente para la programación de juegos, recomiendo elegir los siguientes dominios / tecnologías:

  • Conceptos básicos de procesamiento de imágenes
  • Cualquier tecnología de interfaz de usuario específica
  • Conceptos básicos de gráficos por computadora
  • Cualquier motor gráfico específico (por ejemplo, DirectX, OpenGL, OGRE, ODG, Java3D, ...)
  • Conceptos básicos de física mecánica
  • Cualquier motor de física específico (por ejemplo, PhysX, ...)
  • Cualquier motor de juego específico (por ejemplo, XNA, ...)
  • Programación multiproceso
  • Programación distribuida


Editar:

Cómo aprender:

  • Lea y ejecute ejemplos de CodeProject.
  • Explore algunos libros en una biblioteca o tienda de libros / libros electrónicos hasta encontrar un par de libros que le gusten (que coincidan con su estilo de lectura + cubran los temas sobre los que desea leer).
  • Leer blogs
  • Pruebe cosas y pregunte en StackOverlow cuando se quede atascado.
Danny Varod
fuente
Sé directo x. segundo, he pensado en esto pero no puedo encontrar ningún recurso más allá de lo básico, ¿tienes algún consejo sobre CÓMO aprender las cosas?
Skeith
2
Al escribir ejemplos, prueba y error es la mejor manera. Además, vea editar.
Danny Varod
1

Usar C ++ (en combinación con C) suponga que tendrá mucho más para aprender a entender WTF de lo que están hablando. C ++ es varios lenguajes, varias capas de abstracciones que viven en el mismo lugar y lleva mucho tiempo explorarlo todo de una vez, luego entender lo que acabas de ver.

He estado en su caso y todavía estoy aprendiendo sobre esos idiomas. También aprendo mucho trabajando en sistemas embebidos.

Aquí está mi consejo:

  • Lea esos libros: /programming/388242/the-definitive-c-book-guide-and-list -> Comience con los libros introductorios, incluso si siente que no es un principiante, porque tiene para solificar mucho tus conocimientos básicos antes de continuar. Luego, aprenda sobre la metaprogramación de plantillas y las restricciones de los sistemas integrados.
  • Practica mucho: cuanto más apliques lo que aprendas, más lo entenderás. En este punto, mi forma de hacerlo es probar cualquier rincón de los idiomas y el contexto en pequeños proyectos de prueba. También tengo "grandes" proyectos caseros donde controlo todo y practico nuevas técnicas y las empujo hasta que se rompen.

No asumas que ya sabes mucho sobre programación. La mayoría de los desarrolladores maduran en la programación solo después de más de 10 años de práctica en el mundo real, con diferentes contextos y tipos de proyectos, plataformas, etc.

Estás empezando tu viaje.

Klaim
fuente
3
Sin mencionar que "maduro", como lo estás usando, está lejos de ser "nada más que aprender". Cuanto más aprendes, más cosas sabes que no sabes.
David Thornley
0

En función de sus intereses en la programación y los juegos integrados, también recomendaría lo siguiente: puede leer detenidamente las listas de libros de las publicaciones anteriores para encontrar un buen material fuente sobre todos estos temas. Un libro que encontré esencial fue The C ++ Standard Library: A Tutorial and Reference

  • Si no te sientes cómodo con los conceptos básicos de OOP, aprende esos primero. Comprender los conceptos básicos de herencia y encapsulación. Sepa cómo se comportan las palabras clave virtuales, públicas / protegidas y privadas y estáticas.

  • Siéntase cómodo usando punteros y referencias (y generalmente prefiere referencias). Aprenda y use la construcción smart_ptr <> para lograr la administración de memoria "automágica".

  • Aprenda a usar plantillas C ++, inicialmente solo como tipos de datos de contenedor. Descubrirá continuamente técnicas nuevas y más potentes que las plantillas de C ++ pueden realizar mediante metaprogramación.

  • Aprenda el STL: use cadenas, iostream, excepciones y las clases de contenedor, y prefiéralas sobre los tipos de datos char *, FILE * y char [] de nivel inferior siempre que sea práctico.

  • Comience a usar partes de la biblioteca Boost : le recomendaría que primero conozca su biblioteca de hilos y asio, dados sus intereses. Esta es una base de fuente C ++ multiplataforma de código abierto muy potente que le permitirá escribir código de alta calidad que también es portátil. (Muchas adiciones al estándar central de C ++ se han originado en las contribuciones de Boost)

  • ¡Que te diviertas! En serio: elige algunos proyectos favoritos para codificar. Tal vez juegue con las placas Arduino si le gustan los proyectos de programación integrados.

  • Obtenga algo de experiencia: si solo ha usado Windows / Visual Studio C ++, intente escribir un código para Linux / g ++ u OS X / XCode (puede codificar C ++ en la Mac, o realmente puede expandir sus horizontes e ir para Objective-C, ¡ver cómo otra rama de lenguajes OOP aborda las cosas!)

holtavolt
fuente