Gracias por la invocación. Venía con la intención de recomendar
Code Complete y
Head First Design Patterns, pero ya han sido recomendados
El primero es
El Libro de la programación. El segundo -que no te engañe la portada con aspecto low cost- es muy sencillo y práctico para aprender patrones. Con esos dos tienes bastante material para un tiempo, y cubren muy bien el desarrollo de software en general. Dicho eso, aprender algoritmia y patrones con un nivel bajo de programación, como dices que es tu caso ya que estás empezando, aunque posible (véase: universidades), a mi me parece mejorable.
C# me parece buena alternativa para empezar. Es un lenguaje generalista y además muy bien diseñado. La librería estándar (o mejor dicho, el framework .NET) es amplísima, de buena calidad y muy bien documentada. Si quieres aprender,
por ahora está bien que te centres en C#. Además existen librerías muy interesantes como
SignalR y
ML.NET, para tiempo real y machine learning respectivamente (espero que ahí te haya picado la curiosidad un poco).
Una vez vayas teniendo más control del lenguaje y te sientas más cómodo escribiendo código (para lo cual te recomiendo el enfoque por proyectos, como ya hemos hablado muchas veces en este foro: plantéate cosas que quieras o te gustaría hacer, investiga cómo se pueden hacer y hazlas) (si quieres hablar más de esto simplemente dilo) creo que es el momento en el que puedes investigar sobre los temas que planteas con mayor éxito. ¿Por qué? Porque los patrones (y algoritmos y estructuras de datos) tratan de dar solución a problemas que no son evidentes cuando empiezas.
Dicho eso, mis recomendaciones van a ser un poco "poco ortodoxas":
-
Pro Git, de
Scott Chacon (editorial Apress). Git es un sistema (perdón, es
El Sistema) de control de versiones que utilizarás si te planteas dedicarte profesionalmente al desarrollo. Te recomiendo este libro porque es sencillo de leer, práctico y te enseña cómo utilizar Git para que no tengas que recurrir a gestionar las versiones de tu código con zip/tar como he visto tantas veces.
-
Big Oh cheathseet. Aquí tienes muchísimo condensado en muy poco espacio: análisis de algoritmos, varios algoritmos y varias estructuras de datos, centrados en la ordenación, eso sí. Te recomiendo esto porque te presenta conceptos a partir de los cuales puedes investigar.
-
97 Things Every Software Architect Should Know (enlace al PDF). Te recomiendo este libro porque aunque habla principalmente de arquitectura muchos de los conceptos se aplican a cualquier nivel del desarrollo. Y como desarrollador te verás más a menudo de lo que piensas lidiando con la comunicación, la negociación y varias cuestiones lingüísticas.
-
La catedral y el bazar, de
Eric S. Raymond. Este artículo está sólo tangencialmente relacionado con el desarrollo ya que se centra más en el software libre, pero considero que merece la pena leerlo por dos motivos. Primero, exactamente el mismo que en el caso anterior: tu cliente son personas humanas, y la API de los humanos es la comunicación, la negociación y otros métodos. Y segundo, por un poco de cultura general que te servirá como introducción también al modo de desarrollo que cobra cada vez más relevancia del software libre (o, al menos, del software "público", en el sentido de que está publicado en sitios como GitHub).