On of the key factors that decide if a student will be able to 'learn' a language, i.e. communicate with natives in the given language fluently, is their willingness to change their mind. And I don't mean change a decision.
I mean, change the way they think. Change the way they approach situations and interactions.
Every language has a different way to see the world. To experience live. It's a different culture and making that culture your own, really adapt to it, is a very deep and personal journey.
This observation was not made be me, originally. I heard it articulated by Gabriel Wyner and my own experience of teaching hundreds of students from all different kinds of backgrounds agrees with it.
After teaching German as a foreign language for 7 years fulltime, I transitioned into software development and, after a self-teaching period of ~8 month, have been employed as a front-end developer for the last 14 month.
Looking back, I notice how my mindset changed in the transitioning time. I changed the way I thought about things and I adopted to the culture of software development.
Not only that, I took the necessary step of making it my own. Now I can say, I am a software developer.
That is not to say, that I stopped learning. Far from it. The more I learn, the more I realize how little I know. But I am able to articulate my own ideas. Express my thoughts in code.
That is what will make you fluent in anything. Absorb it and then, make it your own.