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.