¿Por qué no podemos simplemente rediseñar C ++ para que sea más fácil de aprender?

No puede rediseñar C ++, porque lo que haga entonces no es compatible con el código de C ++ heredado. Puedes entender C ++, entender la idea detrás de C ++ y entender qué legado está perturbando esa idea. A veces se llamaba a Java como C ++ sin el legado. Eso está mal, Java es otra idea escrita en una sintaxis que es similar a C ++. C # es una evolución de esta idea que se acerca a C ++. Lo que se describe como legado en Java es necesario. Así que C # lo puso de nuevo. Pero C # es todavía otra idea. Java y C # tienen un entorno completamente diferente en comparación con C ++.

Si miras a tu alrededor, verás muchos lenguajes basados ​​en la sintaxis de C y C ++. Y con diferentes ideas.

Comprender la idea de C ++ le permite volver a implementar la idea de C ++ en otra sintaxis, que podría ser más fácil y más robusta. Por lo tanto, es posible que tenga un bloqueo en Rust que está realizando buenos pasos en la dirección correcta.

Una cosa muy importante además de eso: C ++ es fácil de entender. En realidad diría que es más fácil que Java. Porque puedes pensar y expresar (la mayoría de) tus pensamientos en C ++. También tienes que entender la corrección constante en Java. Pero en Java no puedes expresar esto. No puede decir “No le permito que cambie un valor en mi registro de datos cuando se lo entrego a usted como parámetro”. Solo puede aprender este concepto cuando lo depura y comprende que preferiría expresarlo al compilador. Tienes que aprender ese concepto de la manera más difícil.

Aprender a escribir software confiable es una manera larga y difícil. Lleva años. Y describiría C ++ como una abreviatura. Eso hace que C ++ no sea más fácil. Pero ocultar las trampas tampoco facilita las cosas. La diferencia es que con Java o C # caes en estas trampas cuando el software se hace grande. Cuando se entera de que los diámetros no son posibles en C # y tiene un trabajo difícil para depurar un diamante real en C #. Primero, no tienes experiencia con los diamantes y has aprendido que no son posibles en C #. Son posibles o han sido posibles al menos. Y entender este concepto en C # es mucho peor que entender este concepto en C ++, donde el compilador le informa sobre las ambivalencias y le da la oportunidad de expresar “No quiero eso como un diamante”. O la oportunidad de usar ese diamante como característica. Por supuesto, es más difícil entender una estructura de diamante que simplemente ignorarla. Ignorar las cosas no las hace más fáciles. Si no aprendes cosas no es más fácil aprender. Simplemente no aprendes algo. No aprender no es la forma en que el aprendizaje funciona o se vuelve más fácil.
No tienes una recolección de basura. No tienes que aprender cuándo funciona la recolección de basura y cuándo no. O si esto puede resultar en problemas de tiempo de ejecución para aplicaciones en tiempo real. Simplemente no tienes estos problemas en C ++. Lo que no significa que tenga que renunciar a la desasignación automática de memoria. Su basura puede ser eliminada automáticamente. En C ++ simplemente no lo recogemos.

Si quieres aprender recomiendo C ++, porque allí puedes expresar estos pensamientos. Encontrará literatura y tutoriales sobre estos temas porque hay programadores profesionales que pueden hablar sobre estos temas en un idioma donde pueden mostrarle el significado de estos temas y expresar la solución predeterminada y las diferentes soluciones especializadas para sus requisitos individuales.
No puedes aprender programación genérica en Java o C #. Puedes aprender a crear contenedores genéricos con Java o C #. Y tan pronto como desee escribir software genérico, debe cambiar a C ++.
Entonces, ¿por qué tomar un desvío con Java o C # si quieres aprender?

Si desea aprender, acepte el hecho de que tiene que aprender y lo que sea nuevo para usted parece ser complicado al principio. C ++ no le permite una comprensión virtual. No hay ninguna máquina virtual a continuación. Su metal desnudo debajo. Si fallas te estrellas en el suelo. No hay excuseMe para atrapar. Allí aprendes a hacer cosas que funcionan de manera confiable sin excepción. Aprende a pensar en ello en lugar de lanzar una excepción IllegalArgumentException si ahora no sabes qué hacer.

En mi opinión, la razón más importante por la que C ++ se considera tan difícil de aprender es la falta de buenos recursos de aprendizaje. Cuando se enseña correctamente, C ++ es mucho más fácil que C, Java o C #. Sin embargo, a menudo es enseñado por personas que todavía están acostumbradas a la programación con estilo C, tratan a C ++ como una extensión OOP, no han aprendido a usar las funciones recientemente introducidas, le dan demasiada importancia a funciones difíciles como los punteros (aunque para muchos prácticos). Usos punteros se pueden evitar por completo), o algo así. Incluso los tutoriales en línea: no conozco ninguno que enseñe C ++ correctamente (he comenzado mi propio tutorial, pero requiere algo de trabajo, y probablemente tampoco sea tan bueno :).

Ya hecho. Se llama C #.

Para ampliar esto un poco. No puedes hacer que sea más fácil aprender algo agregando cosas, y si eliminas algo, entonces ya no es el mismo idioma, ya no será compatible con los programas escritos para el idioma anterior. Así que hace que sea más fácil aprender más o menos desde cero, manteniendo el espíritu, pero dándole un nombre diferente.

Y si dice “pero C # no es un reemplazo para C ++”, bueno … nunca dije que lo fuera. Es un poco como con los autos: puede ser fácil de aprender, o puede ser rápido y poderoso. No puede ser ambas cosas. Por suerte, no necesita un McLaren F1 para la mayoría de las tareas del día a día

En primer lugar, supongamos que lo que está hablando ha sucedido. Muchos lenguajes, por ejemplo, Java, Objective-C y C #, derivan su sintaxis y estructura de C ++, pero al hacerlo, no son C ++. Ese es el problema. Un lenguaje de programación es un conjunto de formas estándar de crear programas. Simple como eso. Si lo rediseñas, se convierte en otra cosa. Esa es una de las razones por las que tenemos docenas de lenguajes de programación diferentes, algunos sorprendentemente similares.

Me encontré con una broma, tal vez en xkcd, sobre diferentes estándares. El chiste es básicamente que alguien está mirando por qué hay 9 formas diferentes de hacer lo mismo, y dice “¿Por qué no rediseñamos esas 9 formas diferentes para crear una forma única y mejor de hacerlo?” Por supuesto, todas ¡Lo que has hecho es hacerlo así que hay 10 formas diferentes de hacer lo mismo!

Como han señalado otros, una vez que rediseñas C ++, ya no es C ++ ni está relacionado con C ++. La esencia de C ++ es que:

  1. proporciona acceso de hardware de bajo nivel a través de punteros de memoria (que pueden hacer tropezar a muchos programadores)
  2. proporciona un control manual muy fino sobre la gestión de la memoria (que puede hacer tropezar a muchos programadores)
  3. proporciona una plétora de características avanzadas (a menudo no ortogonales ) para abordar casi todas las situaciones de programación concebibles (esta filosofía de todo menos la cocina puede hacer tropezar a muchos programadores)

Puede “rediseñar” el lenguaje para eliminar la programación de bajo nivel, la administración de memoria manual y todas las funciones de lenguaje que hacen que C ++ sea tan complicado de usar, pero no tendría ninguna de las cualidades que hacen a C ++ tan útil (y doloroso). usar).

Porque C ++ se ha ido demasiado lejos. Introduce cada vez más complejidad para compensar errores anteriores.

http://ianjoyner.name/C++.html

El objetivo de un lenguaje de programación debe ser primero implementar todo el poder de la computación. Este núcleo es bastante simple, pero poderoso. Los fundamentos son simples de aprender. Los conceptos básicos a menudo están enterrados debajo de las capas de cruft en los lenguajes de programación.

Pero la programación es muy difícil. Por lo tanto, los lenguajes también deben ayudar a un programador a ser productivo al poder organizar la tarea. En el fondo eso es lo que C ++ intentó (pero realmente falló) hacer. También es así como la tarea de organización se comparte entre el idioma y el entorno (el IDE).

Entonces, un lenguaje que se haya diseñado bien debería ser fácil de aprender, una vez que se comprendan los principios. Tal lenguaje sería muy productivo. Pero recuerde que la tarea de programación en sí misma es difícil porque los sistemas que queremos construir son muy complejos.

C # tiene básicamente las mismas características de diseño orientado a objetos que C ++, pero es más fácil de usar. También tiene acceso al control de memoria de bajo nivel con código “inseguro”, pero no es tan rápido debido a características como la recolección de basura. Si desea igualar el rendimiento de bajo nivel de C ++, existe C. C es mucho más simple y fácil de aprender, principalmente porque carece del aspecto orientado a objetos de C ++.

Si crees que C ++ es difícil debido a la administración de la memoria, C # o Java son mucho más fáciles. Si crees que C ++ es difícil debido a la programación orientada a objetos, C será mucho más fácil. Creo que C ++ es difícil porque requiere que entiendas ambas características al mismo tiempo.

Además, hay Go. No tengo ninguna experiencia en el desarrollo, pero he oído que tiene muchos de los mismos controles de bajo nivel de C ++ pero tiene muchas características para facilitar el aprendizaje, a costa del rendimiento.

Podríamos, pero no consigues algo por nada. Los automóviles con transmisión automática son más fáciles de aprender a conducir que aquellos con cambio de marchas manual. Pero son más caros y empeoran el kilometraje del gas. Del mismo modo, C ++ tampoco cumpliría algunos de sus objetivos de diseño, si la facilidad de aprendizaje se convirtiera en la máxima prioridad.

Si sientes que hay demasiadas características de lenguaje, hay C.

Si eso no es suficiente abstracción o características, entonces está el Rust algo más seguro y acogedor, cuya razón de existencia es bastante cercana a “un C ++ más fácil de aprender”.

Si la administración de la memoria es demasiado difícil de aprender y debe eliminarse por completo, entonces Java tiene un recolector de basura para usted.

Si la escritura estática es demasiado restrictiva para usted, entonces tiene Python.

Si no tiene suficientes palabras aleatorias que sean similares al lenguaje coloquial, entonces puedes intentarlo con Ruby.

Si desea un idioma que sea más fácil de aprender que C ++, hay muchas opciones para usted. La razón principal por la que C ++ no se simplifica es porque el propósito de C ++ no es ser fácil de aprender, es tratar de ser un lenguaje de bajo nivel que admita altos niveles de abstracción que puedan aplicarse a casi cualquier situación. Desafortunadamente, esto casi automáticamente impide que sea fácil.

Porque es un oxímoron.

En el momento en que “rediseñas C ++” ya no es C ++. En su lugar tienes otro idioma.

Si quieres algo más fácil de aprender, encuentra un lenguaje más fácil.

Tenemos lenguajes de programación que son fáciles de aprender.

Y tenemos lenguajes de programación que pueden hacer el trabajo.

Hay dos necesidades diferentes, no debería ser sorprendente que tengan diferentes soluciones.

Creo que c ++ ya ha sido rediseñado en su forma más simple hasta la fecha, porque cuando lo aprendí antes funciona en c ++ donde el programador podría dedicar muchos minutos a depurar los errores que aún no se habían visto, pero con el c ++ actual puede fácilmente ¡Sigue los tutoriales y comienza a trabajar en programas simples! simplemente tómese su tiempo con c ++, ya que dijo que no es un lenguaje fácil de aprender, pero con tiempo y paciencia puede ser uno de los mejores. #HappyCoding

Aprenda los conceptos básicos. Inicio de tutoriales / series de cursos disponibles presentados por javatutorialpoint. Nuestro curso en línea de Java está dirigido a ayudar a los principiantes a aprender desde cero. Inscríbase en nuestro curso de Java en línea hoy, Java Tutorial Online y Java Programming.

C ++ fue mi primer idioma y si pudiera aprenderlo en la clase 7 (aunque solo lo básico), es fácil (al menos para mí). Como se dijo en la respuesta anterior, si rediseñas algo, no permanece igual sino que se convierte en algo diferente.

¡C ++ es al menos desde 2011 con actualizaciones que apuntan a la legibilidad!

¡Las actualizaciones de C ++ en 14 y 17 ya tienen algunas características de noticias para simplificar y simplificar el código!