I recently graduated with a degree in Networking and Systems Administration, and I am currently waiting to start a job in that same field. I am a hobbyist programmer, but I enjoy it very much and would like to get more serious about it. What I am struggling with is hard for me to put into words exactly, but I will try.
During school, I took several Java classes and felt they gave me a good foundation on programming in general. Recently, I started learning Ruby and Ruby on Rails because of how different it is from Java and the amount of learning material that is available. I am able to pick up on the syntax pretty well, and most of the basic ideas stick with me. However, when I get to longer, more involved examples that tie together many different concepts and design principles (modules, libraries, nested classes, private methods, etc), I feel I get lost and intimidated. Not to mention when I try to write my on programs, I essentially "freeze" because I have no idea of how to use the more advanced concepts or how to get the most efficient code out of what I know.
Because of my struggles, I start to question my fundamentals/thinking style. Are there books out there that can help me THINK more like a software engineer? Or is it simply repetition and reading different code? Right now, I feel I could go and read every single book on Ruby (or any other language) out there but still be missing some fundamental principles that other, properly trained, developers may have.
Hopefully, I made my problems clear. If not, I can certainly try my best to elaborate. I can only hope that other developers have had similar experiences while learning, and a brief description/recommendation on how they have worked through them would be fantastic.
Thanks!
edit ------
Thanks for the answers, both were helpful. I have been checking out the thread posted below and have found several books that I think will be helpful. I'm also going to try and get some more practical experience.