Sé C / C ++ muy bien. Desde mi punto de vista, no entiendo por qué es tan difícil para la gente aprenderlo. ¿Por qué tanta gente no entiende los punteros?

Desde mi experiencia, no entender los punteros es solo la punta del iceberg. El problema real yace debajo y consiste en la falta de comprensión con respecto a los paradigmas de programación en los que se basa C y / o la falta de conocimiento básico sobre la organización de la computadora (específicamente – organización de la memoria).
El C es un lenguaje difícil de enseñar, pero es algo que cualquier programador debe conocer. Los que aprenden C correctamente probablemente serán muy disciplinados en su estilo de codificación y probablemente tendrán pocas dificultades para aprender otros lenguajes de programación. En cualquier caso, sugiero que un curso C siempre debe estar precedido por un curso introductorio sobre organización y arquitectura de computadoras.
Con respecto a C ++, los problemas surgen (como arriba) de no entender su paradigma de programación específico (orientado a objetos en este caso) con la adición de espectros confusos y salvajes de particularidades sintácticas y semánticas que posee C ++. El lenguaje en sí es historia viva que consta de muchas capas. Cada revisión trae modificaciones del lenguaje central, renovaciones y nuevas características. Los elementos más antiguos deben conservarse para garantizar la compatibilidad con las aplicaciones heredadas.
Al aprender / enseñar C ++, uno debe enfocarse en una versión específica del lenguaje de programación para evitar nadar en el caos.

Aprendí punteros del lenguaje ensamblador en microcontroladores, parecía más intuitivo a partir de ese nivel, usando registros de índice como punteros, direccionamiento directo, direccionamiento extendido, escritura de variables para apilar para el código impulsado por interrupción para soporte de reincorporación, asegurándome de que No hay problemas de desbordamiento / desbordamiento de pila. usando SWI o XIRQ cuando sea necesario, ect. el mapa de memoria, los vectores de interrupción, la memoria asignada de E / S, CCR, registros de control, programa de monitoreo y bootstrap fueron mis amigos.

cuando me entrené en MS .NET estaba en estado de shock ya que se extrajo mucho. ¡Ya no podía ver lo que solía ver! Además yo también soy un EE. Así que asumí roles donde mi entregable de c # evalúa la calidad de los dispositivos electrónicos.

Estoy de acuerdo, que no debería haber un gran problema con los punteros. Creo que la gente se cuelga debido a la sintaxis original. ¿Le diste a estas personas el ejemplo de las casillas de direcciones en tu vecindario? se trata de personas integradas debido a la memoria asignada io, los periféricos que están codificados en alguna dirección. digamos que uno es un módem en la dirección 0x8000C000, luego digamos que el registro de control está en 0x8000C003 y el registro de datos en 0x8000C007. entonces tiene 2 registros de 32 bits en direcciones específicas con respecto a la dirección base. por supuesto, si el mapa de memoria es dinámico, las direcciones de desplazamiento relativo siguen siendo las mismas, pero la dirección base cambia según los requisitos del controlador incorporado; se utiliza un mapa de memoria diferente que cambia la DIRECCIÓN BASE. Todas las direcciones de desplazamiento periférico en el código del programa permanecen iguales.

Como un granjero de código. He aprendido muchos idiomas, como c, object-c, c ++, php, java, lenguaje ensamblador, etc. si conoces la historia del programa puede entender las razones. antes, terminamos nuestro programa con lenguaje ensamblador. pero el lenguaje ensamblador es muy difícil porque hay tantas filas de código. entonces se crean c y otros lenguajes. hay dos conceptos importantes orientado a procedimientos y orientado a objetos. c es un lenguaje de procedimientos, y c ++ es un lenguaje de objetos. Por supuesto, hay muchos lenguajes de script como php, python para B / S framework. con programa en auge, más y más desarrolladores prestan atención para simplificar el proceso de desarrollo. Se han desarrollado más y más marcos y estructuras de datos para nosotros. Lo que debe hacer es como un granjero de código que lo utiliza para construir su propia casa. He dicho demasiada información no sobre el tema. Ahora puedo decirle por qué / C ++ es muy difícil para muchos desarrolladores. Es sencillo para nosotros dominar la gramática del lenguaje del programa. pero un proyecto no es un simple lenguaje de programa. Necesita estructuras de datos y algoritmos para lograr su objetivo. Muchas estructuras de datos necesitan que comprenda y se dé cuenta. Pero es difícil para la mayoría de los desarrolladores. Por otro lado, por ejemplo, Java, proporciona tantas estructuras de datos como List, Set, Map u otras, puede concentrarse en la implementación del algoritmo. a pesar de que php, un lenguaje de script simple, cuando no usa un marco, puede darse cuenta de que es muy difícil para nosotros terminar un proyecto complejo, porque necesita pensar más cosas como el diseño del programa, la administración de la memoria, etc. es una cosa mágica. No solo puede brindarnos comodidad, sino que también causa flujo de memoria u otros. entonces Java evita usar el puntero. Por supuesto, no hay un puntero en java. pero puede realizarse de otra manera. Si desea ser un mejor desarrollador, creo que debería prestar más atención a la implementación básica y comprender el mecanismo operativo del marco.

C / C ++ es como un viejo automóvil de palanca de cambios sin control de tracción o sistema de frenos antibloqueo. Si puede conducirlo bien, puede ahorrarle combustible, comprender mejor el automóvil y ser más flexible en una variedad más amplia de condiciones de manejo. Sin embargo, puede ser mucho más peligroso si no eres muy hábil en conducir un automóvil de este tipo, y lleva mucho tiempo lograrlo. Es posible que la transmisión automática con control de tracción moderno no le brinde todo el control manual de bajo nivel que desee, pero es más fácil de aprender y no tiene que ser muy hábil para conducir para conducir de manera segura en condiciones difíciles.
Personalmente, no creo que los punteros C / C ++ sean difíciles de entender, pero tendría que pensar un poco más y codificar un poco más para usar los punteros en oposición a las referencias de Java, por ejemplo. Pero lo más importante para mí, en mi experiencia personal, es mucho peor tratar un código C / C ++ incorrecto que un código Java incorrecto, y existen muchos códigos incorrectos.

Todos son diferentes.

Sin embargo, su definición de ‘conocer muy bien C / C ++’ podría diferir del punto de vista de otros sobre sus capacidades.

More Interesting

¿Cuándo usarías una Raspberry pi en una computadora pequeña y normal?

¿Cuáles son los conceptos matemáticos básicos (principios) que uno debe conocer para construir un programa, sistema o producto eficaz de frambuesa Pi?

¿Cuáles son las ventajas de aprender C o C ++ para la programación de microcontroladores en lugar de usar lenguajes de nivel superior como Python?

¿Puedo usar 1 Raspberry Pi para varios proyectos simultáneamente?

¿Cómo difunde el Raspberry Pi su "dominio"? Descubrí que llamé a mi RaspberryPi "veryberry", por ejemplo, y sin modificar ninguna configuración de DNS, puedo conectarme a ssh: // veryberry y http: // veryberry ... ¿Cómo se pasa ese nombre de dominio ya que no está conectado a un servidor de nombres de dominio?

¿Se puede usar Raspberry Pi como Arduino Uno (que se puede programar fácilmente y puede hacer cambios en el mundo físico)?

¿Cuál es el mejor entre RIoTboard, Rasberry PI y Arduino que es fácil de usar para proyectos de IoT (Internet de las cosas)?

Cómo optimizar la transmisión de video en vivo usando PiCam

Nunca he programado antes. ¿Qué lenguaje de codificación debo aprender para cosas pequeñas en Raspberry Pi, etc.?

Internet de las cosas (IoT): ¿Qué necesito para crear un sistema de monitoreo de bebés?

¿Raspberry Pi es adecuado para un proyecto escolar?

¿Podrías usar un Rasberry Pi para programación web?

¿Puedes hacer un servidor de juegos para 8 personas con Raspberry Pis?

¿Debo comprar Raspberry Pi para la minería de bitcoin o debo usar mi Mac para ello?

Cómo controlar un motor de forma inalámbrica con una aplicación Java y / o Raspberry Pi