In general terms, fluency could be pared down to, being able to think in the language. Any language will have its nuances, which is why translation is so hard, and even using supercomputers there are still misinterpretations.
If one can write like Flaubert or Voltaire, in French, it would be proof of their thinking in the that language, and are fluent in it. Writing like they think, in any language would also be proof of fluency. It’s the thought process that leads up to fluency. We were/are graded for our literacy skills at the level we’re expected to have reached by a certain age. There will always be the small group of learners who exceed that level, whether naturally through reading a lot, or by exercise working on endless writing assignments.
A young person’s diary soon turns to a journal if one is inclined to write everyday. Through introspection and retrospection and interpolation they tend to see their emotional side better than the average person. That’s another language altogether, but channeled through thinking.
Chess is another language with very simple syntax and playing rules but more moves possible than all the stars in the universe. When does one consider themselves fluent at chess? Tough question. There are so many exceptional players in the world though I would be surprised if any one of them would describe themselves as good chess players.
In coding we gain fluency through our ideation of code. We create code from scratch knowing the outcome we plan for, and then try like the devil to break it. Doing this helps us learn about failure points and edge cases, given the limitations of the language, or the code, or both. This takes thinking, not just doing. How many patterns do we recognize by only looking at them? It’s no different in this respect than Maths and Physics, the former being the language of the latter.
On a more personal note, I was probably more fluent at coding on a Timex Sinclair or any of the range of 8-bit computers of the 80s than I am today. Then it was a hunger that drove me to really think about things. Without the benefit of High School Maths, I was still writing code that could do integration and all manner of low level logic without really knowing what I’d stumbled upon. Today, with all my acquired skills, one can honestly say that that person was way over my head. I have spent years being a learner, and more than likely sacrificed my fluency.
Challenges invite us to discover for ourselves what is still out there to be learned, around a particular type of problem. The study of strings could be a rote description of every available method, but it will lack in the ability to expose every type of problem. You could know little else about coding for other data structures and still be an expert if you knew everything there was to know about strings, or character data in general. The same as a designer with CSS in their kit can produce spectacular layouts without a hint of HTML or programming. It all comes down to thinking in that language.
For me, the language of beginners is the fluency I have sought this past decade or more. To be painfully honest, it’s still a work in progress.
At this juncture in our learning path, it is more important to have fun than it is to reach for fluency any time soon. That will come in measure with effort and interest. When we play a sport, we think in the language of the sport. Ask any hockey, basketball, football, soccer, etc. player and they will tell you the same thing. They think in the language of their sport, and have tonnes of fun doing it, despite the hard drills and training.
Saying one is fluent goes profoundly against our human weaknesses. The moment we put our finger on something and exclaim, “I’ve got it” we’ll see that we haven’t put our finger on anything. Better to work toward something than to’ve arrived. It’s all down hill from there.