Cómo mejorar en captar conceptos y emplearlos en informática.

Ah, el síndrome del impostor, la perdición de mi existencia y la de todos los demás estudiantes. Llevo unos meses programando en C En esos pocos meses, aprendí a usar punteros para empujar la memoria y ver qué tan grande es algo que no es, si se ha cambiado, cómo apilar y detectar pérdidas de memoria, cómo aislar y jugar con bits individuales en un stream, y he hecho un pase para trasladar el Sudoku Solver de Norvig a C desde Python, incluye una restricción de desplazamiento que utiliza la clasificación por indirección de mi propio diseño.

Conozco de manera absoluta a Python, y esta es la primera vez que utilizo un lenguaje en un nivel inferior al de Java.

Actualmente estoy trabajando en un programa de encriptación de juguetes para una tarea y estoy a punto de iniciar un programa que genere árboles que se pueden ensamblar o desmontar a voluntad para hacer cosas como colas, o para crear un comportamiento priorizado. Al menos la mitad de las cosas que uso para las tareas, no las hemos cubierto. El TA me dice que tiene que ir a leer las páginas del manual para entender mi código lo suficiente para calificarlo.

La mayoría de las veces, estoy convencido de que soy demasiado tonto para que se me permita tocar las computadoras. Cada vez que no puedo compilar algo o no hace lo que quiero, me siento como el idiota más grande del mundo. También me sonrojo cuando me avergüenzo, lo que significa que si me olvido de una pregunta, podría hacer una imitación convincente de un tomate.

Me muevo por ahí sintiéndome como un fracaso colosal (mientras mi compañero me jura por ser tan negativo. Mi compañero, un físico de formación, tomó muchos exámenes en la escuela de posgrado que tuvo un promedio de clase de ~ 40%).

Entiendo el sentimiento. Íntimamente

Lo primero que debes hacer es tomarte un tiempo libre. Bajen los libros de texto y paseen. Es fácil dejarse acorralar por una combinación de pánico, sentirse como un fracaso y la sensación de desesperanza (dice ella, desde su propia esquina).

Cuando llegue a casa, tome un gran vaso de agua y bájese para una siesta. Cuando te levantas, hay algunas cosas que puedes hacer.

Así que las cosas no están funcionando para ti como son. De acuerdo, esto ocurre con regularidad en cualquier proceso de entrenamiento: los levantadores de pesas llegan a las mesetas, los corredores también los golpean y los académicos no son una excepción. Después de todo, estás entrenando tu cerebro.

La respuesta de Mallapur detalla muchos estilos de aprendizaje. Pruébalos para que puedas descubrir cuál te funciona mejor y no temas mezclar y combinar.

Déjame decirte lo que hago.

Soy uno de los obsesivos de la naturaleza; no puedo soportar no saber algo, y lo picotearé hasta que se abra para mí de una forma u otra. Esto es bueno y malo; junto con mi insomnio, significa que duermo cantidades ridículamente pequeñas y que me sentaré y codificaré / leeré páginas de manual / etc durante doce horas en una toma con muy poca provocación.

Sin embargo, mi cerebro hace cosas extrañas a la información; a menudo tengo que volver a verificar para asegurarme de que la ruta analítica natural para mí esté lo suficientemente cerca de la ruta analítica implícita en lo que sea que esté estudiando. Rara vez tomo una línea recta a través de un tema, por razones que no entiendo.

Esto significa que mi método de estudio es tanto tangencial como recursivo: voy y vuelvo, construyendo la siguiente pieza a partir de las piezas anteriores. Lo malo de estudiar muchas cosas es que a veces se construyen cosas a partir de partes que se supone que no deben estar allí. Funciona mejor para mí si dejo que mi cerebro siga al conejo, y vuelvo a verlo a menudo.

En el semestre de primavera de este año, estaba tomando un curso de Java. El proyecto final fue una reescritura completa de Space Invaders. Ya casi terminé, pero tuve un problema molesto. Cada vez que la nave era movida por el jugador, toda la maldita pantalla parpadeaba, hasta la tasa de actualización visible.

Leí sobre las tasas de actualización de monitores (tenga en cuenta que este es un curso Java de segundo nivel). Luego leí sobre tarjetas de video. Luego leí sobre varios tipos de temporizadores. Luego jugué con mi programa.

Luego le envié un correo electrónico al TA que tenía ese semestre, quien me dijo que dejara de intentar reinventar la rueda nuevamente.

Te ahorraré lo que dije (en voz alta, no al pobre TA).

Mi compañero, que me ha escuchado jurar más de lo que nadie debería, me convenció para que lo dejara y hiciera otra cosa por un tiempo. Protesté, me quejé, me quejé de mi carga de trabajo y finalmente me rendí.

Pasé algunas horas fragando y fui arrastrado a la cama, donde hice una imitación bastante buena de un cadáver durante diez horas impares (habían pasado tres días desde mi última noche de sueño).

El profesor del curso había mencionado la concurrencia brevemente antes de este punto. Sin embargo, los subprocesos múltiples generalmente no se cubren en detalle en ese nivel de trabajo de curso, y no pude entender la explicación, aparte de que la concurrencia tuvo algo que ver con la administración de la sincronización cuando ejecutas los programas.

Pero ahí estaba, ese parpadeo enloquecedor.

En este punto, estaba más allá del alcance requerido para el proyecto. Tenía un juego funcional en una GUI, y había agregado al menos uno de los elementos en la lista de bonificaciones (en realidad agregué casi todos). Pero no fue suficiente hasta que fue como yo quería. ser.*

También estaba tomando una (más que) carga completa de otros cursos, una carga de graduación a tiempo completo de teoría / métodos sociales, un curso de cálculo y el curso de segundo año de programación. Dejé el programa y comencé a trabajar en otras cosas. Tuve que terminar un montón de otros trabajos, pero sin importar qué otra cosa hiciera, una parte de la parte posterior de mi cabeza era reflexionar, y cómo hacer que varias cosas funcionaran en diferentes tipos de tiempo.

Mientras discutíamos la organización social, estaba pensando en el tiempo. Mientras discutíamos cómo se constituye un grupo demográfico, estaba pensando en el tiempo. Mientras discutíamos si hay una forma ética de usar la raza como categoría, estaba pensando en el tiempo. (Y, por supuesto, participando en la discusión.)

¿Cómo se puede hacer algo que se ejecute directamente a través de las instrucciones del programa, ejecutar las cosas en diferentes órdenes, o solo ejecutar algunas cosas en una larga lista de cosas? ¿Cómo se forma un conjunto coherente de instrucciones que anticipa las condiciones que requerirán que el flujo del programa cambie?

Mientras discutíamos los méritos e inconvenientes de usar distinciones categóricas para ver los diferentes resultados de los grupos raciales, estaba pensando en las distinciones sí / no (las personas que tienden a tratar la raza como usted es a, b, o c) – necesitamos algunas distinciones para recopilar datos nacionales sobre el efecto de la pobreza, o los resultados en el sistema de justicia penal, o para describir el agrupamiento en ciudades, o cualquier otra situación en la que lo que sucede sea diferente según quién se cree que es alguien, aunque las distinciones son a menudo espurio.

Qué demonios , pensé, solo haré una bandera para actualizar la nave en comparación con todo lo demás en la agrupación de actualizaciones debajo de mi temporizador. No es bonito, pero hará el trabajo .

Lo hizo, y poner una bandera allí me permitió crear una bandera para las peleas contra jefes y agregarlas como un nuevo “nivel” en el juego. (Por supuesto, descubrir cómo Java ordena la actualización de los componentes gráficos en el método de dibujo fue otro desagradable hervidor de peces, pero también lo descubrí por prueba y error, ya que las páginas man no son muy explícitas para esto. La respuesta es que es solo de forma secuencial, dependiendo de lo que haya reemplazado para obtener su método de pintura y lo que hay allí.)

He revisado la definición desde entonces, ahora que tengo más memoria y gestión de procesos en mi haber, y entiendo más. No tengo ninguna duda de que volveré a hacerlo una y otra vez a medida que trabajo para entender el tiempo como una variable en los procesos, y mientras trabajo para administrar cosas como en el tiempo de proceso de los hilos en lugar del tiempo a medida que lo experimentamos.

En orden, esto es lo que hice para entender el concepto de concurrencia:

  • Investigué, leyendo como me gustaba más allá del alcance del curso.
  • Hice la investigación basada en la resolución de problemas, con un problema concreto que podía probar en función de la codificación con mi código.
  • Roté a través de los términos de búsqueda basados ​​en la información que tenía. Lo primero que pensé que tenía era un problema de actualización de monitor.
  • Tomé descansos y dejé que mi cerebro hiciera otras cosas en lugar de golpear mi cerebro contra él (o, más bien, mi compañero me arrastró pateando y gritando para que mi cerebro pudiera descansar).
  • Me dejé ir y volví del tema, haciendo preguntas como “¿cómo podría algo tan lineal como una computadora hacer más de una cosa a la vez, o discriminar entre las cosas?)
  • Me permití asociarme entre otro material y mi problema informático, aplicando enfoques de otras disciplinas al problema y dejando que mis cursos se informen entre sí.
  • Me permití contemplar el problema y pregunté por qué los componentes funcionan de la manera en que lo hacen, o qué hace que ocurran ciertos tipos de comportamientos con respecto a los programas.
  • Revisé el concepto según sea necesario o a intervalos, reconociéndolo como importante.

Por supuesto, esto significa que, entre mi trabajo en el curso y el intento de hacer el juego lo más bonito posible, acampé frente a mi computadora durante la mayor parte de las últimas semanas del curso, así que tuve un estudio intensivo. / practica continuando

Sin embargo, como lo dejó en claro, se me permitió ser un hilo conductor en mi vida, tejiendo mi trabajo en otras cosas, pasando por mi mente mientras caminaba, mientras cocinaba, o mientras leía algo más.

Como sé que me aburro, permití que mi interés informara cómo busqué y qué busqué. La información que reuní no siempre fue útil para el problema del parpadeo, pero resultó ser útil para otras cosas. Recomiendo tratar de encontrar enlaces entre el tema y sus intereses siempre que sea posible.

Encuentro que varias cosas realmente ayudan con el aprendizaje: la disposición a explorar (lo que incluye trabajar antes de los plazos para que tenga tiempo para explorar), la disposición a asociarse (para que lo que está aprendiendo se incorpore mejor a lo que sabe) ), la disposición a experimentar y / o jugar (hay, como sin duda ha descubierto, problemas que no surgen directamente en los libros de texto), la disposición a abordar el tema desde una variedad de ángulos diferentes (como alguien aprender a programar, como alguien a quien le gustan los conceptos abstractos, como alguien con un problema concreto, como un científico social que piensa acerca de la naturaleza de la categorización, como un estudiante de matemáticas que piensa en el proceso, etc.), y la voluntad de trabajar en lo que puedo ” Lo hago de inmediato.

Lo último es realmente importante para cualquiera que quiera aprender un tema. Ni siquiera lo clasificaría como paciencia en sí misma, no soy una persona paciente por naturaleza, aunque he aprendido a fingir con el propósito de hacer las cosas. Lo que sí tengo es la terquedad, la falta de voluntad para ser derrotado fácilmente, y un amor intrínseco del tema.

Aunque me siento como un idiota la mayor parte del tiempo, y desearía ser más inteligente, más rápido y pensar en patrones mucho más cercanos al camino del razonamiento indígena a los conceptos (tiendo a desviarme a lugares extraños), simplemente puedo ‘ No te dejes vencer por un concepto. Así que lo atacaré con cada herramienta que tenga, y aprenderé nuevas a medida que las descubro. Si tengo una pregunta sin respuesta, voy a desenterrar libros de texto, leer Stack Exchange, construir programas de juguetes, ver algoritmos, cualquier cosa y todo hasta que lo obtenga. **

Sin embargo, puedo cansarme y sentirme desesperado (como ahora, digamos).

Me pareces un luchador, alguien que está cansado en este momento, pero que está dispuesto a entrar y realmente luchar contra el concepto para dominarlo. Si no lo fueras, no publicarías aquí, tratando de obtener ayuda. Esto es excelente. Entender los conceptos de ciencias de la computación (o ciencias, o matemáticas, o ingeniería, o ser un artista realmente bueno, o hacer cualquier cosa bien) te lleva a luchar por ello. Tendrás que sudar para que las cosas se vean sin esfuerzo.

Si puedo prometerte algo, es esto: las personas a las que miras y piensan que simplemente “entienden” no solo lo entienden.

El conocimiento es acumulativo, requiere trabajo y está plagado de mesetas, momentos de desaliento, momentos de desesperación, frustración y, sin importar quién seas, vas a tener sentimientos de insuficiencia.

No estás solo, y trabajar para comprender conceptos es completamente normal en los cursos de informática (ni siquiera me refiero a personas que han estado programando durante décadas en el momento en que comienzan a tomar cursos, sino que pasan todo lo que hacen como ” talento natural.”)

Tómate un descanso, y tal vez intente mis sugerencias.

Definitivamente, debe utilizar la sugerencia de Mallapur y averiguar su estilo de aprendizaje, luego administrar sus estudios de acuerdo con ello.

Buena suerte matando al dragón.
______________________

* Este semestre en C ha sido sobre obligarme a dejar el código cuando funciona en lugar de reestructurarlo hasta que creo que es lo suficientemente bueno. Tengo la tendencia a tratar de hacer cosas realmente difíciles, cosas que están fuera del alcance de mi conjunto de habilidades actual, y de seguir luchando con las cosas de forma bastante indefinida.

** No dejes que nadie te engañe, si realmente quieren entender un concepto, en lugar de solo escupir una respuesta, tendrán que entrar allí y luchar contra la cosa hasta que obtengan las respuestas.

Soy lo suficientemente inteligente como para intuir la respuesta correcta a veces, pero simplemente saber (sin saber cómo o por qué) no es lo suficientemente bueno para mí.

También es peligroso, ya que le permite avanzar mucho más allá del punto en el que puede causar muchos problemas sin las herramientas que le permiten ver cuándo está a punto de crear problemas.

Creo que podemos compartir una experiencia común. Fui un estudiante terrible y tengo la “C” de mi caballero en cálculo, algoritmos y algunas otras clases para probarlo. La diferencia podría ser que yo era un hacker autodidacta y me había estado ganando la vida como ingeniero de software antes de volver para obtener mi doctorado. Como tú, sabía que tenía una pasión por las computadoras. A diferencia de usted, pude aprender sobre ellos más allá de las presiones de la academia y sabía que era mejor que muchos de los programadores que había conocido (lo que realmente no dice mucho). También sabía que lo que estaba (fallando) de aprender en el aula no tenía nada que ver con lo que me apasionaba.

Entonces, ya que no tienes el lujo de aprender a codificar durante un BA de 7 años en el teatro, ¿cómo puedes ir a ganar algo de confianza?

Si puedes manejarlo, tómate un semestre de clases CS y juega . Ya tienes la pasión. Comienza un proyecto del que no le cuentes a nadie más y trabaja en él cuando el espíritu te mueva. Si es el proyecto equivocado, no se preocupe, aprendió algo y ahora pasa al siguiente.
Debería ser técnicamente difícil, y también algo que se puede hacer en unos pocos miles de líneas de código. Puede ser tan simple como comprender exactamente lo que hace el cargador de arranque, o cómo escribir scripts de vinculador, o cómo detectar paquetes de Ethernet. Sea lo que sea, debería ser frustrante y difícil y, después de un par de semanas, dejarte con la gran satisfacción de lograr algo que muy pocos de tus compañeros pudieron haber logrado.

Esto también servirá como un infierno de una pieza de cartera en sus entrevistas de trabajo.

Luego regrese, termine sus clases lo mejor que pueda y comience a buscar un programa de MS que le permita enfocarse en lo que le apasiona.

¡Buena suerte!

Actualización:
Puede encontrar este libro “Una mente para los números” por Barbara Oakley y su curso en línea gratuito para ser realmente útil para salir de la rutina: Aprender a aprender: poderosas herramientas mentales para ayudarlo a dominar temas difíciles – Curso a pedido gratuito | Coursera
Para más detalles, vea: Reseña del libro: “Una mente para los números” por Barbara Oakley. (Uso de la configuración predeterminada del cerebro para la resolución de problemas de aprendizaje, matemáticas y ciencias) por Gurudutt Mallapur en Aprender a aprender

Mire el diálogo interno:
Compararse con otros individuos disímiles es el camino correcto hacia la autocrítica, la baja autoestima y la depresión. Sin duda te hará más débil al tratar con la situación.

Estos libros sobre inteligencia emocional (EQ) pueden ser de alguna utilidad para sentirse cómodos con uno mismo: Super Books for Life-Skills de Gurudutt Mallapur en Learning to Learn (L²L)

Estoy recopilando una lista de problemas comunes que surgen al combinar el estilo de aprendizaje con el estilo de enseñanza en estos 2 Blogs. He recopilado esta información en los últimos 17 años. Es demasiado para poner en una respuesta, así que he recopilado todas mis respuestas relacionadas con el aprendizaje y la programación en estos 2 blogs:

1) techtalkies
2) Aprendiendo a aprender (L²L)

Estilo de pensamiento y modelo mental:

A) Usted:

  • ¿Tiendes a pensar en cadenas lógicas, analíticas?
  • ¿Tiene muy buena memoria de números o información exacta?
  • ¿Te resulta fácil seguir instrucciones limitadas?
  • ¿Recuerda y sigue los pasos exactos sin mucho contexto?
  • ¿Te resulta más fácil aprender y recordar definiciones verbales?

B) tu

  • ¿Necesita mucha información de amplitud para establecer el contexto para el aprendizaje?
  • ¿Tienes una necesidad obsesiva de saber CÓMO y POR QUÉ para cada uno y todo lo que aprendes? Para saber cosas ENTERAS en lugar de partes.
  • ¿Tiene una memoria muy visual, es decir, entiende un gráfico o diagrama mucho mejor que una descripción textual o puede hacer un modelo 3D en su mente?
  • ¿Tiendes a pensar en términos de conexiones entre cosas?
  • ¿Te resulta muy difícil recordar cosas exactas?

Es posible que se encuentre en la categoría B. Si lo hace, debe seguir una forma de aprendizaje totalmente diferente a la de las personas de la categoría A.

1) Estilo de aprendizaje:

A) Aprender de memoria no en la forma de aprender de cada persona. Algunos lo hacen extremadamente bien en eso.
B) Algunos necesitan comprender el significado y las implicaciones de lo que están haciendo de una manera científica y racional.
C) Algunos lo hacen bien haciendo proyectos prácticos, experimentales y tangibles.
D) Algunos lo hacen realmente bien en la manipulación simbólica en papel o mentalmente.

Necesita descubrir qué funciona para usted al mirar lo que le funcionó en el pasado. Podría ser algo menor, pero puede dar una pista de lo que funciona para USTED.
a) Estilo de aprendizaje: visual, auditivo, cineastico, simbólico, lógico, rítmico, etc.
b) Estilo organizacional: de arriba hacia abajo, de abajo hacia arriba.
c) Estilo de procesamiento: profundidad primero, ancho primero.

2) Comparación:

Nunca te compares con otros, ya que pueden aprender de una manera totalmente diferente. Lo mejor que puedes hacer es comparar tu nivel de habilidad actual con las habilidades que te gustaría adquirir, es decir, tu potencial .

Mejor recordar que esto es un ideal y no una realidad. ¡Sin embargo, he encontrado que con el tiempo un ideal se convierte rápidamente en una realidad adquirida por mucho tiempo y más! Es solo que te ajustas a la idea y te fijas más y más lejos 🙂

3) Introspección:

Mencionaste las computadoras como tu pasión.
¿Qué te atrajo primero a las computadoras?
¿Qué tan diferente es eso de lo que estás haciendo ahora?
¿Qué ha cambiado?
¿Cómo devolver la diversión a lo que estás haciendo?

Si te gusta tu viaje, te mantendrás en curso aunque te lleve más tiempo que otros. La mejor de las suertes.

Vea mis otras respuestas sobre el autoaprendizaje y la informática para más detalles.
—–
Actualización:

He pasado por esto por al menos 17 años. Solo ahora, sé (un poco más) dónde buscar respuestas o cómo encontrar fuentes que me lleven a ellas.

a) ¡La gente ha pasado por estos dolores de aprendizaje y se ha sentido excluida MUCHA! Estas son características definitorias de la mente de un pirata informático, es decir, ‘La necesidad de saber cómo y por qué’
Para reducir la fricción involucrada, en este proceso de aprendizaje de prueba y error, eche un vistazo al libro “Patrones de aprendizaje”: Patrones de aprendizaje (publicado en línea como Creative Commons)

b) Reinventar la rueda es la mejor manera de aprender cómo y por qué alguien resolvió un problema de una manera particular. ¡También es una muy buena manera de convertirse en un inventor! 😀

c) Su descripción insinúa una mente racional racional. Puede que le resulte interesante repasar las descripciones de personalidad de ENTP / INTP / INTJ en la Prueba de Personalidad – Sitio web del temperamento Keirsey y

Diviértete con este asombroso enlace en los aspectos internos de las computadoras principales: Gustavo Duarte