¿Cómo aprendo algoritmos?

Breve historia: recién me gradué de la escuela secundaria, aprendí un poco de python y C ++, no tengo amigos con ningún conocimiento informático útil. De todos los que conocí en mis años escolares, probablemente era el mayor nerd, pero nadie lo sabía. Me considero que tengo una gran cantidad de conocimientos sobre computadoras y tecnología que la persona promedio. Construí / arreglé toneladas de computadoras, y la capacidad de solucionar casi cualquier problema que encontré.

Ahora que la escuela secundaria ha terminado, realmente he estado pensando en mi carrera. Amando, viviendo computadoras durante los últimos 13 años de mi vida, decidí tomar mis habilidades y tratar de aprender progtwigción, por qué no empecé antes, no sé, parece ser un gran error de mi parte …

Investigando un poco, llegué a la conclusión de que Python era el primer lenguaje de progtwigción que debería aprender, ya que era de alto nivel y más fácil de entender que C ++ y Java. También sabía que para ser bueno en lo que hacía, necesitaba saber más de solo 2 o 3 idiomas, lo cual no parecía ser un gran problema, ya que una vez que aprendí cómo funcionaba Python, la syntax cambió principalmente, y el rest vendría naturalmente. Miré un par de videos de YouTube, descargué algunos libros en formato pdf y busqué algunos tutoriales aquí y allá para saber qué hacer.

Habían pasado dos semanas enteras de tratar de entender la syntax, crear pequeños progtwigs que usaban las funciones básicas y entender cómo funcionaba, creo que ya entendí el problema. Se descompone en lo que he estado tratando todo este tiempo (aunque sabía algo) es que, entrada, salida, bucles, funciones y otras cosas derivadas de los datos de almacenamiento y recuperación de 0 y 1, etc. (A MUY BÁSICO IDEA). He podido crear pequeños progtwigs, Hangman, almacenamiento de archivos, conversión de temperatura, deencoding / encoding de cifrado de Caeser, secuencia de Fibonacci y más, que puedo crear y entender cómo funciona cada uno.

Estando 2 semanas en esto, he aprendido mucho. Nada en absoluto comparado con lo que debería estar aprendiendo en los próximos años si me aferro a lo que estoy haciendo. Mientras hago estos progtwigs, no me detendré hasta que haya terminado de hacer un problema de práctica en un libro, lo que es bastante vergonzoso y me llevará un par de horas dependiendo de su complejidad. Absolutamente no dejaré de lado el desafío hasta que esté completo, LO QUE PUEDE SER EXTREMADAMENTE DRENAJE, He intentado la mayoría de los problemas sin hacer trampa y he alcanzado el éxito, lo que me hace sentir extremadamente orgulloso de mí mismo después de completar algo después de mucho ensayo y error.

Después de todo esto, he conocido al demonio, algoritmos que parecen ser clave para un código eficiente. Parece que no puedo entender algunos de los códigos de computadora que las personas usan con números, y algunas veces incluso funciones básicas, he podido entenderlos después de un tiempo, pero sé que hay muchas cosas más complejas por venir. Al considerarme inteligente, las funciones que requieren códigos complejos realmente dañan mi cerebro. NADA EN LA VIDA LLEGUE A MI CEREBRO ……. ni siquiera a las clases de matemáticas en la escuela secundaria, tratar de entender algunas de las cosas que la gente pone ahí me hace sentir como si tuviera una desventaja mental jajaja … aunque sigo avanzando. , cruzando mis dedos que vendrá la comprensión con el tiempo.

Lo siento, si es esto es mucho, solo deseo que alguien tome en cuenta todas estas cosas al responder mi pregunta. Incluso a través de todas estas desventajas, sigo esforzándome y tratando de ser bueno en esto, sé que leer estos tutoriales no me hará ningún bien a menos que pueda ser creativo y hacer los míos, entender los progtwigs de otras personas, así que me lleva a la simple pregunta que podría haber hecho al principio …

¿EN DONDE COMENZO EN EL MUNDO? He estado tratando de descubrir cómo entender algunos de los proyectos de código abierto, cómo puedo trabajar con progtwigdores experimentados para aprender de ellos y ayudarlos, pero no creo que eso sea posible por la forma en que los conocimientos de las personas están lejos. Comparado conmigo, no tengo amigos de los que pueda aprender, alguien puede ayudarme y guiarme en la dirección correcta. Tengo una gran motivación para ser bueno en la encoding, cualquier información sería extremadamente útil.

En primer lugar … creo que deberías darte algo de tiempo. No se deje llevar por muchas cosas a la vez, ya que aprender progtwigción puede ser un proceso largo. Como primer paso, recomendaría estudiar un lenguaje de progtwigción (como usted ya lo hace en python) y aprender los conceptos de progtwigción (oo, recursión, bucles, funciones, variables, etc.) tan bien como pueda.

Como segundo paso, debe intentar responder a la pregunta “¿qué es exactamente lo que quiero hacer con la progtwigción?” y esto es, por supuesto, lo más importante, es realmente diferente cuando haces gráficos, cuando haces aplicaciones DSP y cuando haces desarrollo web. Por lo tanto, aprender algoritmos en general sin tener un objective específico puede ser realmente frustrante a veces.

Así que los elementos más importantes pueden ser la paciencia y la concentración, después de todo Roma no se construyó en un día … buena suerte

¿Dónde empiezo a aprender algoritmos?

Me gusta mucho la Introducción a los Algoritmos de Udi Manber . A diferencia de los libros más populares, digamos Cormen Leiserson y Rivest, el libro de Manber se centra en la resolución creativa de problemas y en el proceso mediante el cual se crean los algoritmos. Entonces, en lugar de leer una enciclopedia de algoritmos que otras personas han inventado y de estar desconcertado sobre de dónde vinieron, aprendes a inventarte algoritmos tú mismo, y en el camino reinventará algunos de los estándares que encontrarás en las enciclopedias. .

Creo que a la larga encontrarás que este tipo de capacidad de resolución de problemas te servirá mucho mejor que un conocimiento enciclopédico de los algoritmos de otras personas.

bien por usted.

¿Has considerado algunos cursos universitarios? usualmente puedes tomar algunas clases de algoritmos allí.

Encuentro que una sólida formación matemática es muy útil, tanto en la resolución de problemas como en las habilidades básicas de manipulación de números. Muchas de las cosas que haces en la progtwigción se basan en fundamentos matemáticos. Los tipos de progtwigs que desees escribir se basarán en los algoritmos que terminarás utilizando o creando.

El trabajo de diseñar un curso de estudio en algoritmos, y las otras cosas que debe saber para ponerlos en práctica, especialmente el que lleva a una carrera en computación, es el trabajo de diseñar el progtwig de estudios de un curso universitario en computación. Ciencia. De hecho, sospecho que algunas universidades ofrecen poco valor, excepto para diseñar el progtwig y evaluar a los estudiantes; los estudiantes hacen casi todo lo demás por sí mismos. Si es posible, su objective debe ser prepararse para participar en un curso de Informática, ya sea a tiempo completo o parcial.

La recomendación de mi libro sería “La práctica de la progtwigción”, de Kernighan y Pike, especialmente si planeas aprender haciendo. No profundiza mucho en los algoritmos, pero en unas pocas páginas debería informarle lo suficiente sobre el diseño y las pruebas para que cuando practique, encuentre, arregle y aprenda de muchos de sus errores y adquiera el hábito de escribir progtwigs. que otras personas pueden mirar sin hacer muecas.

Desde mi experiencia: problemas: lo guiará por el camino que ha elegido y los idiomas le ayudarán a verlo desde diferentes puntos de vista. Si solo usa uno o dos idiomas, podrá continuar, pero se perderá muchas cosas en su camino, lo que puede ayudarlo en el futuro, lo que puede darle algo de diversión, etc.
Y … Hay muchas más cosas que puedes hacer además de la progtwigción. No hagas “Quiero progtwigr” como tu objective principal. Use “Quiero resolver el problema …” y “Quiero usar la progtwigción para hacer …”. (es decir, no hagas que las palabras sean tu objective)
Creo que he elegido este camino porque era lo más fácil de hacer. No hay necesidad de entrenamientos todos los días, no hay necesidad de hacer un trabajo repetitivo, no hay necesidad de estar listo para el viaje al día siguiente, no hay necesidad de preparar un montón de materiales, etc. Por supuesto, más tarde descubrí que algunas de esas cosas pueden existir incluso allí.

En mi enfoque de la progtwigción, creo que la escritura recostackda de Brian Kernighan son los libros más influyentes sobre cómo pensar como un progtwigdor que me he encontrado. En la portada de “La práctica de la progtwigción” están las palabras:

  • Sencillez
  • Claridad
  • Generalidad

que dado su notable interés en Python se lee como la forma corta de PEP 20 . Los algoritmos son un medio para un fin como lo son las recetas en la cocina. Si bien es cierto que no puede hacer pan sin saber sobre el cuidado y la alimentación de la levadura, el objective es saber que quiere pan en primer lugar. A pesar de que los libros de Kernighan pueden parecer obsoletos, sus temas unificadores del artesano hablan con una elegancia que pocos escritores técnicos aspiran a hacer.

Las máquinas se están volviendo tan rápidas que el estudio formal (por ejemplo, Knuth) de los algoritmos puede constituir un mecánico competente, pero esa es la parte fácil. Lo que el aprendiz de hoy debería esforzarse es el arte del campo porque es donde los humanos están realmente en su mejor momento.

Bueno, la mejor solución que se me ocurre es registrarme en sitios como codeguru.com y buscar prácticas o unirse a grupos de progtwigdores en su área. De esa manera, puede adquirir tanto la caducidad como el conocimiento que necesitará en el futuro.

No te daré muchas sugerencias de “hazlo y hazlo”, pero algunas cosas:

  1. Aprendiste Python por ti mismo, felicitaciones, especialmente cuando nadie a tu alrededor está haciendo esto. Así que ya tienes algo de lo que sentirte bien. Sigue aprovechando esas cosas para boost tu base de conocimientos.

  2. Usted dijo que tenía 13 años. Python podría tener libros para satisfacer su nivel de complejidad, pero definitivamente no algoritmos. Los algoritmos son un asunto serio. Hay un buen nivel de matemáticas en y alrededor del dominio de los algoritmos. Y no hay manera de endulzar eso. Además, los libros sobre algoritmos son conocidos en toda la industria como libros difíciles de descifrar. Pregúntale a Bill Gates y Don Knuth.

Así que diría, si quieres aprender computadoras porque te encanta aprender y añorar el conocimiento, entonces sugeriría, por un lado,

Estás en el camino correcto, para ser franco, no espero que un niño de 13 años sepa sobre los algos. Estás explorando Py, tengo planes con C, C ++, diría, ¡genial!

Fortalece tus matemáticas. Hasta que no desee implementar diferentes tipos de algos, y no rascar profundamente, puede hacerlo. Pero los algos no son solo eso. Por lo tanto, si desea controlarlo, debe aprender matemáticas discretas. Las matemáticas discretas no vendrán a usted en 1 mes, 2 meses o incluso 1 año. Esté preparado para esperar y ofertar su tiempo. Mientras tanto, ataca las matemáticas, que están justo al borde de tu competencia.

Lo mismo con los algos. Prepárese para visitar este dominio dos o tres veces en los próximos cinco años. Cada vez que su base de conocimientos existente complementará mejor su búsqueda de algoritmos.

Hasta entonces, Soham