I've been learning and building software full time (and then some) for three years now. When I started, I thought, "This is not nearly as difficult as a lot of what I learned studying mechanical engineering. A software career will be a shoo-in!" Sure enough, what I grappled with then, in the beginning - primarily text pattern searching and processing - came quickly to me, and I was able to settle in as the tool developer for my team, automating hundreds of hours of work and ensuring better data quality for our analysts.
However, I soon found that the software world extended far beyond text processing, and that the principals of writing good code went beyond writing code that just works. A lot of 2016 was working in one programming language, and really digging into a variety of domains and learning to craft software, not just hack it. When I moved into web development, there were numerous new concepts and techniques that I needed to pick up, and even now, feeling fairly confident in my overall skills as a developer, I am always running into new challenges, all with some kind of learning curve.
One of the biggest things I've found about learning software (and maybe learning in general), is that as I move deeper into the field, new skills don't cease to be challenging, but I get better and better at knowing what key information to look for, and what aspects of the skills I should focus on learning at each stage. In a way, my meta-learning skills - learning how to learn - has been one of my proudest accomplishments in the last three years.
When I studied mechanical engineering, the courseload was challenging, but almost every aspect of the learning was laid out and timed for me. I had to learn software myself. That's not to say there aren't many people I have to thank for my learning along the way, but deciding what to learn next, how to learn it, and where to find the resources has been a recurrent challenge for the last three years. From this experience, I've become leaps and bounds more confident in my ability to teach myself anything, everything.
I think this is one of the greatest arguments for directing your own learning. Not only will you learn whatever it is you set out to learn, but you will also empower yourself by building the skill to learn in the broader sense, and in this way facilitate further learning in future topics. So don't let learning stop in the classroom. Take on a sizeable project, challenge yourself with something new, and see what you can make of it.