Pregunta C ++ como primer idioma [cerrado]


He estado aprendiendo C ++ por aproximadamente 4 meses. Lo estoy disfrutando, y creo que lo estoy haciendo bastante bien. Sin embargo, una respuesta a una pregunta mía me hizo pensar que podría estar preparándome para una caída.

Entonces, ¿qué piensa la gente de C ++ como primer idioma para aprender? ¿Y vale la pena continuar ahora que he tenido un buen comienzo?


31


origen


Respuestas:


No entiendo por qué las personas todavía confunden "lenguaje" con "biblioteca". (Refiriéndose a la respuesta vinculada). Entonces, ¿qué pasa si C ++ no tiene un concepto de audio "nativo"? Hay muchas bibliotecas disponibles, que puede usar fácilmente con C ++, y que probablemente se adapten mejor a sus necesidades específicas que cualquier API de procesamiento de audio de "biblioteca estándar" "catch-all".

</ rant>

C ++ es un lenguaje difícil. Hay otros que son más fáciles de aprender. Yo nunca discutiría sobre eso.

Pero C ++ es fácilmente uno de los más poderoso idiomas alrededor. Puede ser altamente eficiente y altamente elegante En seguida. Por supuesto, nada te impide hacer un gran lío de todo, tampoco.

Si recomiendo C ++ como primer lenguaje de programación? En realidad, no sé nada mejor. Otros pueden protegerlo de cometer errores y hacer que el éxito inicial (por ejemplo, su primera aplicación GUI) sea más fácil. Pero si construyes sobre una base de C ++, siempre estarás seguro. Es posible que nunca tenga que elegir otro idioma, en realidad. Pero si quiere / tiene que hacerlo, lo encontrará ridículamente fácil.

Un codificador C ++ experimentado puede hacer, p. Java a toda velocidad en cuestión de semanas. Al revés? Mucho, mucho más difícil.


Muchos años después, sentí que debería enmendar esta respuesta. Como mis hijos me pidieron que les enseñara programación, comencé a hacerlo. Me encontré realmente no comenzando con C ++ ... porque los mostré BF primero. En absolutamente nada de tiempo, entendieron sobre la memoria y los indicadores. Luego continué con C ++, y nos estamos divirtiendo inmensamente hasta el momento.


Sin embargo, algunos años más tarde, y sentí que realmente debería agregar esta excelente conferencia de Kate Gregory de CppCon 2015 a esta respuesta:

Deja de enseñar C.


72



Déjame ponerlo de esta manera:

Tomé y pasé con un 94%, la Certificación Sun Java sin haber compilado una línea de Java (Eso fue hace nueve años). Pude hacer esto, porque conocía C ++ muy bien.

En mi primer trabajo profesional, fui contratado como probador. En mi segundo día, me dijeron que podía programar en lugar de hacer una prueba, si aprendía suficiente PowerBuilder para ser útil, en dos semanas. Como conocía tan bien C ++, PowerBuilder fue fácil.

C ++ es difícil, pero si lo aprendes bien, lee Stroustrup's El lenguaje de programación C ++, haz los ejercicios también, lee su Diseño y evolución de C ++, lea los libros C ++ Faq y Meyers y los libros de Herb Sutter, lea comp.lang.c ++. moderado, lea Coplien's Estilos y modismos avanzados de programación de C ++ no importa en qué idioma OO quieras codificar; si lo aprendes bien, cualquier otro lenguaje OO es fácil.

Aprender C ++ es una excelente preparación para aprender a codificar. (Y también te convertirás en un programador de C justo, pero lee K & R para llegar a ser un buen programador de C).

Oh. Y C ++ es realmente divertido de programar, mucho menos detallado que Java, y mucho más flexible. Usted está realmente a cargo, no el IDE o el idioma. Puedes disparar tu propio pie, pero estarás a cargo de hacerlo. Y lea el libro de Alexandrescu una vez que sepa plantillas, te sorprenderá y te asombrará.

C ++ es divertido. Lea el "Patrón de plantilla curiosamente recurrente": se ve así

template< class  T> struct base {};

struct derived: base< derived > {};

Sí, tienes razón: es una clase que se deriva de una base que está modelada en la clase derivada. Ahora eso suena obscuro y tonto, pero hay muchos buenos usos para él, y el otro día me estaba golpeando la cabeza porque no puedes hacer esto en Java (porque Java usa borrado de tipo, no plantillas, para genéricos), pero si pudiera usarlo, podría haber ahorrado muchos y muchos códigos repetidos en muchas clases.

Hay mucho más en C ++, y si se limita a Java o .Net, nunca lo descubrirá.


37



C ++ no es un lenguaje fácil de aprender, como anotaron todos los demás, pero hay algunas razones por las que es un buen lugar para comenzar:

  • no lo vincula con un paradigma de programación específico (por ejemplo, Java y OOP), por lo que puede experimentar fácilmente con diferentes técnicas
  • C ++ no tiene las características para que pueda concentrarse en hacer los bloques de construcción si desea saber cómo están construidos
  • dado que es un lenguaje y no una plataforma, puede elegir la biblioteca o las bibliotecas que mejor se adapten a la tarea o al estilo de programación elegido (por ejemplo, elegir algo así como Poco para una sensación Javaesque, AS para el arenoso estilo temprano OO, etc.)
  • es un lenguaje de programación de propósito general, no una plataforma (Tenía que decir eso dos veces)

El truco es aprender con cuidado y correctamente la primera vez. Sé que, como muchos otros, he luchado con eso aprendiéndolo como "objetos C +" antes de realmente entenderlo. Es un lenguaje difícil de aprender. Recomendaría buscar un mentor con experiencia en C ++ para que se adjunte y también leer muchos de los libros "altamente recomendados" sobre cómo y cómo no escribir C ++. Evita aprender malos hábitos por adelantado.

Para una lista de lectura inicial sin ningún orden en particular:

  • "C ++ acelerado" por Koenig y Moo
  • "C ++ / STL efectivo" por Scott Meyers
  • "Construcción de software orientado a objetos" por Bertrand Meyer
  • "Programación Expert C" por Peter van der Linden
  • "Tutorial y guía de referencia de STL" por Musser, Derge y Saini
  • "La biblioteca estándar de C ++" por Josuttis

14



C ++ será (¿mucho?) Más accesible si aprende "C ++ moderno" en lugar de "C más algunas cosas nuevas". Por ejemplo, use std::string, std::vector<>y unique_ptr<> / shared_ptr<> en su lugar, cadenas, arrays y punteros de estilo C

El ya mencionado C ++ acelerado por Koenig y Moo es un libro que hace exactamente esto.


11



Mucho apoyo para c ++ aquí, pero tengo que estar en desacuerdo. Cada idioma tiene sus ventajas y desventajas (algunos logran un mejor equilibrio que otros, por supuesto).

Dicho esto, para un primer idioma, estoy convencido de que la mayoría de la gente aprenderá cómo programar de manera más efectiva con un lenguaje que a) no tiene un ciclo de edición y compilación (que es inherentemente más lento para usted que el programador b) tiene recolección de basura c) tiene una buena introspección de tiempo de ejecución. Lo mejor es si también hay un evaluador interactivo con quien meterse.

El desarrollo (si no es el tiempo de ejecución) es casi invariablemente más rápido en tales idiomas, hay menos cosas que te hagan tropezar, y hay mejores herramientas para ayudar a calcular qué salió mal cuando lo hizo.

Lo que no quiere decir que aprender los caprichos de la administración de la memoria en un lenguaje como c ++ no sea algo que valga la pena hacer, etc., etc., simplemente no es el lugar donde realmente quieres comenzar.

Otro problema con c ++ es que, a pesar de su practicidad, su gran tamaño se suma al hecho de que tiene partes incompatibles que pueden conducir a problemas sutiles que se evitan mejor como principiantes.

editado: John D saca el punto en un comentario que algunas personas que aprenden primero en un lenguaje GC (que de ninguna manera se limita a los "lenguajes de scripting") nunca aprenden punteros más tarde. Sin embargo, esto es una amenaza. Algunas personas no pueden aprender todo tipo de cosas, por todo tipo de razones. Sigo pensando que preocuparte por los punteros es una distracción cuando estás aprendiendo lo básico. En algún momento puede que necesite aprender sobre la administración manual de la memoria, pero no es fundamentalmente importante hacerlo al principio. O más exactamente, las ganancias obtenidas al evitar esto son más importantes que los costos.

Sin embargo, quiero dejar en claro que no estoy diciendo que c ++ sea una opción inferior para un primer idioma porque carece de recolección de basura. Ese es solo uno de los muchos problemas que dificultan el aprendizaje de los fundamentos de la programación. El verdadero problema es que se trata de un lenguaje complejo y complicado, con extravagancias por todas partes e incluso inconsistencias internas (por ejemplo, las indicaciones y las excepciones no funcionan bien juntas). Por supuesto, todo esto se puede gestionar adecuadamente y puede aprender buenas prácticas para evitar meterse en problemas.

Sin embargo, nada de esto tendrá mucho sentido para un verdadero neófito al principio. Entonces, aprenderlo terminará siendo "hazlo de esta manera, no de esa manera". "¿por qué?" "porque ya lo dije --- todavía no entenderás los detalles". Apenas un comienzo auspicioso.

Los mayores beneficios para aprender un primer idioma, aunque probablemente eviten un ciclo de edición y compilación (de cualquier tipo) y tengan una buena introspección.


10



C ++ como primer idioma puede estar bien si tienes un buen profesor. Pero es un muro muy alto para escalar por primera vez, pero una vez que escala ese muro, otros idiomas similares son muy fáciles.

Entonces sí, continúa.


5



cualquier idioma es un buen primer idioma (dentro de lo razonable, no es algo así como lolcode)

Una vez que conozca cómo funciona, será más fácil extenderse a otros idiomas.


5



Creo que C ++ podría no ser el lenguaje más fácil de usar para un primer contador de tiempo, pero tampoco va a sostener tu mano y necesariamente te llevará a muchos malos hábitos (no dije ninguno, simplemente no demasiados).

C ++ fue el lenguaje introductorio en el que se basaron los cursos de programación de mi universidad y allí aprendimos todos los conceptos básicos y las estructuras de datos y algoritmos antes de ramificarnos en los idiomas que elegimos.


4



Para mí, aprender C ++ se trata principalmente de aprender cómo NO dispararse en el pie. Puede ser un ejercicio doloroso, ya que con C ++ siempre hay otro filo que hará que el arma se dispare mientras apunta a tu casco.

La oportunidad es que, si logras terminar el ejercicio, serás un mejor desarrollador para él, y podrás detectar las oportunidades futuras de disparar a pie antes de que sucedan, en cualquier idioma que termines usando.

Además, cuando una tercera parte de la biblioteca se dispara en el pie, estarás mejor posicionado para asimilar lo que salió mal que otros que no se han disparado repetidamente durante meses.

Yo diría que se quede con C ++, no es una pérdida de tiempo, incluso si nunca escribe una sola línea de código C ++ de producción.

Espero que esto ayude :)

BW


4



Continua. C ++ sigue siendo ampliamente utilizado y EL lenguaje para cierto tipo de trabajo. Entonces, depende de lo que quiera hacer: la programación de sistemas se realiza en C ++ o C, las aplicaciones comerciales y web tienden a realizarse en otras cosas.

Recomiendo encarecidamente que explore otros idiomas también. Python es mi segundo idioma, por ejemplo; puede brindarle nuevos conocimientos sobre la programación funcional y orientada a objetos y hacer de usted un mejor programador de C ++ (y un mejor programador en general).

Creo que estar expuesto a tantos idiomas (y, lo que es más importante, a muchos paradigmas de programación diferentes) te hará un mejor programador en general. Eche un vistazo a Haskell, Prolog, Lisp y una variante Assembler, al menos.


3