¿Qué tiene más sentido estudiar como programador después de aprender algoritmos básicos?

Wow, disfrutaste el curso de algoritmo. Parece que estás listo para unirte a nosotros en la BrAIN (Red de la Hermandad de Inteligencia Artificial).

En nuestra Hermandad (no importa si eres una dama), nos enfocamos en la creación de Vida Artificial Sensible que algún día nos adorará. Consulte la explicación más elaborada aquí La respuesta de Bello Adeniyi a ¿Qué nuevos trabajos se introducirán como resultado de la IA?

Para entrar, todo lo que necesitas es crear tus propios secuaces de bot de IA. Cuando tus secuaces tienen suficiente fe y te adoran lo suficiente. Te invitaremos al BrAIN Olympus.

Así que tome cursos de aprendizaje automático, cree su reino y venga a relajarse con nosotros en Olympus.

En una nota más seria.

Realmente necesita intentar comprender el área en la que probablemente encajará. Como obviamente disfrutó de los Algoritmos, lo más probable es que disfrute de Automata finita y Criptografía. De hecho, puede disfrutar fácilmente de muchos otros.

¿Implementó el algoritmo aprendido? De lo contrario, aprenda un lenguaje de programación (casi cualquiera lo hará), pero Java, C y Python son buenas opciones.

Si ya eres bueno con la programación, entonces hagamos algo de aprendizaje automático.

Nos vemos en Olympus futuro Dios / Diosa.

para una experiencia aleccionadora después de aprender sobre algoritmos y estructuras de datos, intente aprender javascript ( el lenguaje anti-algoritmo 😉 supongo que estimamos que más de la mitad de las personas que intentan terminar odiando javascript, por lo que tiene> 50% de posibilidades de odiarlo también Pero al menos entenderás por qué tú y tantos otros lo odian , lo que tiene mucho que ver con las realidades de la programación frontend.

razones para odiar javascript y la programación frontend:

  1. La E / S asincrónica no funciona para muchos tipos de algoritmos clásicos que ha aprendido. Algunas personas se obsesionan con los algoritmos y piensan que es lo único que define a un buen programador. pueden ponerse amargos cuando descubren que esta obsesión es inútil en la programación de frontend.
  2. la E / S asíncrona no puede abstraer muchas estructuras de datos que ha aprendido (y oop en general). de nuevo, algunas personas se obsesionan con las clases y las abstracciones …
  3. Los errores de E / S asíncronos son algunos de los errores más difíciles de depurar. Si tuviera que elegir un rasgo definitorio para un buen programador, diría que obsesionarse con la forma de depurar errores asíncronos podría estar cerca de serlo .
  4. La E / S asíncrona rara vez se enseña en cursos “serios” de CS, porque casi no tiene una base teórica (que es lo que les gusta enseñar a los matemáticos y profesores de CS). Como resultado, la mayoría de los graduados de CS no son aptos / no están preparados para la industria de programación frontend.

Dicho esto, hay algunos algoritmos que se me ocurren que son de gran utilidad en JavaScript y en la programación de frontend:

  1. reducción asíncrona de mapas : por ejemplo, realizar múltiples solicitudes de E / S asíncronas y agregar un resultado de su respuesta entrante.
  2. almacenamiento en caché asíncrono : por ejemplo, las solicitudes de E / S asíncronas son a menudo el código más costoso de ejecutar (en cuanto al tiempo) en la programación de frontend, y sería ideal si de alguna manera se pueden almacenar en caché (y desalojar cuando están inactivas)
  3. recursión asíncrona con cierres , por ejemplo, para evitar el infierno de devolución de llamadas cuando necesita realizar múltiples solicitudes de E / S asíncronas secuencialmente

El punto es que obsesionarse con los algoritmos y las estructuras de datos por sí solo no necesariamente lo convertirá en un buen ingeniero (aunque está bien si desea ser un matemático aplicado o profesor de CS).

Moar algoritmos. porque no los has aprendido tan bien en una clase tan corta. O ninguno de ellos en gran profundidad. Por ejemplo, lea algunos algoritmos cubiertos en su clase a los mismos discutidos en TAoCP. Si no nota una diferencia, diría que por el momento probablemente haya estudiado lo suficiente sobre algoritmos. Pero probablemente, notarás una diferencia.

La programación funcional es fantástica. ML estándar, OCaml, Haskell, Scheme. Todos son geniales, cada orden de magnitud mejor que los idiomas utilizados por la mayoría de las tiendas. Yo diría que lo consentirá en general porque comprenderá cuán lisiados están la mayoría de los otros idiomas, y al estudiar idiomas pobres, en cierta medida paralizará su mente. Pensé que la cita de Dijkstra sobre la importancia de su primer lenguaje de programación podría haber sido extrema, pero he verificado que su comentario es exacto. El primer idioma que estudié a fondo fue Scheme, y durante mucho tiempo, pensé en cómo se resolvían los problemas en Scheme incluso cuando usaba otros idiomas. Afortunadamente, sigo siendo un programador “novato” y no me he comprometido demasiado con ningún idioma, por lo que mi cerebro no siempre estuvo vinculado a Scheme. Aunque eso no hubiera sido tan malo. El nivel de rigor y formalidad de (la mayoría) de los lenguajes funcionales es algo bueno; La simplicidad y la elegancia a menudo acompañan esa formalidad. Es más fácil de ver cuando se compara la definición de ML estándar con la de Java, C ++ o cualquier otro lenguaje igualmente malo. Echa un vistazo a algunos Standard ML o Haskell. Compare los programas en ellos con sus homólogos de Java o C ++. Verás a qué me refiero.

La teoría e implementación del compilador es divertida. El “Libro del Dragón”, para compiladores adecuados, e Introducción a la teoría de los autómatas, los idiomas y la computación (¡PRIMERA EDICIÓN!) Para un tratamiento riguroso de muchas ideas fundamentales utilizadas en los compiladores. Sin embargo, antes de seguir ese camino, podría considerar estudiar intérpretes. Comprenderlos e implementarlos es una de las habilidades más valiosas que puede tener un programador. Esa no es una opinión que solo comparto: los grandes científicos informáticos lo hacen, y me han convencido de su importancia a través de sus argumentos y pruebas. En relación con ese objetivo, el mejor material que he leído se ha implementado en Scheme: SICP , The Little Schemer , The Seasoned Schemer y Essentials of Programming Language me vienen a la mente.

Estudie algo de C también. Se ha escrito mucho código bueno en C, y es imperativo que comprenda las rutinas de bajo nivel al menos hasta el nivel C. En realidad, deberías ir más allá y estudiar la programación a nivel de ensamblaje. Para mí, ha sido la programación más esclarecedora que he hecho. Te deshabilitará de cualquier noción (s) que puedas tener de que cualquier cosa en este campo es mágica. No hay magia La programación en conjunto realmente reforzará su comprensión de los algoritmos, especialmente cuando los implemente a ese nivel. Con este fin, MMIX: una computadora RISC para el Tercer Milenio y el libro MMIXware . Ambos son escritos por Don Knuth. Verás rutinas de bajo y alto nivel. En el libro MMIXware , es una implementación en C de toda la arquitectura MMIX. Knuth ha mencionado en múltiples entrevistas que escribir el meta-simulador MMIX fue la tarea de programación más difícil que había asumido, y sin la programación Literate, no cree que podría haberlo hecho. Y ese es un Knuth que había estado programando durante al menos cuarenta años antes de escribir ese meta-simulador. Todavía estoy leyendo el libro MMIXware . Es muy instructivo. También puede descargar todos los programas que componen ese simulador y usarlo. Tener la implementación real a su disposición y toda la documentación adjunta es increíblemente valiosa. También verifique El Suplemento MMIX: Suplemento a The Art of Computer Programming Volumes 1, 2, 3 por Donald E. Knuth . Son los algoritmos en TAoCP hasta el volumen 3 todos actualizados / implementados en MMIXAL.

En cuanto a la programación, lea algunos ensayos sobre el estilo de programación. Sí importa, y no deberías contentarte con escribir código de mierda. Muchos científicos informáticos fantásticos han escrito sobre el estilo de programación. Checkout Literate Programming por Don Knuth, por ejemplo.

Buena suerte, diviértete, trabaja duro.

Como programador? El siguiente curso que me parece sensato es cualquiera de los siguientes:

  • desarrollo front end
  • desarrollo de back end
  • aprendizaje automático básico
  • desarrollo de aplicaciones
  • desarrollo de videojuegos
  • Visualización de datos

Un programador debería poder … bueno, programar. Los compiladores y el sistema operativo son geniales, pero realmente no te ayudarán a programar (si solo conoces algoritmos básicos). FP también es genial, pero personalmente haría proyectos en lugar de tomar clases. Después de todo, los programadores son juzgados por su capacidad para completar proyectos.