¿Cuál es el mejor enfoque para ser más competente en C ++?

Una de las grandes fortalezas de C ++ que, como es habitual, tiene un costo, es que es un lenguaje verdaderamente abierto, no controlado por ninguna organización desde que AT&T lo abandonó en los años 80. Hasta 2012, no había un solo sitio web oficial de C ++ . En 2012, se creó la primera y hasta ahora la única página web real de C ++, http://isocpp.org/ (No estoy contando el acceso web a los documentos de WG21, ya que no es mucho un sitio web y ciertamente no es algo para un principiante dar sentido a

Como consecuencia, si realmente quieres aprender C ++, te aconsejo que no utilices tutoriales en línea y la mayoría de los libros. Muchos escritores de libros profesionales publicaron muchos libros de texto horribles en C ++ que pueden ser fáciles de leer y vender bien, pero que enseñan mentiras.

Seguir con la lista de libros verificados por la comunidad disponible en StackOverflow: http://stackoverflow.com/a/38828.

Escribir código. C ++ es un lenguaje muy práctico, se inventó y continúa existiendo para resolver problemas prácticos de ingeniería. Cuanta más práctica tengas, más tendrá sentido. La primera vez que leí Effective C ++ en 1998 no entendí ni la mitad. Después de algunos años de experiencia profesional, de repente se hizo trivial y se simplificó en exceso (entonces sucedió lo mismo con Modern C ++ Design).

Emule el trabajo de ingeniería de software: no solo escriba código, sino diseño, depuración, perfil, ajuste, escriba unidades de prueba, ejecute herramientas de análisis estático, configure el control de fuente y compilaciones automáticas.

Cuando deba buscar algo en línea, confíe en las fuentes verificadas por la comunidad (http://stackoverflow.com, http://cppreference.com), pero tenga en cuenta que a veces se equivocan.

Si http://isocpp.org no está de acuerdo con lo que dije, confíe en http://isocpp.org.

La forma principal en que aprendes C ++ es escribiendo mucho código en C ++. Esto también es válido para cualquier otro lenguaje de programación.

Sin embargo, dicho esto, C ++ es probablemente el menos amigable para los principiantes de todos los lenguajes de programación convencionales. Debido a su complejidad, lleva mucho tiempo desarrollar un buen modelo mental de C ++. Aquí hay un ejemplo. En C, el siguiente programa imprime “¡Hola mundo!” seguido de una nueva línea:

#include
int main () {
printf (“¡Hola mundo! \ n”);
}

Estoy seguro de que alguien te explicó que “\ n” es una secuencia especial que significa “nueva línea”. Luego, cuando aprendas sobre las variables de cadena, puedes escribir esto …

#include
int main () {
const char message [] = “¡Hola, mundo! \ n”;
printf (“% s”, mensaje);
}

(Probablemente alguien también explicó que “% s” significa “imprimir el contenido de la variable de cadena.)

Ahora vamos a hacer C ++ …

#include
int main () {
std :: cout << "¡Hola mundo!" << std :: endl;
}

Alguien te explica que esto imprime “¡Hola mundo!” seguido de una nueva línea. Luego, más adelante, aprende sobre cadenas en C ++ e intenta hacer esto:

#include
#include
int main () {
std :: string s = “¡Hola mundo!” + std :: endl;
std :: cout << s;
}

¿Adivina qué? Esto no se compila . Y el mensaje de error dice:

error: invalid operands of types 'const char [14]' and '' to binary 'operator+'

… ¿eh?

Para comprender completamente cómo funciona el programa original, necesita saber que std :: endl no es un carácter de nueva línea. Entender realmente cómo funciona std :: endl está fuera del alcance de los principiantes. Un buen profesor no puede hacer mucho más que decirte que, en este punto, std :: endl es algo que solo tiene sentido cuando lo envías a un flujo. Un mal maestro será demasiado incompetente para saber que std :: endl no es un personaje de nueva línea, y te enseñarán que sí, y estarás totalmente confundido. Pero incluso en el primer caso, acaba de aprender una regla de apariencia arbitraria, sin un modelo mental de cómo funciona. Muchas cosas simplemente no tendrán sentido hasta que sepas muy bien el idioma.

Entonces, sí, C ++ no es apto para principiantes. Pero tienes una mejor oportunidad si lees un libro en C ++. Ahora otra vez hay un problema. C ++ es tan complicado que incluso la mayoría de los programadores de C ++ no entienden muy bien el lenguaje, por lo que la mayoría de los libros en C ++ apestan. Pero la gente que está en Stack Overflow mantiene una lista de libros de C ++ que no apestan: La Guía y la Lista Definitiva de Libros de C ++. Le recomiendo encarecidamente que elija uno de estos libros y lo lea, si no es de principio a fin, al menos a fondo.

¡Pero no crea que puede leer todo el libro y luego conocerá C ++! Olvidará la mayoría de las cosas que lea, a menos que esté leyendo mientras también codifica. Si eres un estudiante universitario, toma una clase que use C ++ si puedes. Si no puede, considere hacer algunos problemas en SPOJ. Varían en dificultad, por lo que hay muchos problemas que incluso los principiantes pueden resolver. Vas a escribir un montón de código malo. Esta bien; A medida que aprenda más sobre el idioma, puede regresar y volver a escribir sus programas, pero mejor. Mi maestro me hizo hacer esto, y me alegro de haberlo hecho.

En el camino, tendrás problemas. A veces simplemente no sabrás cómo hacer algo en C ++. Ahora, tú tienes dos opciones. Puede publicar una pregunta aquí, o tal vez en Stack Overflow, o simplemente puede buscar un fragmento de código que haga lo que quiere y pegarlo en su programa y ajustarlo hasta que funcione. O bien , puede averiguar qué concepto es el que no comprende y leer un artículo que realmente lo explica, de modo que entienda cómo escribir el código correctamente para usted. Si quieres conocer bien C ++, no hace falta decir que debes hacer lo último.

Después de meses, o quizás años, habrás escrito miles de líneas de código C ++, y generalmente tienes una buena idea de cómo funciona C ++ en la mayoría de las situaciones. Pero el lenguaje todavía puede tener un sentido frustrantemente escaso. Ocasionalmente puede recibir mensajes de error que son páginas enteras. En este punto, querrás entender realmente la esencia de C ++. Entonces, ¿Qué haces? ¡Lee más libros! Busque en las secciones “Intermedio” y “Avanzado” de la página de Desbordamiento de pila vinculada. También vale la pena leer “El diseño y la evolución de C ++”, del propio creador del lenguaje. Y aborde proyectos más grandes, obligándose a usar aún más partes del lenguaje. Escriba una lista vinculada o una clase de árbol de búsqueda binaria en C ++ usando plantillas, por ejemplo. Además, si alguna vez tiene curiosidad acerca de cosas aleatorias, como, “hmm, me pregunto, si tengo dos sobrecargas de esta función, a cuál se va a llamar”, no se contenta con no saber la respuesta. ¡Abre tu editor de texto y escribe un programa y prueba a cuál se llama! Y si no entiendes por qué, entonces pregunta. Y aprender .

He escrito más de 80,000 líneas de código C ++ en un lapso de siete años. He escrito más del doble de código en C ++ que en todos los demás idiomas juntos. Pero todavía quiero aprender más sobre C ++. Quiero saber todo lo que hay que saber sobre C ++. Así que respondo las preguntas de otras personas en Stack Overflow. A menudo, no sabré la respuesta a la pregunta, así que iré directamente al estándar de C ++ y lo leeré.

Después de pasar un año o dos familiarizándome con el estándar, y habiendo repasado la mayoría de los párrafos en algún punto, y familiarizado con el standardese y las reglas generales del idioma en un nivel fundamental, me suscribí a las propuestas std y std Discusión en las listas de correo. Así que ahora también me mantengo al día con el desarrollo del lenguaje.

Creo que sería genial si tuviera un trabajo donde mi empleador realmente pagaría para enviarme a asistir a las reuniones del comité de normas. No estoy seguro de si llegaré, pero ya veremos.

Esta respuesta va a sonar extraña, pero esta es la verdad.
Para sobresalir en cualquier programación, debe dominar la “Programación” y no aprender el idioma.

Podemos considerar que c ++, Pythion, Java, etc. es como un lenguaje normal, es decir: inglés, chino, italiano. La especia real en cualquiera de estos está en la literatura, los buenos escritores con buena habilidad escriben buena literatura, y los malos escritores a menudo matan el lenguaje.

La idea es pertenecer a ese pequeño círculo de personas que realmente conocen la programación real y crear productos sorprendentes a partir del lenguaje.

Para alguien que quiera hacer esto, puede hacerlo fácilmente aprendiendo las lógicas reales y las ideas en juego y lo que se necesita para hacer un gran programa.

Aprende Programación, no Lenguaje de Programación primero.

ACTUALIZACIÓN:

Lamento haber olvidado agregar cualquier tipo de guía sobre cómo hacer esto. La siguiente fue mi respuesta a un comentario de un amigo que me preguntó cómo.

Primero tenga una idea básica de lo que se trata la programación: Programación por computadora

Muchos de los cursos en línea sobre programación de Coursera, edX y Udacity ofrecen una gran concentración en las ideologías de programación que el lenguaje.

Yo recomendaría: Programación: Principios y práctica utilizando C ++ por Bjarne Stroustrup

Una vez que haya leído, debe tener claro el pensamiento que va detrás de un programa. Entonces lee.

  • El manual de diseño de algoritmos de Steven S. Skiena
  • Introducción a los algoritmos por Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein

Creo que la mejor manera de mejorar un C ++ es pensar en escenarios de la vida real y comenzar a implementar esas situaciones en C ++ utilizando la programación orientada a objetos. Por ejemplo, consideremos un sistema de gestión de impresoras y archivos.

“Una de las funciones que admite un sistema operativo típico es la de impresión de archivos. Hay muchos tipos de archivos (texto, imágenes, objetos, audio, etc.) y muchos tipos de impresoras: láser, chorro de tinta, matriz de puntos, etc. ., y cada uno puede ser blanco y negro, escala de grises o color. Además, el conjunto de tipos de archivos e impresoras puede seguir expandiéndose a medida que se desarrollan nuevos formatos y nuevas impresoras.

Supongamos que nuestro sistema soporta las siguientes entidades:

Archivos: cada archivo tiene un nombre (cadena) y tamaño en bytes (int). Un archivo real en el sistema sería una instancia de un subtipo de archivo. Un archivo también puede crear una representación imprimible (como una cadena) de su contenido. Más sobre esto más adelante.

Carpeta: contiene una lista de cero o más archivos. Las carpetas no conocen el subtipo específico de un archivo, solo actúan como un contenedor de archivos.

Impresora: cada impresora tiene un nombre (cadena). Se puede verificar una impresora para ver si está disponible o no. Una impresora admite una solicitud para imprimir un archivo en un cierto modo (Co lour o Blanco y Negro)

Servidor: gestiona un conjunto de impresoras. Todas las solicitudes a las impresoras se enrutan a través del servidor. También mantiene una de las impresoras como la impresora “Predeterminada”. El servidor también proporciona la noción de tiempo para el resto de la red. Una llamada a getTime () de la impresora devuelve el tiempo en segundos desde que se inició el programa. Solo hay un servidor en el sistema. El servidor no conoce el subtipo de una impresora ni puede consultarla para verificar su subtipo.

Un usuario puede realizar una de las siguientes tareas:

1. Crea carpetas. Las carpetas se crean con un nombre.

2. Cree un archivo de subtipo Texto, Imagen o Audio. El nombre del archivo es obligatorio. Puede elegir estructurar los datos dentro del subtipo de la forma que desee. Además, el contenido real del archivo puede ser arbitrario.

3. Agregue un archivo a una carpeta.

4. Solicitar la impresión de un archivo en una impresora específica. Esta es una operación en el servidor. El usuario puede omitir la especificación del nombre de la impresora si se usa la impresora predeterminada. El usuario también especifica si el archivo debe imprimirse en color o en bw. El valor predeterminado es “color”

Cuando un usuario solicita una acción de impresión, se produce la siguiente secuencia de eventos:

1. El servidor comprueba con la impresora especificada (por defecto, si no se especifica ninguna) si puede manejar el archivo dado y el tipo de impresión (bw o color). La impresora responde si puede manejar esto.

2. Si es compatible, el Servidor comprueba si la impresora está disponible. Si es así, envía la solicitud de impresión a esa impresora. De lo contrario, agrega ese trabajo a la lista de solicitudes de impresión para esa impresora.

3. Cuando una impresora procesa un trabajo de impresión, le pide al archivo que devuelva una representación imprimible de su contenido. Por ahora, asumiremos que esto es una cadena. La impresora sabe cómo convertir esta cadena a comandos de impresión de nivel inferior.

a. El archivo crea una cadena que representa su contenido. El contenido exacto de esta cadena no es importante. Puede implementar el cuerpo de este método para devolver cualquier cadena. Los archivos de texto e imagen saben cómo convertirse a sí mismos en cadenas, y los archivos de audio y objetos no.

La impresora también calcula la cantidad de tiempo que tomará imprimir el archivo, y se marca como no disponible por esa cantidad de tiempo (por ejemplo, en segundos). Para este ejercicio, se supone que cada solicitud de impresión requiere un tiempo aleatorio entre 3 y 10.

4. Cuando el servidor está libre, escanea continuamente la lista de tareas pendientes, y si la impresora correspondiente está disponible, envía ese trabajo de impresión a esa impresora. Termina cuando no hay más trabajos pendientes. ”

Ahora, este tipo de situación se puede manejar muy fácilmente utilizando OOP. Y da una gran práctica para que un programador implemente varios conceptos de OOP. Recuerda intentar optimizar tu código siempre que sea posible. 🙂

Prefacio: soy un estudiante de ingeniería eléctrica con un enfoque de investigación en robótica. Esta respuesta está motivada por mi experiencia personal.

Una buena manera de comenzar con C ++ es escribir un controlador para un sensor.

Aquí hay un sensor láser:

Se barre alrededor de la habitación:

y te da datos como este:

Ahora, note que el cable negro sale de ahí. Dentro de ahí está toda la información que pueda desear de este dispositivo. Sin embargo, hay varias complicaciones asociadas con la recuperación de esos datos. Por ejemplo:

– ¿Qué tan rápido salen los datos del sensor?

– ¿Cómo salen los datos del dispositivo?

– ¿Cómo se formatea la información?

Estas son todas las preguntas que se ven obligadas a responder mientras escribe el controlador. Un controlador es una interfaz de hardware a software que interpreta los datos y comandos entrantes. Básicamente sirve como traductor entre su dispositivo y su computadora.

¿Por qué es este un buen ejercicio en C ++?

Aprenderá sobre los fundamentos de C ++, tales como:

1. Punteros

2. Tipos de datos

3. Clases

BONIFICACIÓN: comunicación serial.

Recomiendo encarecidamente que su código esté orientado a objetos para que otros puedan usar su código con facilidad. Alguien podría argumentar que puedes hacer lo mismo en C. Totalmente puedes. Sin embargo, hacer una clase llamada “LaserSensor” será un buen ejercicio sobre cómo funcionan las clases y lo ayudará en su objetivo de aprender C ++.

Todos estos conceptos pueden parecer simples e intuitivos, pero combinar las opciones correctas es increíblemente difícil y requiere mucha paciencia, si está dispuesto a hacerlo 🙂

C ++ se puede dividir en varios componentes.

Primero, tienes la funcionalidad básica orientada a objetos. En C ++, esto es extremadamente poderoso. Yo recomendaría saber sobre herencia múltiple, polimorfismo, operadores primarios, constructores y destructores, fábricas, control de alcance y variables estáticas en las clases.

En segundo lugar, están las plantillas. En C ++, tiene muchos tipos de datos donde todas las operaciones están definidas pero algunas propiedades clave no lo están. Es una forma de tipo de datos abstractos. Al crear una instancia de una plantilla, rellena parte o toda la información faltante, según la plantilla. Las plantillas le permiten tener algunos tipos de datos bastante complejos, incluidos tipos de datos mixtos, sin tener que escribir el código. Debido a que las plantillas se usan mucho, el código tiende a ser muy robusto.

Tercero, interactuar con otros programas. C ++ admite sockets, subprocesos POSIX y múltiples procesos. Hay muchas bibliotecas de terceros para hacerlas más fáciles. Las bibliotecas de terceros también le proporcionan RPC y CORBA, aunque el uso de estos ha disminuido con los años. Definitivamente, debe comprender la diferencia entre el software pasivo, activo y reactivo, más para comprender cuáles son los potenciales y las dificultades que existen. Probablemente codificará soluciones que son un poco más abiertas que “debería codificar un servidor reactivo”, pero comprender las opciones le da espacio para agregar matices que sean útiles.

En cuarto lugar, la seguridad. CERT publica una página web con todos los estándares de seguridad recomendados actuales para los programas C, C ++ y Java: qué evitar, qué hacer, ese tipo de cosas. La seguridad es extremadamente valiosa cuando se trata de entrada. La entrada siempre debe ser validada, pero las cosas se olvidan o hay limitaciones sobre qué validación puede hacer. Si está utilizando un código de seguridad en esos lugares, el riesgo de que se produzca un error o una falla en todo el sistema se reduce considerablemente.

Comenzaría con el primero en la lista y llegaría a ser razonablemente competente. Es fundamental para todo lo demás. No tiene que ser un experto, pero debe estar seguro de que no hay grandes sorpresas al acecho.

Para las partes segunda, tercera y cuarta, tomaría una porción de cada una y aprendería la porción. Algunas plantillas no tendrán sentido sin la interacción del programa, la interacción de buena calidad significa saber algo sobre seguridad. Una cucharada de cada uno, bien mezclada, en cualquier momento debe hacerte bien. Practica, no te sobrecargues de información nueva, pero nunca dejes que se vuelva obsoleta. Hay mucho para mantener las cosas frescas durante mucho tiempo.

Una vez que tenga confianza en las cuatro áreas, puede comenzar a tener algunos problemas recurrentes o algunas áreas que parecen incompletas. Igualmente, podría ser una navegación suave. Sin embargo, si encuentra que se encuentra en los mismos obstáculos en repetidas ocasiones, entonces desea ver algunas bibliotecas o extensiones de terceros.

Probablemente el único que es tan estándar que es casi parte del estándar es Boost. Esto proporciona muchas funciones de ayuda muy útiles que facilitan la programación.

Cuando se trata de extensiones reales al estándar de C ++, solo puedo pensar en dos: C ++ orientado a aspectos y C ++ funcional. Añaden formas de programación completamente nuevas, lo que es excelente para las personas que necesitan más espacio del que soporta el paradigma de C ++.

Las bases de datos son otro asunto. Hay muchos conectores C ++ para las bases de datos relacionales populares, con los que quizás desee familiarizarse, pero también hay bases de datos orientadas a objetos y bases de datos relacionales de objetos. Son cosas diferentes. Le permiten permanecer en el paradigma OO, aunque de diferentes maneras, lo cual es excelente, ya que mantiene su programación consistente. El inconveniente es que son una tecnología menos madura y son mucho más raras. Sin embargo, si está escribiendo un programa que necesita almacenar y recuperar datos internamente sin el requisito de que cualquier otro programa pueda sumergirse en la base de datos, sería una locura ejecutar algo tan pesado como PostgreSQL o MySQL, con toda la conversión necesaria. hacia y desde los objetos. Mantenlo simple.

// Realmente nunca he implementado mucho.

El mejor enfoque para aprender cualquier idioma es implementarlo de varias maneras.

Por conocimiento básico, asumo que usted sabe lo que se necesita para comenzar, es decir, declaraciones de I / O simples, que realizan programas realmente simples como la suma o la resta.

// practicar que es exactamente?

Para aprender cualquier idioma, ya sea C ++ o python o java, comience con un paso, suba gradualmente las escaleras, midiendo cada paso diariamente. Por lo que quiero decir :

  • ¡Abra el terminal o el editor, escriba el código de los “conceptos básicos” que sabe, compílelo, ejecútelo y sienta la felicidad inicialmente !
  • Luego, gradualmente, a medida que aprendas más sobre el lenguaje, pasa al siguiente nivel; nuevamente, compila y elimina errores (si hay alguno, mira qué error hubo, si hay un error de sintaxis, no hay nada más que aprender, pero tienes suerte si tienes una lógica error, intercambia ideas durante horas hasta que lo consigas
  • De acuerdo, ahora cree su propio problema y resuélvalo utilizando sus habilidades de codificación de la manera más sencilla posible. Por ejemplo, escribir un simple script en Python para automatizar el proceso de verificación de nuevos anuncios en el sitio web de su universidad o colegio después de cierto tiempo y alerta. Usted o escribiendo un código C ++ que resuelve el problema!

Ahora viene específicamente al lenguaje , C ++. C ++ es un lenguaje hermoso.

Entender el

  1. Tipos de datos que admite el idioma, junto con el rango (Reflexione por qué este rango y otras cosas, si lo desea, de lo contrario no es necesario)
  2. Funciones, sus definiciones, la forma en que se asigna la memoria en función de la definición de la función. Luego, todas las funciones más utilizadas en la biblioteca (y sus definiciones, si es posible, xD)
  3. La restricción de espacio y tiempo (conocida como complejidad espacio-tiempo) una vez que alcanza un cierto nivel de experiencia de codificación. Como el código debe optimizarse para que funcione para el conjunto más amplio de dominio.
  4. Estructura de datos (primitiva, personalizada); Todos los aspectos útiles como pilas, colas, listas enlazadas, hash, montones, mapas, gráficos y árboles, manipulación de bits. No tienes que preocuparte por cosas muy simples e interesantes.
  5. Escriba sus propios algoritmos en lugar de ver primero el convencional (como el de dijkstra). De esta manera usted podría realmente entender lo que los convencionales intentaron implementar.

Recursos : No utilice muchos recursos inicialmente ya que no es necesario, puede reflexionar más adelante cuando empiece a sentirse un poco seguro.

Inicialmente sugeriría (en línea como se pide explícitamente)

  • Coursera | Cursos online de las mejores universidades. Únase gratis: para aprender (ya que el curso tiene un esquema diseñado de manera ejecutable, de lo contrario, los videos de YouTube están ahí). Navegar a través del contenido del curso y elegir de acuerdo a su interés.
  • HackerRank para practicar (no hay que preocuparse, está muy bien organizado, la dificultad del problema que puede establecer, la mejor parte es la definición del problema, muy bien definida)
  • Lee artículos de geeks para geeks de vez en cuando, ¡tienen cosas realmente interesantes! (Lenguaje de programación C ++ – GeeksforGeeks)

Suficiente, lo suficientemente grande como para comenzar y desarrollar algún tipo de adicción.

Feliz aprendizaje 😀

“No hay ninguna píldora para convertirte en un buen programador. Se necesita mucha lectura, aprendizaje y práctica ”

Para llegar a ser bueno en cualquier lenguaje de programación, debe sentirse cómodo con lo básico. Y una vez que te sientas cómodo con lo básico, aprender a programar se convierte en algo divertido. C ++ es un lenguaje extremadamente poderoso y tiene muchas características. Le recomendaría poner énfasis en la herencia, el polimorfismo, la encapsulación, la sobrecarga de constructores y métodos, y las plantillas. Aquí hay algunos consejos que debe seguir para convertirse en un buen programador de C ++.

  1. Sea claro con lo básico, ya que sin una base sólida, tendrá problemas para crear algo de valor. Le recomendaría estos dos recursos para aprender C ++: Aprenda C ++ y CodesDope. También puede consultar el libro Balaguruswamy Object Oriented Programming With C ++
  2. Pase al siguiente tema solo después de haber practicado el número suficiente de preguntas del tema anterior
  3. Practique muchos problemas hasta que se sienta lo suficientemente seguro como para resolver cualquier problema
  4. Aprender algoritmos
  5. Resuelve preguntas en Project Euler y Geeks para Geeks
  6. Comenzar a tomar proyectos en C ++
  7. No es necesario que te quedes mucho tiempo programando, pero no seas perezoso en el tiempo que dediques.
  8. Siempre pregunta dudas.

Buena suerte.

Ya que estás familiarizado con C ++, puedes hacer 3 cosas para ser un mejor programador

  1. Práctica
  2. Práctica
  3. ¡¡¡¡Más práctica!!!!

Es tan simple como eso.

En el campo de Programación, lógicamente puede pensar y generar soluciones, pero la implementación práctica es la peor parte. Es por eso que la mayoría de las compañías de MNC le dan mayor importancia al servicio de soporte y mantenimiento. Debido a que los programas que se desarrollan tendrán errores y no serán adecuadamente adecuados para el futuro.

Entonces, para convertirse en un mejor programador, intente implementar muchos programas.

Comience con loops básicos y sentencias condicionales. Luego, busque y ordene. Después de esto, intente combinarlos para problemas más difíciles.

En la segunda etapa, vaya a estructuras de datos y algoritmos de particular interés.

En la siguiente etapa, desarrolle administración de negocios o aplicaciones independientes con un back-end de base de datos.

En la etapa final, elija juegos y aplicaciones de algoritmos complejos en aplicaciones de la vida real, como algoritmos de planificación de tareas o soluciones a métodos simplex.

En cada etapa que esté completando, definitivamente obtendrá una gran experiencia de fondo y una gran experiencia.

La mejor de las suertes !!!!!

C ++ tiene una curva de aprendizaje muy pronunciada. Imagínate a ti mismo como un aprendiz decidido a convertirte en un ninja, o mejor, en un padawan para convertirte en un Jedi. Como las formas de la fuerza son muchas y difíciles de comprender, también lo es C ++, su sintaxis, sus bibliotecas y su entorno.

La única forma de aprender C ++ a partir de 2018 es hacer ejercicio. Ejercicio mucho, con muchas bibliotecas, compiladores y construcciones de sintaxis. Realiza pruebas de conceptos para los principios que aprendes.

Si bien el aprendizaje pasivo (leer un libro, mirar un video) es bueno para explorar nuevos conceptos (o para aprobar mi examen), pronto olvidará lo que leyó / vio, y el tiempo que invirtió sería en vano.

Comprender el lenguaje básico es bastante fácil, pero no te lances a las lambdas tan rápido. Centrarse en las bibliotecas, entender STL, comprender las estructuras de datos. Luego muévase a otras bibliotecas, como boost, Qt o wxWidgets. Aprenda a usar cualquier biblioteca que pueda encontrar.

Ser competente con uno o más IDEs. Las personas que programan en vi pueden parecer piratas informáticos, pero los errores más desagradables que he experimentado fueron creados por personas bien informadas de C ++, que creían obstinadamente que usar un IDE no es para ellos. Aprenda a depurar su código y comience a desarrollar un sexto sentido de identificación de errores en su código basado en errores y advertencias del compilador.

Aprende a gestionar tus proyectos. Comprender qué incluye y libs, cómo usarlos. Entender lo que están haciendo los otros ajustes del compilador.

Aprenda el arte de la prueba unitaria, la generación de perfiles para el rendimiento y la depuración de errores de memoria o fugas de memoria.

Obviamente, hay muchas áreas en las que puedes mirar, las bibliotecas STL y Boost vienen a la mente, pero como un ex desarrollador de Java necesitas corregir los conceptos básicos que son diferentes primero.

El principal de estos es el tiempo de vida de los objetos, en Java tiene un GC y finalizadores y todo eso, con C ++, ha definido explícitamente los ámbitos y los lugares deterministas en los que su objeto desaparecerá (automáticamente) cuando deje el ámbito. Por lo general, creas un objeto en la pila en lugar del montón en C ++, y dejas que el compilador decida cuándo liberarlo. No piense que tiene que crear todos los objetos en el montón y dejar que el GC decida cuándo ya no se usan. Si necesita un objeto de mayor duración, o uno grande que se ajuste a vivir en el montón, use una clase de puntero inteligente para administrarlo. Es posible que desee verificar las últimas especificaciones con sus características como lambdas y especialmente la sintaxis del operador de movimiento. Google para RAII y asegúrate de aprender los ámbitos de C ++, es trivialmente fácil, pero como muchas cosas que son fáciles, necesitas tomar un poco de tiempo para comprenderlas.

En fin, practica ! y probablemente más práctica. Si quiero hablar en detalle, hay algunas cosas que me gustaría señalar. Estaba más o menos en la misma situación, teniendo algo de experiencia en java y conociendo c ++ en la superficie.

Para dominar c ++, ni los libros ni las videoconferencias fueron de mucha ayuda. No me malinterpretes, los libros están bien, pero en mi caso, solo fue cuestión de verificar la sintaxis o conocer el concepto en detalle. Lo que realmente me ayudó, fue desarrollar un par de proyectos muy serios con c ++ y al hacer eso, dominé algunos de los conceptos más importantes. Así que de nuevo, practica, haces proyectos y mientras tanto sabes lo que estás haciendo. Al “saber lo que está haciendo” me refiero a que debe saber qué está haciendo exactamente su código (por ejemplo, cuál es la diferencia entre pasar por referencia y pasar por puntero y etc.). Además, debes aprender algunos detalles como el compilador y el enlazador, cuáles son las macros y más. El punto es que Java es un lenguaje muy bueno cuando se desarrolla (opinión personal); es fácil y rápido de desarrollar y realmente no necesita preocuparse por muchos aspectos de la programación. C ++ por otro lado no es tan fácil. Si desea dominar realmente el idioma, debe conocer los detalles del compilador, el vinculador, las macros, los depuradores, etc.

Entonces, ¿tienes algún amigo que sea realmente bueno? ¿Un compañero de oficina o compañero de trabajo? ¡Primer consejo, rodéate de gente brillante!

Ahora, ¿qué tal un proyecto que puedes hacer? ¿Qué tal algo que estira lo que sabes hacer? ¿Tal vez algo que estire lo que piensas que el lenguaje puede hacer semánticamente? Si no puede pensar en nada, tome un libro de algoritmos y listo, material de proyecto instantáneo.

Así que cuando empecé la escuela de posgrado, me encantaron C, Java y Perl … esos eran mis idiomas de goto. Tenía un interés pasajero en los demás, pero esos eran mis cálidos y cómodos idiomas. Aquí está lo bueno, que me di cuenta … si estás en una escuela de posgrado o en una licenciatura, tienes tiempo para aprender. Así que elige un proyecto en GitHub, o construye algo tú mismo. Cuando te quedas atascado, pregúntale a esa persona brillante que conoce C ++ que puede ayudarte o desafiarte mirándote como a un idiota.

No se atasque en hacer un código demasiado sofisticado al principio, tómese su tiempo … comprenda lo que está pasando entonces (y solo entonces) comience a explorar formas más avanzadas de implementar cosas en C ++. Lo mismo ocurre con las bibliotecas estándar, utilícelas tanto como sea posible. Yo diría que aprende Boost también, pero me cuesta mucho recomendarlo, ya que bien … a menudo falta la documentación … pero las búsquedas web a menudo resuelven esto.

¡Buena suerte!

1. Aprender sobre la historia de C ++. La mejor manera de comenzar a programar un lenguaje es aprender sus raíces. Aunque no entiendas todo lo que lees, algunas de estas páginas te mostrarán los términos importantes que aparecerán más adelante (como “Programación orientada a objetos”).

2. Instale un compilador de C ++ (y posible IDE). Se requiere un compilador para la programación en C ++, porque el código fuente real debe compilarse en un archivo que su computadora pueda ejecutar. Si está usando Windows, una buena opción sería Visual C ++ 2010 Express, o si usa Linux, una buena es Geany. Ambos vienen con un IDE (entorno de desarrollo independiente) integrado, que puede facilitar el proceso de escritura del código fuente. (NOTA: Muchas personas en línea le recomendarán que utilice el IDE y el compilador de Bloodshed Dev-C ++. NO HAYA. No se ha actualizado en 5 años y tiene páginas y páginas de errores conocidos, enumerados aquí:
Aprenda a usar su IDE de manera eficiente. Algunos IDE que están por ahí tienen sus propias peculiaridades individuales que podrían interponerse en el camino, por lo que sería beneficioso leer o mantener una referencia para las diferentes opciones y configuraciones de su IDE.


3. Elija un tutorial o dos para comenzar a aprender C ++. Este paso es, junto con el compilador, uno de los pasos más importantes de todos. Hay algunas cosas de las que debe asegurarse durante este paso. En primer lugar, asegúrese de que la guía esté escrita para principiantes completos para la programación, ya que son las más detalladas en sus descripciones. A continuación, asegúrese de que el código en el tutorial siga el estándar C ++ 03 o incluso el nuevo C ++ 11 (aún no está estandarizado, así que tenga cuidado con los problemas del compilador), porque los compiladores modernos tendrán problemas para compilar el código obsoleto, o simplemente rechazarlo por completo. Algunos buenos son c Teach Together, el tutorial de C ++ de Learn Together y el tutorial en C ++ Language – C ++ Tutorials.

4. Probar cada nuevo concepto. Una parte importante de la programación es no solo leer sobre los diferentes conceptos, sino también usarlos en su propio código. Copiar y pegar el código en su IDE solo irá tan lejos. Es mucho más beneficioso escribir cada ejemplo e incluso intentar crear sus propias ideas de programa que utilizan el concepto que se enseña para maximizar la cantidad de información retenida.

5.Aprender de otros desarrolladores. Una de las mejores cosas de la programación es que no importa el nivel de habilidad que tenga en la programación, siempre habrá un código fuente disponible que se encuentre en el mismo nivel o un paso por encima de usted. Una buena manera de aprender de un código fuente más complicado es leer hasta que llegue a un punto que no entiende, y luego tratar de resolverlo en su cabeza; Si no conoce una cierta parte del código, léalo en su tutorial o en el material de referencia hasta que lo sepa.

6. Trabaja en los problemas usando los conceptos que has aprendido. La mejor manera absoluta de retener lo que aprendes no es simplemente escribir ejemplos de código fuente, sino que en realidad lograr una tarea determinada con ellos. Tanto c Teach Together, Learn Together como Project Euler tienen buenos problemas que podrías intentar resolver para aplicar conceptos en situaciones de la vida real. Si absolutamente no puede crear un algoritmo para un problema, entonces, como último recurso, busque en línea otro hecho por alguien más y aprenda de él. ¿De qué sirve resolver un problema si no aprendes del resultado?

7.Ayuda a otros que necesitan ayuda. Ahora que ha aprendido acerca de C ++, ¡debe comenzar a ayudar a otros novatos en línea con sus problemas y comenzarlos en el mismo viaje que tuvo! No se frustre si la persona que le pidió ayuda no quiere escuchar sus consejos: alguien más podría aprender de la respuesta que proporcione, incluso si el póster original no lo hizo.

Como mencionó Fawad Raza a continuación, la verdadera belleza (y complejidad) de C ++ es que está orientada a objetos y al mismo tiempo es un nivel muy bajo. Por lo tanto, para comprender C ++, es importante comprender el modelo de programación orientado a objetos. El lenguaje no te obliga a escribir un programa orientado a objetos, por lo que algunas personas terminan escribiendo un programa de estilo C usando la sintaxis de C ++.

El algoritmo es una parte clave de la programación, sin embargo, desde el punto de vista orientado a objetos el comportamiento (“Qué”) importa más que los medios (“Cómo”). Por ejemplo, una clase de programador de hilos puede proporcionar el método schedule (), pero para el usuario no importa si utiliza round-robin, FIFO o alguna otra estrategia de programación, siempre que el hilo no se muera de hambre. Así que centrarse en diseñar una interfaz limpia ayudará a escribir un mejor programa de C ++. Que el mundo sepa solo lo que realmente debe saber 🙂

La encapsulación es otra característica clave. Oculta todo lo que el usuario de la clase no necesita saber. Da la flexibilidad de cambiar el interior sin afectar el comportamiento.

No utilice la herencia para reutilizar el código. Este suele ser uno de los errores más costosos. Uno de los criterios de decisión clave es: “es una” prueba. Cualquiera de las dos clases que no cumplan con este requisito generalmente no deberían tener una relación de herencia, aunque se vean iguales.

C++ in object oriented programming concepts it provide you with various functionality of oops.

It helps if you have something visual to see results. You could use OpenCV to manipulate images and videos. Edge detection? Background subtraction? OpenCV has some functions to display your work in a window, and even interact with it a little.

You can write some GUI apps with Qt.

You could write some sort of simulator with a web frontend. The C++ code runs the simulation, and also answers HTTP queries for HTML code and AJAX to get the latest results.

I recommend you to start learning more about the above topic from Hackr.io – Find & share the best online programming courses & tutorials it provide you with various tutorial to grasp more concept in depth easily.4

gracias

Check this – FAQ : Standard C++

Learning c++ is easy if you understand how something works & represented in memory. so, take some time & while learning first draw memory representation of anything & how it works. after learning you can practice c++ code (highly recommended) on any IDE (i suggest codeblocks).

Practice problems on – HackerRank, Codeforces, A2 Online Judge

Since, you are coming from other language, i suggest you to learn pointers, dynamic memory allocations, structures, STL & new c++11/14 features.

To start from Basic, learn – string, pointers, structures, dynamic allocations, classes & objects etc.

Youtube – C++ Programming Tutorials Playlist
Books –
1. c++ primer plus – stephen prata
2. diving into c++ – alex allain
3. c++ primer – stanley B. Lippman

To learn STL or advanced c++

coursera – Coursera
mycodeschool – mycodeschool (good for learning pointers also)
youtube – Bo Qian
Books – The c++ STL – Nicolai M Jossutis.

To Learn data structures & algorithms –
1. Page on geeksforgeeks.org
2. Data Structures & Algorithms -IIT Kharagpur
3. Computer Sc – Data Structures and Algorithms (used java code)
4. CS2: Data Structures and Algorithms – Richard Buckland

I taught myself C++ 20 years ago. Here is how I did it:

1. I put all my C code through a C++ compiler, and revised it so that it would compile ok, by pre-declaring all functions, using the C++ style of function headers, and using ‘class …’ where I might have used ‘typedef struct …’.

2. I took some simple code modules and converted their contents to classes with static functions. Then, because some of them I had never wanted to operate as singletons, I converted them to use member functions instead, so I could instantiate them as often as I wanted. As time went by I converted more and more.

3. I realised some of my classes could be revised to use virtual functions, inheritance, and polymorphism. But I did this gradually, treating the most obvious cases first. I learned as I went, about the advantages of private and protected members, pure abstract functions, and so on.

What I found eventually was that the overall quantity of my code reduced significantly, the structure of my code became far less ad-hoc, and I began to think in a different way, the OO (object-oriented) way, which stood me in good stead for understanding a number of other OO languages such as Python and Java which were developing and becoming important.

The use of C++ requires a lot of discipline. (The compiler forces discipline on you, when you make function calls, which helps trap more errors at compile time.) There’s an old saying that you can write Fortran in any language. But if you are wise, you don’t.

There are things you can do in C++ that would be very hard to do in C because C is not an OO language and attempts to use it that way are like tying one hand behind your back and beg the use of C++.

C++ will stretch your mind in a good way. You will also encounter some prejudice against it, none of it justified.

Por cierto:

I am assuming you are already familiar with C and understand its relationship to the bare metal ie how stuff looks in memory and especially on the stack. If not, you must learn that first.

(Being able to recognise machine code generated by the compiler from your source code is another useful skill but I would say you could get away without knowing much about that.)

¿Libros? It’s all on the web. But read Stroustrup to understand the philosophy behind it. It will illuminate your thinking. He writes well.

Well, the answer really depends on what you already know of programming.

I’m assuming you know nothing about programming, and want to start writing C++ programs. In that case, you should FIRST consider establishing a development environment. This means clearly you need to get a C++ compiler, ie a separate program that converts your C++ code to a separate runnable application. Now here too, there is a divergence based on your current platform. This may be either Windows, MAC, or Linux.

On Windows, you could use Visual Studio Express. This is free to use, here’s a link: Visual Studio Express

Once you have this installed, you are ready to go. However, you still have some learning to do. You should read some of the excellent tutorials. Here’s one: C++ Language – C++ Tutorials

And then just take it from there, one step at a time… Happy coding!

And keep looking up!

Have you thought about letting other people see your code ? I did programming by myself for a long time but didn’t improve much. I am happy to say that after letting other people see my code and getting it reviewed I am getting better at programming. Try placing your working code at Code Review Stack Exchange and ask for peer reviews. It is free and the people there give a lot of good advice on improving your code. No te desanimes. See my code at Review implementation of stack by using array in C and compare the first version to the last. I would say that I have improved a lot in this single code review. It takes some time and patience but this actually works.

Read a good book like Introduction to algorithms by Cormen or Data structures in C and C++ by Tenenbaum. Implement every program/algorithm in it. If you are having specific problems in writing the program then ask on Stack Overflow.

Also have a look at Learn to Program. This is a list of internet resources that I have found useful.

A professor of MIT said “Keep programming every day for 2 years and you’ll be a great programmer. Keep programming every day for 2 years and then take an algorithms course and you’ll become a world class programmer”. I’ll rephrase it as “Keep writing code for 2 years while using Stack Overflow and Code Review Stack Exchange and you’ll become a world class programmer.”

Keep on writing code, get them reviewed and you’ll get better. Seguro.

PD:
I am not from MIT. I not a world class programmer yet but definitely progressing every day.

I’ve answered this way for a few programming questions so far but I think it still holds true: Pick a problem that you’ll find interesting and try to solve it with [your language here].

For instance, create your own string class, trying to use templates, abstract classes, polymorphism and inheritance (in sensible ways) in your design. Don’t take shortcuts. Build it like you intend this code to go into production. Build a set of unit tests for your class and debug all those scenarios.

You’ll now have a basic but practical understanding of how all these language features hang together and their implications when it comes to debugging, etc. and you can move on to a more complex project where you can start to think about design patterns, program structure, etc.