¿Existe la posibilidad de que alguien que haya aprendido todos los aspectos clave de C ++ y conozca muy bien los fundamentos del lenguaje, aprenda otros lenguajes (como Python, Perl, Java) más rápido y más fácil?
¿Existe la posibilidad de que alguien que haya aprendido todos los aspectos clave de C ++ y conozca muy bien los fundamentos del lenguaje, aprenda otros lenguajes (como Python, Perl, Java) más rápido y más fácil?
Respuestas:
Es probable que el conocimiento profundo de cualquier lenguaje de programación lo ayude a aprender otros idiomas más rápido. Esto se debe en parte a que la programación es una forma de pensar más de lo que es aprender la sintaxis. La mayoría de las prácticas de programación serían ciertas para la mayoría de los otros lenguajes de programación. Es por eso que la gente dice que siempre aprendes el segundo lenguaje de programación más rápido que el primero.
C ++ es un lenguaje que permite un "control" mucho mayor que otros lenguajes. Esto puede ser bueno y malo. Por ejemplo, un arma real es mejor que una pistola de aire cuando vas al bosque (porque en realidad puedes derribar algo con él), pero también es más peligroso para ti y para quienes te rodean. C ++ tiene conceptos como la administración de memoria, de los que no debe preocuparse en la mayoría de los otros idiomas. Sin embargo, tener una comprensión firme de estos conceptos está lejos de ser inútil, incluso cuando se trabaja con lenguajes de administración automática de memoria. También puede realizar operaciones bit a bit e ir mucho más abajo al 'metal' con un lenguaje como C ++. Incluso una comprensión básica en esas áreas puede ayudarlo mucho como programador en cualquier idioma.
Personalmente, aprendí Java por primera vez durante casi 3 años antes de aprender C ++, y debo decir que me arrepiento (por supuesto ...). Esto hizo que aprender C ++ (todavía estoy aprendiendo, lejos del conocimiento 'profundo': D) no sea tan sencillo como me gustaría. Si lo hubiera hecho al revés, diría que hubiera sido mucho más fácil para mí. Especialmente cuando sabes POR QUÉ se hace algo de una manera específica, y no solo puedes estar seguro de la magia automática del lenguaje. Si se me permite dar una opinión, sugeriría: C (para paradigmas de programación básicos y universales) -> C ++ (para una comprensión básica de OOP junto con la gestión de memoria) -> Entonces puede ingresar a cualquier lenguaje OOP 'real' con un buena base o puede continuar con temas más avanzados en C ++, todo dependiendo de lo que '
OR
yAND
Lamentablemente no. Esto es realmente un gran problema cuando se enseña C ++ en clases de programación, especialmente en las clases de nivel principiante: puedes aprender los principios de programación, o puedes aprender el lenguaje C ++, pero el lenguaje C ++ tiene demasiados escollos y pequeñas estupideces para aprender ambos de manera efectiva. ¡El alcance de una clase de un semestre!
Hay muchas cosas que se probaron en C ++ y finalmente se volvieron idiomáticas en el lenguaje por pura inercia, que prácticamente todos los demás lenguajes desde entonces se han analizado y rechazado porque resultó ser un gran error. Las principales son las plantillas de C ++ y el modelo de objetos de C ++ (los objetos como tipos de valor nunca son algo bueno, porque rompe la sustitución de Liskov y la propia OOP).
Entonces, si primero obtienes un conocimiento profundo de C ++ y luego quieres aprender otros lenguajes de programación, habrá una gran cantidad de daños y contraproducentes que deberás desaprender para ser efectivo en otros lenguajes de programación.
No. Conocer bien C ++ facilitará el aprendizaje de otros lenguajes que son como C ++. Pero eso sería aburrido. ¿Por qué querrías saber dos idiomas que son iguales? Eso no te compra nada. (Tenga en cuenta que esto no es específico de C ++. Se aplica a cualquier idioma. Compare con los idiomas naturales: aprender italiano no facilitará el aprendizaje de otros idiomas. Le facilitará aprender español, francés o portugués, y aprender tres de ellos será más fácil aprender el cuarto, pero incluso aprender todos los idiomas romances no te ayudará un poco a aprender finés, chino, hindi, hebreo, árabe, pashtu, griego, etc.)
Los lenguajes de programación implementan paradigmas. Peter van Roy ha recopilado un póster de los 34 paradigmas principales de programación .
Los paradigmas, a su vez, están compuestos de conceptos. Ese cartel enumera unos 18 conceptos.
Todos los paradigmas (o al menos los del póster) están compuestos de esos conceptos. Todos los idiomas implementan uno o más paradigmas compuestos de esos conceptos. Entonces, si aprende esos conceptos, (en cierto sentido) aprenderá todos los lenguajes de programación a la vez.
Por supuesto, todavía hay muchas peculiaridades específicas del idioma (sintaxis entre ellas). Además, ese póster ignora por completo la escritura y, por supuesto, existe una diferencia significativa entre un sistema de tipo System F <: ω , un sistema de tipo Scala o un sistema de tipo dinámico de tipo pato, y mucho menos un sistema de tipo dependiente à la Idris, Agda, Coq, Guru o ATS.
Diría que conocer profundamente cualquier lenguaje de programación ayudará a aprender otros, al menos otros idiomas de la misma familia. Por ejemplo, el conocimiento de C ++ no ayudará mucho con LISP o Haskell, pero para lenguajes de procedimiento orientados a objetos, lo hará. Mi enfoque ha sido tratar de aprender bien un idioma de cada una de las diferentes familias (de procedimiento, funcional, orientado a objetos, etc.) de idiomas, luego ese conocimiento puede trasladarse a otros idiomas en esa familia. Por otro lado, un conocimiento profundo de APL no ayudará con nada más ...
Voy a tomar una interpretación diferente aquí.
C ++ es un buen lenguaje para aprender sobre la memoria y las estructuras de datos, ya que te obliga a pensar cuidadosamente sobre conceptos como la propiedad de objetos y la vida útil. Y aprender sobre la memoria y las estructuras de datos es una de las partes esenciales de cualquier plan de estudios de ingeniería de software.
Pero debes aprender sobre las estructuras de datos. Si simplemente "aprende C ++", realmente no ganará mucho y puede ralentizar el proceso de aprendizaje de otros idiomas a corto plazo.
Cuando estaba en la universidad, Data Structures era un curso obligatorio de primer año, tomado después de CS1 (que al menos la mitad de la clase había abandonado). Fue dificil. El formato del curso fue básicamente "Aquí hay una estructura de datos que nunca ha visto antes [por ejemplo, un montón de izquierda ]. Impleméntelo en C ++ en una semana y haga que su salida coincida exactamente con nuestra salida esperada, byte por byte, así que puede calificarlo automáticamente ". Luego, la próxima semana obtendría una nueva estructura de datos y una nueva asignación. Probablemente aprendí más en ese curso que en todos mis otros cursos combinados.
Ese es el tipo de aprendizaje que debes estar haciendo para que C ++ sea valioso.
Cada idioma que aprende hace que el siguiente sea más fácil de aprender, especialmente dentro del mismo paradigma. Se prestan mucho unos de otros, y después de un tiempo llega al punto en que un nuevo idioma parece simplemente una colección de características de otros idiomas, con algunos giros únicos.
No creo que C ++ sea mejor o peor que cualquier otro lenguaje en ese sentido. Es uno de los idiomas más detallados que conozco, y dificulta algunas cosas que son fáciles en la mayoría de los otros idiomas, pero eso no necesariamente se traduce en hacer que el próximo idioma sea más fácil de aprender . Sin embargo, generalmente hace que el siguiente idioma se sienta más fácil de usar . Hay una diferencia
No. Un conocimiento profundo de C , o del subconjunto de C ++ que es "básicamente C", ayudará al aprender otros lenguajes, al menos al imaginar lo que deben hacer sus implementaciones. Un conocimiento profundo de C ++ , por otro lado, será principalmente información que es confusa o irrelevante al aprender otros idiomas; si aprende la orientación de objetos de C ++ en más de un nivel de superficie, por ejemplo, cuando pasa a Perl / Python / Ruby pasará más tiempo sin aprender lo que sabe que usarlo, ya que los objetos en esos lenguajes se implementan en una forma completamente diferenteque en C ++. Lo mismo es cierto en mayor o menor medida para la mayoría de los otros lenguajes y para otras características del lenguaje (por ejemplo, las plantillas C ++ y el polimorfismo de Haskell son básicamente la misma característica, con, nuevamente, implementaciones completamente diferentes). Por lo tanto, un conocimiento profundo de C ++ será principalmente específico de C ++.