¿Qué haces cuando parece que no puedes entender cierta parte de la programación? [cerrado]

11

Estoy aprendiendo nuevos idiomas a medida que avanzo, escribo código para programas muy básicos en varios idiomas y voy a clases. He leído libros, artículos, lecciones, videos, lo que sea, sin embargo, parece que no puedo entender algunas cosas.

Por ejemplo, nunca entendí los punteros: en qué son buenos. (NO ES PARTE DE LA PREGUNTA: no es necesario volver a etiquetar con "Punteros" ...)


Sin embargo, mi pregunta no es qué hacen los punteros, sino cómo puedo entender cosas así. Si, después de leer un libro o un artículo sobre cierta parte de la programación, y no entiendo, ¿qué hago? Escribir código en una determinada característica de programación seguramente ayuda, sin embargo, en realidad no ayuda a comprender tanto. La parte teórica es importante en la comprensión.

Bugster
fuente
11
Desearía poder entender por qué la gente tiene tantos problemas para entender los punteros. El nombre da toda la aclaración que necesito.
ChaosPandion
1
Algún Computer Architecture 101curso sería de gran ayuda para comprender los punteros. ...Y todo lo demás.
ZJR
66
La pregunta no es exactamente sobre punteros, es una pregunta general, pero gracias.
Bugster
2
No creo que recordarle al tipo el único ejemplo con el que confesó tener problemas lo ayudará un poco hacia la iluminación ... Hecho con la frecuencia suficiente, sin embargo, le impedirá pedir ayuda por temor a ser golpeado. larga cadena de respuestas tacañas y pedantes y comentarios degradantes.
haylem
44
@FrustratedWithFormsDesigner: "Cómo aprendo a aprender", creo. Cuál es una pregunta válida y valiosa.
haylem

Respuestas:

22

Si tiene problemas para comprender un concepto abstracto, simplemente baje un nivel. Si no puede obtener los punteros en C, baje al nivel de ensamblaje. ¿Aún tienes problemas? Obtenga más información sobre el hardware, hasta las puertas lógicas.

SK-logic
fuente
2
+1: funcionó para mí. Tuve problemas con los punteros en ALGOL hasta que comencé a escribir el lenguaje ensamblador PDP-10.
Kevin Cline
2
Idea interesante. Aunque quisiera señalar que escribir y ejecutar un programa en ensamblado está yendo demasiado lejos. En mi opinión, ir más allá del punto de comprensión básica es innecesario a este nivel. Pero bueno, si eso es lo que quieres hacer, ¡más poder para ti!
Bryan Field
1
@ George Bailey, sí, podría ser un poco exagerado para cualquier ensamblaje real y hardware real. Es por eso que hay MIXy otras arquitecturas de juguetes similares alrededor. Para una parte de hardware es lo mismo: hay muchos núcleos de CPU de juguete simples para estudiar.
SK-logic
+1: idea interesante y definitivamente probable que funcione, pero (para reutilizar el caso de ejemplo del OP) pasar del nivel de entrada C al nivel de entrada ASM podría ser un camino largo, difícil y sin aliento para un principiante, que probablemente tome más tiempo del previsto por el curso / proyecto / otro. También puede alienar a las personas poco motivadas (lo que probablemente no sea el caso del OP, pero desde una perspectiva de nivel superior, esto bloquearía a muchos estudiantes que toman clases de CS y necesitan entender esto, pero no les importa el CS) . Pero definitivamente es una buena idea a largo plazo.
haylem
Bueno, mi título de CS cubrió esto en Arquitectura de Computadores. Aprendimos acerca de las puertas lógicas, las combinamos en un simulador lógico para construir sumadores, ALU y, finalmente, una CPU RISC muy simple. También escribimos programas simples en el ensamblaje MIPS. Todo esto era necesario para una licenciatura en ciencias de la computación, y en realidad no se consideraba uno de los cursos "deslumbrantes", por lo que no creo que sea exagerado o ir demasiado lejos.
Adam Jaskiewicz
17

Ciclo de vida de aprendizaje incremental corto

  1. Intenta y no entiendes el concepto.
  2. Intenta implementar algo que ilustre el concepto.
  3. Intente diagramar el concepto en la pizarra (si corresponde)
  4. Trata de hablarlo con alguien que entienda el concepto.
  5. Intenta explicarle a esta persona las partes que entiendes (a veces ayuda a ver la luz).
  6. Vuelva a comenzar desde 1 hasta que finalmente pueda explicárselo a alguien que está en el estado 1 y hacer que lo obtenga.

Pasos Adicionales

Para usar con precaución.

  • Busque material adicional de lectura y estudio :
    • en línea (los motores de búsqueda populares y Wikipedia son grandes amigos),
    • en la biblioteca (no subestimes los libros y las personas que van a leerlos),
    • en su sistema (la documentación incluida y las herramientas de documentación a menudo son alienantes al principio, pero su mejor goto-amigo después de un tiempo: aprenda a encontrar lo que está buscando en ellas man -k, por ejemplo apropos, etc.)
  • Intenta leer un código usando el concepto ...
  • ... y recorre el código con un depurador.

Estos son más astutos, ya que necesita reevaluarse para asegurarse de que lo hizo bien. La tutoría directa por parte de una persona bien informada suele ser mejor, seguida, por supuesto, de su propia validación del conocimiento adquirido al volver a implementar lo que acaba de aprender (y luego intentar llevarlo un paso más allá y aprender un concepto de nivel superior construido en la parte superior de ese, por ejemplo, listas enlazadas para sus punteros).

Créditos: Nupul (para diagramación)

haylem
fuente
2
+1! ¿Puedo agregar? Antes de hablar, intente con la pizarra para "esbozarla" (o simplemente tenga la pizarra a mano cuando hable con alguien :)
PhD
1
+1 para "recorrer el código con un depurador". He aprendido sobre muchos conceptos con herramientas de depuración simples ...
funkymushroom
@Nupul: buena sugerencia, agregada.
haylem
@funkymushroom: De hecho, aunque diría que generalmente no se aprende el concepto de esta manera. Sin embargo, ayuda a "levantar la niebla" cuando está justo en frente de usted y simplemente no podía ver las piezas juntas, porque está demasiado concentrado en algo o su mente está frita. Me resulta más útil comprender los problemas de algoritmos generales que los conceptos generales.
haylem
Hablar con la pizarra lo hizo por mí.
Peter
5

En mi experiencia, se trata de aportes y comentarios. Desea recibir aportes en todas las formas que pueda, y comentarios sobre sus errores lo más rápido posible.

En mi experiencia, mi título de CS fue muy seco, muy formal y absolutamente inútil para enseñar cualquier tipo de programación. Asistí a dos o tres conferencias a la semana y si no lo entiendes, eso es todo: el profesor tiene otra clase para enseñar y no puede quedarse para ayudarte. Y, lo más probable es que un chico lo entienda de cierta manera, y lo enseñe de cierta manera y eso es todo, así que si no piensas como él, nunca lo entenderás. Lo que es peor es que, dado que probablemente comprende mil millones de otros conceptos relacionados, es probable que lo enmarque en términos de esos otros conceptos, que bien pueden pasar por alto o simplemente ni siquiera en el material del curso.

Fui a Stack Overflow y pregunté en el canal de chat de C ++ y obtuve cinco explicaciones diferentes en cinco minutos. Todos fueron diseñados específicamente para mí y el problema exacto que tuve, por lo que no es de extrañar que uno de ellos me golpeó en el hogar y lo entendí. La velocidad a la que puede aprender de recibir comentarios en vivo de múltiples expertos es muy superior a lo que puede obtener de una fuente de papel seco.

Así que, idealmente, tómate un descanso y luego encontrarás un grupo pequeño o mediano de personas con ideas afines que no tienen nada mejor que hacer y chatear con ellos en vivo. Por cierto, Stack Overflow es un excelente lugar para obtener este tipo de comentarios personales de alta calidad y alta velocidad.

DeadMG
fuente
3

En ningún orden, los libros, los amigos y la lectura de códigos bien documentados son buenas fuentes. La práctica es la única forma de aprender: intente escribir pequeñas pruebas unitarias. Por ejemplo, para los punteros, escriba código que trate con cadenas: invierta una cadena, invierta cada palabra en una cadena, pruebe palíndromo, reemplace una letra con un número ...

Haga preguntas sobre stackexchange ...;>

Sardathrion - contra el abuso SE
fuente
2

¡La práctica hace la perfección! (bien mejor de todos modos). Sigue intentándolo e intenta utilizar tantas fuentes y sentidos diferentes como puedas:

Fuentes: libros, Internet, grupos de usuarios, amigos, video aprendizaje, uso de sitios que le permiten probar un pequeño 'bit' de código como jsfiddle (principalmente html),
Rubular (expresiones Ruby),
SQlzoo para probar sql,
jslint para javascript,
code pad para muchos idiomas

Para recordar cosas abstractas, considere la mneomía: ¡los médicos las usan!

Considérate un aprendiz de por vida, mantente humilde y podrás llegar lejos.

junky
fuente
1
+1 para "práctica". Pero mnemotecnia, ugh. Son una muleta muy insuficiente que nunca puede reemplazar, y nunca debe suplantar, la comprensión. De hecho, marcan la ausencia de comprensión. Los “médicos los usan” porque se ven obligados a aprender demasiados datos desconectados en muy poco tiempo. Poco a poco nos estamos dando cuenta del hecho de que nuestra educación para médicos es una mierda, y los Estados Unidos, por ejemplo, están en camino de remodelar por completo la educación. Los mnemotécnicos no son una solución, son parte del problema. Si te encuentras usándolos, no lo entendiste.
Konrad Rudolph
1

Tienes que cambiar tu enfoque por un tiempo, no 5 min. o 5 horas ... quiero decir algo así como 1 día sin mirar ese código ... solo relájate ... ve a leer algo diferente ...

Si tiene que entenderlo ahora ... solicite ayuda de amigos o aquí =)

Gerep
fuente
1

Lo que todos los demás en TI hacen.

Utilizo un motor de búsqueda para buscar los conceptos relacionados que no entiendo hasta que pueda volver a visitar el tema que inicialmente quería entender.

Es probable que tampoco comprenda completamente la pila, el montón, las variables automáticas, el proceso de compilación de C ++, el ensamblaje, la memoria administrada frente a la memoria no administrada.

Más claridad sobre estos y otros conceptos relacionados con el puntero probablemente aclararía todo.

brian
fuente
1

No hay una forma rápida y segura de entender un tema. Su éxito depende de cuánto contexto traiga consigo en sus estudios. Tendrá mucha suerte de encontrar a alguien que le explique las cosas teniendo en cuenta su punto de vista. Al igual que las máquinas de Turing, cualquiera puede aprender lo que otros saben, y es solo una cuestión de persistencia y aceptación que la frustración es natural.

Recuerdo la inmensa dificultad que tuve con los punteros. No fue hasta que un tipo muy paciente me lo explicó como si fuera un completo idiota que lo entendí. Eso es a veces lo que se necesita.

Kevin Hsu
fuente
1

Este es un problema común en el aprendizaje y la enseñanza. Y como otros han dicho, no hay una forma segura de evitar esto. Es una verdad fundamental que todos aprendemos de manera diferente ya que nuestros cerebros están conectados de manera diferente en formas sutiles pero cruciales.

El aprendizaje genera nuevas conexiones neuronales. Sin entrar demasiado en la neurociencia (de la que no sé casi nada), generar nuevas conexiones requiere diferentes tipos de exposición a un concepto para diferentes personas. Pruebe muchos ángulos diferentes, lea / escuche / vea diferentes explicaciones. ¡Práctica!

Si eso no funciona, deje de lado el problema: puede que simplemente le falte otra parte del rompecabezas que, una vez adquirido, hace que el problema original parezca obvio.

¿Conoces estos aha! momentos? Esto es cuando su cerebro acaba de hacer una nueva conexión. Así es como sucede el aprendizaje.

Por cierto, cualquier buen maestro lo sabe. Las pautas para la redacción técnica a menudo establecen que cada concepto debe explicarse al menos dos veces, usando diferentes palabras (y quizás con algún texto entre ellas). Si prestas atención, podrás ver que todos los buenos escritores científicos siguen esta regla.

Por desgracia, demasiados maestros lo ignoran y explican las cosas solo una vez. E incluso si logran encontrar una explicación elegante con una gran metáfora, esto simplemente no es suficiente.

Konrad Rudolph
fuente
0
  1. Lea cualquier documentación relevante y Google sus dudas.

  2. Intente escribir ejemplos de código, vea lo que hacen.

  3. Intente ejecutar código en depuración y mírelo paso a paso.

  4. Si aún no comprende un determinado comportamiento, pregúntele a alguien, ya sea en persona o en un sitio web como este. Si probaste todo lo anterior, deberías tener todos los elementos para componer una buena pregunta. No seas tímido :)

Creo que es más o menos lo que hacen los demás.

jlemos
fuente
0

Sigue investigando y aprendiendo. He tenido el mismo problema con varios otros aspectos de la programación. Pero hablar con otros y leer artículos eventualmente conduce a un momento de "AHA". En general, es otra publicación de blog o respuesta SO que presenta la información que puedo seguir.

Básicamente, sigue buscando y sé paciente para la comprensión que vendrá.

Schleis
fuente