You keep practicing, and when you feel like you mastered the language enough, if you want to, you learn another language. I learned Python then started learning Rust. Now I don’t want to go back because I feel like I’m more productive with Rust.
Just build stuff. The best way to learn is to work through a project you care about.
I don’t recommend random online exercises, actually build something interesting. Maybe that’s a website, game, or CLI tool. Whatever it is, build it, and once it’s working, refactor it to be better or move on to another project.
Learn how to test (which is also what the article recommends).
Write unit tests. Write property-based tests. I don’t care which ones, but automate the SHIT out of your tests.
Also curse at your school for not teaching you this from day one.
Alas, I don’t know any articles or books on how to learn, because school didn’t teach me either. I learned the theory from Uncle Bob, among some others, but had to learn the actual work from work…
Read other people’s code… particularly code by experienced developers. One good way to do that is to single-step debugging through the test code in a well-known package, stepping into the code being tested.
I suppose if you don’t know how test frameworks like pytest work, tackling how they work and how to do single-stepping with some toy example code will be a prerequisite for the above, as will spending some time studying how packages are made. (The latter may seem unattractively tedious, but the knowledge will pay off even if you never become an expert at making your own packages.)
These exercises are very likely to expose weaknesses in your understanding of all sorts of things. Be patient and keep studying!