Hoy visité un día de puertas abiertas del departamento de informática de la universidad y en el recorrido de los laboratorios nos sentamos a jugar con un par de proyectos de último año de estudiantes de pregrado. Uno era particularmente bueno: una especie de juego de asteroides FPS. Decidí echar un vistazo en el src
directorio para encontrar que estaba hecho en C ++ (la mayoría de los otros proyectos eran aplicaciones Java 3D).
No he hecho nada de C antes, pero he revisado algunos códigos de C. Por lo que vi en el código .cpp de este juego, no se veía muy diferente.
Estoy interesado en aprender C o C ++, pero probablemente aprenderé el otro más adelante. ¿Hay alguna ventaja para mí aprender uno antes que el otro y, de ser así, cuál?
Respuestas:
No es necesario aprender C antes de aprender C ++.
Son idiomas diferentes . Es un error común pensar que C ++ depende de alguna manera de C y no de un lenguaje completamente especificado por sí solo.
El hecho de que C ++ comparta gran parte de la misma sintaxis y mucha de la misma semántica no significa que primero deba aprender C.
Si aprende C ++, eventualmente aprenderá la mayor parte de C con algunas diferencias entre los lenguajes que aprenderá con el tiempo. De hecho, es muy difícil escribir C ++ adecuado porque los programadores de C ++ intermedios tienden a escribir C / C ++. Eso es cierto tanto si empezó con C como si no.
Si conoce C primero, entonces es una buena ventaja aprender C ++. Comenzará por conocer una parte del idioma. Si no conoce C primero, entonces no tiene sentido enfocarse en un idioma diferente. Hay muchos buenos libros y tutoriales disponibles que comienzan sin saber nada y cubrirán todo lo que aprendería de C que también se aplica a C ++.
Consulte el razonamiento adicional en esta respuesta .
fuente
Me encanta esta pregunta, es como preguntar "¿qué debo aprender primero, a hacer snowboard o esquiar"? Creo que depende de si quieres hacer snowboard o esquiar. Si quieres hacer ambas cosas, tienes que aprender ambas.
En ambos deportes, te deslizas por una colina sobre la nieve utilizando dispositivos que son lo suficientemente similares como para provocar esta pregunta. Sin embargo, también son lo suficientemente diferentes como para que aprender uno no te ayude mucho con el otro. Lo mismo ocurre con C y C ++. Si bien parecen ser lenguajes lo suficientemente similares en sintaxis, la mentalidad que necesita para escribir código OO frente a código de procedimiento es lo suficientemente diferente como para que tenga que comenzar desde el principio, independientemente del idioma que aprenda en segundo lugar.
fuente
Primero aprendí C, y tomé un curso en estructuras de datos que usaban C, antes de aprender C ++. Esto ha funcionado bien para mí. Un curso de estructuras de datos en C me dio una sólida comprensión de los punteros y la gestión de la memoria. También hizo obvios los beneficios del paradigma orientado a objetos, una vez que aprendí lo que era.
Por otro lado, al aprender C primero, he desarrollado algunos hábitos que inicialmente me hicieron escribir código C ++ incorrecto, como el uso excesivo de punteros (cuando las referencias de C ++ bastarían) y el preprocesador.
C ++ es realmente un lenguaje muy complejo con muchas características. Sin embargo, no es realmente un superconjunto de C. Más bien, hay un subconjunto de C ++ que consta de las construcciones básicas de programación de procedimientos (bucles, ifs y funciones), que es muy similar a C.En su caso, comenzaría con eso y luego avanzaría hasta conceptos más avanzados. como clases y plantillas.
Lo más importante, en mi humilde opinión, es estar expuesto a diferentes paradigmas de programación, como procedimental, orientado a objetos, funcional y lógico, desde el principio, antes de que su cerebro se congele en una forma de ver el mundo. Por cierto, también te recomiendo que aprendas un lenguaje de programación funcional, como Scheme. Realmente expandiría sus horizontes.
fuente
Si decide aprender ambos (y como han mencionado otras personas, no hay una necesidad explícita de aprender ambos), aprenda C primero. Pasar de C a C ++ se siente como una progresión natural; ir en sentido contrario se siente como atarse deliberadamente una mano a la espalda. :-)
fuente
Creo que deberías aprender C primero, porque yo aprendí C primero. C me dio una buena comprensión de la sintaxis y errores con cosas como punteros, todos los cuales fluyen hacia C ++.
Creo que C ++ facilita el cierre de todas esas trampas (¿necesita una matriz que no se desborde cuando usa el operador [] y un índice poco fiable? Claro, haga una clase de matriz que verifique los límites) pero necesita saber qué lo son y te muerden antes de que entiendas por qué se hacen las cosas de cierta manera.
Cuando todo está dicho y hecho, la forma en que generalmente se enseña C ++ es "C ++ es C con objetos, aquí está el material de C y así es como funciona todo esto de OO", por lo que es probable que aprenda C básico antes que cualquier C ++ real si siga la mayoría de los textos de todos modos.
fuente
No estoy de acuerdo con la mayoría aquí. Creo que debería aprender C antes de aprender C ++. Definitivamente no es necesario, pero creo que facilita mucho el aprendizaje de C ++. C está en el corazón de C ++. Todo lo que aprenda sobre C es aplicable a C ++, pero C es mucho más pequeño y más fácil de aprender.
Recoge K&R y léelo. Es breve y le dará un sentido suficiente del idioma. Una vez que tenga los conceptos básicos de punteros y llamadas a funciones, puede pasar a C ++ un poco más fácilmente.
fuente
static
plantillas (y los errores de plantilla ridículamente intimidantes que emiten los compiladores), etc.En el proceso de aprendizaje de C ++, también aprenderá la mayor parte de C. Pero tenga en cuenta que gran parte del código C ++ no es válido C. C ++ fue diseñado para ser compatible con el código C, así que diría que primero aprenda C ++. Brian escribió una gran respuesta al respecto.
fuente
Como las respuestas a muchas otras preguntas de la vida, depende. Depende de cuáles sean sus intereses y objetivos de programación. Si desea programar aplicaciones de escritorio, tal vez con una GUI, entonces C ++ (y OOP) es probablemente una mejor manera de hacerlo. Si está interesado en la programación de hardware en algo que no sea un chipset x86, entonces C suele ser una mejor opción, generalmente por su velocidad. Si desea crear un nuevo reproductor multimedia o escribir una aplicación comercial, elegiría C ++. Si desea realizar simulaciones científicas de colisiones de galaxias o dinámica de fluidos, contemple el poder de C.
fuente
restrict
especificador C no tiene otra construcción sintáctica / semántica relacionada con el rendimiento que C ++, ¿por qué exactamente crees que el código C ++, con su sintaxis más rica y, por ejemplo, metaprogramación, debería producir un código más lento? ¿Conoces siquiera las plantillas de expresión?restrict
, que sin embargo todos los principales compiladores de C ++ se proporcionan como una extensión). ¿Y realmente cree que, dado el mismo código, habrá alguna diferencia en el rendimiento entre C ++ y C, dado el mismo compilador? [...]Aprender C lo obliga a pensar más en algunos problemas, como la administración de memoria explícita e implícita o los tamaños de almacenamiento de los tipos de datos básicos en el momento de escribir su código.
Una vez que haya llegado a un punto en el que se sienta cómodo con las características y errores de C , probablemente tendrá menos problemas para aprender y escribir en C ++.
Es muy posible que el código C ++ que ha visto no se vea muy diferente del C estándar, pero eso puede deberse a que no estaba orientado a objetos y no usaba excepciones, orientación a objetos, plantillas u otras características avanzadas.
fuente
Creo que aprender primero C es una buena idea.
Hay una razón por la que los cursos de ciencias de la competencia todavía usan C.
En mi opinión, es para evitar todo el "hacinamiento" del tema que conlleva la obligación de requerir OOP.
Creo que la programación procedimental es la forma más natural de aprender primero a programar. Creo que eso es cierto porque al final del día es lo que tienes: líneas de código ejecutándose una tras otra.
Muchos textos de hoy están impulsando un enfoque de "los objetos primero" y comienzan a hablar sobre automóviles y cambios de marcha antes de introducir matrices.
fuente
No.
En general, es más útil aprender C ++ porque está más cerca de los lenguajes basados en OO más modernos, como Eiffel o C #.
Si su objetivo es aprender C ++, aprenda C ++ estándar y moderno en primer lugar. Deja los mallocs a un lado.
Pero Steve Rowe tiene razón ...
fuente
Habiendo observado a las personas, que han aprendido Java primero, que luchan con los conceptos de punteros y gestión de la memoria en C ++, diría que aprender C primero es una buena idea, para comprender estos dos conceptos, aislados de las complejidades de otros C ++ caracteristicas.
fuente
Mis dos centavos:
Sugiero aprender C primero, porque:
fuente
Creo que c es un lenguaje de programación realmente agradable, es compacto y algo fácil de aprender. pero si solo quiere aprender c ++ comience con c ++. pero te sugiero que aprendas ambos. y si quieres hacer eso; creo que es mejor empezar con c. como se dijo antes: es pequeño y algo fácil de aprender. podría ser un buen paso hacia un lenguaje de programación más complejo como c ++. (ya que c le proporciona algunos conceptos básicos)
buena suerte.
fuente