¿Es natural que un buen programador olvide la sintaxis / algoritmos a lo largo del tiempo si no lo usa mucho? ¿Cómo los programadores profesionales recuerdan sus cosas? ¿Cómo puedo entrenarme para pensar algorítmicamente la próxima vez que aprenda un nuevo idioma?

Llevo 4 años programando. Y en esos cuatro años, he trabajado en C, C ++, Java, JavaScript, HTML, PHP, Ruby On Rails … y la lista sigue creciendo.

Así que aquí está mi consejo …

No estudies lenguajes de programación por una entrevista de trabajo.

Nunca sabrás el uso práctico del lenguaje si lo haces. Y diferentes empresas trabajan en diferentes tipos de aplicaciones. Y cada empresa tendrá su propia elección de lenguaje de programación. No puede aprender un idioma, solo porque estaba incluido en una descripción del trabajo. Si su entrevistador le da un problema para resolver en Java, está bien dar una solución en C ++, siempre y cuando tenga la lógica correcta. Pero NO ES ACEPTABLE si muestra en su currículum que conoce Java y no responde en Java. A menos que haya trabajado en un lenguaje de programación, no lo incluya en su currículum.

Elige tu primer idioma / lengua materna y domínalo

Si eres un principiante, elige un lenguaje de programación y comienza con él. Olvida todos los otros lenguajes de programación y domina este. Le sugiero que elija un lenguaje orientado a objetos como C ++ o Java. Aprende todos los conceptos del lenguaje. Y practica MUCHO. Cuando aprendas nuevos conceptos, no lo dejes como una teoría. Para poder comprender completamente los conceptos de programación, necesitas practicar. Busca ejemplos de internet que demuestren los conceptos.

Usa internet más que tu libro de texto

Usa tu libro de texto para aprender tus conceptos. Busca en internet ejemplos y su aplicación en el mundo real. Confía en mí, esto te ayudará a recordar los conceptos mucho mejor. Y hará que el aprendizaje sea más interesante.

Elaborar algoritmos a mano.

Una vez que se familiarice con un lenguaje de programación, necesitará aprender algoritmos para resolver problemas complicados. Los algoritmos no tienen nada que ver con ningún lenguaje de programación en particular. Pero necesitas un lenguaje de programación para poner un algoritmo en uso práctico.

NO intente memorizar algoritmos. Conozco a mucha gente que hace eso, y no es útil. Los olvidarás muy rápidamente. Cuando lea / aprenda sobre un algoritmo, intente resolverlo en papel. Tome un ejemplo y ejecute el algoritmo, paso a paso. Lleve consigo un papel y un bolígrafo e intente elaborar diferentes conjuntos de ejemplos a mano (como lo haría con un problema de matemáticas), hasta que comprenda completamente la lógica detrás del algoritmo.

Implementar algoritmos.

Ahora que ha entendido el algoritmo, escríbalo en el idioma que ha dominado. Esta parte debería ser realmente fácil. Si luchas aquí, o no has dominado el idioma o no has entendido completamente el algoritmo. Vuelve, aprende bien antes de hacer ajustes aleatorios a tu código en un intento desesperado de solucionarlo.

¡Ejecute su programa, vea los resultados y siéntase orgulloso! Ahora sabrá exactamente cómo funciona su código y la lógica detrás de él. Y no olvidarás durante mucho tiempo.

Aprender mas idiomas

Ahora le resultará extremadamente fácil aprender nuevos idiomas. Pero primero debes saber por qué quieres aprender este idioma. Conozca la singularidad del idioma y por qué se prefiere a otros idiomas y en qué tipo de aplicaciones se usa este idioma.

Es posible que desee leer En términos sencillos, ¿cuáles son los principales lenguajes de programación y para qué se utilizan?

Está bien olvidar la sintaxis.

Yo diría que está bien olvidar la sintaxis a veces. No te castigues por ello. Le pasa a los mejores programadores. Y siempre hay google para ayudarte, cuando te olvidas. Poco a poco irás recogiendo la sintaxis, con más práctica.

Sí, es muy natural seguir olvidando la sintaxis, los nombres y los argumentos de las funciones de la biblioteca, las opciones de la línea de comandos y todas las demás cosas cuando no se utiliza de forma regular. Programé en C ++ durante más de 12 años y, aunque recuerdo todos los conceptos con mucha claridad, las cosas progresarán más lentamente si comienzo a codificarlas ahora. La buena noticia es que empiezas a recordar cosas muy rápidamente, y de alguna manera, al menos para mí, una cosa hace que otra se mueva mientras tu cerebro regresa lentamente a un contexto que una vez fue olvidado. Algunas cosas, como DOS INT 21h, se quedan por décadas.

Los algoritmos y, como usted dice, el enfoque general de un problema son un poco diferentes. La comprensión y la comprensión son las que mejor lo mantienen en la memoria. Es mucho más difícil olvidar la solución si sabes cómo diseñarla tú mismo basándose en la lógica, no en el conocimiento. Busque una comprensión más profunda, similitudes y diferencias con las soluciones a otros problemas, conceptos y principios fundamentales (como dividir y conquistar o programación dinámica), y hará las cosas mucho más difíciles de olvidar.

Y por supuesto, nada mejor que la práctica. Cuanta más experiencia tenga utilizando un algoritmo u operando una estructura de datos, mejor los recordará y los entenderá. Como solución final, si aún tiene dificultades para recordar algo, intente implementarlo desde cero, por ejemplo, binary heap, quicksort, el algoritmo de Dijkstra, etc. En realidad, no hay más información sobre cómo funcionan los algoritmos y las estructuras de datos que implementarlos y depurarlos. Una vez que alcances una comprensión profunda, nunca lo olvidarás.

Todos pierden el acceso a las habilidades aprendidas cuando no se usan. La tasa y la cantidad de acceso perdido varía ampliamente entre los individuos.

No perdemos la memoria, perdemos la conexión con ella. Cuanto más significativo es el uso del conocimiento, más duradera es la conexión. Cuando vuelve a aprender algo, aprende a una velocidad muy acelerada porque restablecer una conexión revitaliza las conexiones con el conocimiento relacionado.

Hacer revisiones ocasionales (mensuales) de áreas de conocimiento mantendrá las conexiones activas. Esto puede hacerse por estudio o, más comúnmente, leyendo sobre el tema. No he visto estudios, pero sospecho que los programadores que conservan una amplia gama de habilidades también son ávidos lectores.

Muy cierto y estoy experimentando lo mismo. Así que también estoy intentando un par de enfoques.

Basado en los siguientes pensamientos.

  1. Recordar los algoritmos no es importante, pero crear algoritmos para un problema en particular es definitivamente importante. (Lo mismo que entender la prueba es relativamente más fácil que probarlo por sí mismo)
  2. Cuanto más experimente A, más fácil podrá llegar a A. Pero B podría olvidarse.
  3. El cerebro puede recordar mejor cuando tienes diferentes experiencias sobre un mismo tema.
  4. No nos gusta nada si no sabemos mucho al respecto.

Algunas estrategias que estoy intentando

  • Conceptos básicos como paradigmas de programación, formulaciones de pensamiento algorítmico con estructura de datos, etc. están en todas partes en el mundo de TI. Bucear en profundidad en ellos vale la pena en toda mi carrera.
  • Conocer múltiples frameworks e idiomas requiere mucho tiempo. Centrémonos en menos de dos o tres para aumentar las posibilidades de experimentarlos.
  • Aplique el pensamiento algorítmico en los problemas de la vida para aumentar las conexiones entre la teoría y la realidad en el cerebro. Por lo tanto, la memoria dura más tiempo.
  • Estoy tratando de aprender matemáticas otra vez.

Espero que encuentres el tuyo.

Sinceramente, creo que tengo la respuesta aquí, en la forma de la herramienta perfecta absoluta que hace EXACTAMENTE lo que usted ha pedido.

Primero solo quiero responder a algunos puntos planteados por otros.

(1) No es necesario memorizar la sintaxis. Lo siento, pero esto simplemente no es cierto. NECESITAS memorizar la mayor sintaxis posible. Comience con los conceptos básicos del idioma, luego la sintaxis avanzada, luego las llamadas API comunes y sus parámetros.

He estado contratando por 15 años y he estado en cientos de entrevistas. Algunos no solicitan datos, pero la gran mayoría le dará una prueba escrita que cubre el idioma pieza por pieza, o una prueba escrita con preguntas difíciles que requieren que conozca toda la sintaxis, o un ejercicio práctico de programación con un límite de tiempo. eso simplemente no permite buscar en Google: los necesita al alcance de su mano.

Esa es la realidad. Además, están las compañías de detección, más comúnmente IKM o Brainbench para personas con C ++. Las pruebas IKM cubren una gran cantidad de sintaxis, incluyendo (sí, esto es cierto) sintaxis en desuso (como redeclerations, el precursor de usar [public A :: A])

(2) Olvidando las cosas. No creo que mucha gente pueda retener la totalidad de C ++, Java, XML, XPath, comandos UNIX, makefiles, bash, perl, python y .NET en un buen nivel durante mucho tiempo. Además, nadie, en el trabajo cotidiano, utilizará todas las partes de un idioma. Algunas compañías aman las transmisiones, algunas odian a STL, algunas aumentan el amor, otras aún usan RogueWave. Mi punto es que ningún trabajo lo mantendrá alerta, por lo que se necesita algo más para mantener su conocimiento.

Ahora la solución …

Parece que lo que se necesita es una aplicación, un libro, un conjunto de tarjetas de índice u otro mecanismo que (a) contenga todas las áreas de, digamos, sintaxis de C ++, a un nivel alto

(b) sabe de alguna manera cuáles son sus puntos débiles y cuáles son sus puntos fuertes

(c) sabe lo que necesita saber, a qué nivel y cuándo necesita saberlo

(por ejemplo: C ++ a un nivel alto en 5 días para una entrevista de trabajo) o (C ++ a un nivel alto, sin fecha límite, solo porque quiero mantenerme alerta)

Hay un sitio web que hace exactamente eso …

(a) iniciar sesión (gratis)

(b) haga un plan de revisión (desde una plantilla o desde cero), seleccionando los temas que desee conocer. Tiene todas las áreas de C ++ en algo así como 60 temas. Selecciona lo que necesites.

(c) tome una prueba, una prueba corta, idealmente de unos 15 minutos de duración; el sistema controlará su puntaje y lo registrará. La próxima prueba que tome tendrá temas elegidos automáticamente en función de sus puntuaciones anteriores.

Cada tema pierde un 0.5% de su puntaje todos los días hasta que el tema se renueve.

Si responde a una pregunta correctamente un cierto número de veces, ya no se le hará más (pero se hará solo una vez en unos pocos meses).

(d) después de la prueba, puede ver su progreso. C ++ contiene aproximadamente 310 preguntas para cubrir todo el lenguaje (inc. STL, llamadas a bibliotecas, patrones de diseño, estructuras de datos, preguntas de truco, etc., etc.). Sigue usando el sitio por poco tiempo siempre que puedas. Recorrerá todos los idiomas que desee saber y le indicará a qué nivel se encuentra su conocimiento.

Si tiene una entrevista, verá una proyección de dónde estará su conocimiento en el momento de la entrevista si continúa con su patrón de uso actual.

Eso es. Construí el sitio porque tenía el mismo problema que tú, y cada vez que recibía una entrevista me encontraba haciendo los mismos trozos de papel para revisar, perdiendo el tiempo. Esta respuesta es un tapón descarado, pero también es una respuesta directa, y una herramienta que hace exactamente lo que has pedido, así que creo que estoy permitido.

CuDeeB – tú, pero más aguda …

Nota adicional: si tiene tiempo, no hay sustituto para la programación REAL. La memorización es importante, pero la práctica es al menos tan importante. Utilice CuDeeB para revisión y memorización, luego C ++ FAQ, C ++ Reference, pruebas IKM, ejercicios de programación, etc. para las prácticas.

Espero que esto ayude.

(escrito por Chris Brockwell, no James Mitchell)

He sido programador durante un par de décadas y he conocido cientos de lenguajes de programación y muchos muchos trucos. Cuando codifico, guardo el manual para el idioma que estoy usando y guardo notas sobre los trucos que descubro. Incluso como experto, no vas a recordar todo y las cosas cambian rápidamente, por lo que lo que sabías ayer podría no ser válido hoy.

En su lugar, enfócate en entender lo que está sucediendo detrás de las escenas. Ayuda a comprender cómo funciona la computadora, cómo funciona la red, cómo funciona el sistema operativo, cómo funciona el compilador, etc. Todos los mejores trucos se producen al saber cómo se mueven los datos a través de la computadora y aprovechar las características no deseadas. Recogerá el zen de la programación al centrarse en los casos extremos en los que no está seguro de cuál es la mejor manera y al intentar cualquier forma posible de hacerlo, puede pensar y comparar los resultados. Y no solo crea lo que buscas en Google o lo que dijo un profesor, porque a menudo están equivocados.

Sí, es natural, y no es un problema en absoluto. He estado programando C ++ durante 23 años (incluyendo proyectos importantes como el núcleo de Skype), tuve una brecha de Python durante un año, y al comenzar una nueva cosa de C ++, tuve que buscar la sintaxis de C ++ “if-then-else”. Luego, 6 meses después, tuvo que escribir un script de Python, y había olvidado la sintaxis de bucle “for” en Python. Después de buscar algunas de estas cosas básicas, fui inmediatamente tan productivo como antes.

Estoy seguro de que en una entrevista de trabajo, parece extraño.

El primer idioma que aprendí fue Algol a principios de los 70, por lo que mi principal problema es recordar cuántos idiomas diferentes aprendí a lo largo de los años.

En cuanto a ‘lo que es natural para un buen programador’; Esa es una buena pregunta que voy a hacer si alguna vez me encuentro con uno.

Como otros lo han señalado, no se concentre en aprender muchos idiomas, solo use uno e intente y haga que las aplicaciones del mundo real se concentren en la calidad de los algoritmos y las estructuras de datos.

La sintaxis y las bibliotecas particulares de una plataforma en particular se vuelven irrelevantes en la programación profesional, en unas pocas semanas recordará todo lo que usa regularmente.

La gente que te prueba para trabajos lo sabe. Entonces, si te piden un ejemplo en un idioma que no conoces, díselo. Si son un empleador serio, estarán más que felices de ver su solución en cualquier idioma, saben que si sus métodos y enfoque son correctos, pronto estará al día en cualquier idioma.

Bien. Simplemente no puedes rendirte.

no. Todos los programadores son máquinas secretas con una cantidad excesiva de memoria.

Sea cual sea el país del que soy, temo por su sistema de educación.