I am self-taught ..., so I was not taught programming in a "proper" way.
My first advice is stop worrying about "Computer Science" and "proper way". If you have the desire -- you are asking -- and some level of aptitude -- you'll probably know if you do -- and the time to program regularly, you're already more 3/4s of the way there.
Some of the best programmers I've encountered are entirely self-taught, and some (actually most) of the worst had CS degrees. That's not to say that CS courses always produce bad programmers by any stretch of the imagination; just that most self-taught programmers only progress because they have some aptitude, otherwise they fall by the wayside; the same is not true for CS grads who memorise enough stuff to pass exams without ever having acquired any level of intuition or aptitude.
As for the difference between practice and experience; it's all down to whether what you are doing results in something useful. Purely academic practice exercises are rarely complex enough to produce anything useful; so they tend to require the use of well-known algorithms, in isolation, and in a clearly identifiable and straight forward way. The problem comes when trying to recognise the use of those algorithms when they are a small part of a larger project and need to integrate with the other parts of the code base.
The best thing about this place is that it that it provides a ready supply -- less so these days than previously, but so far, still enough to keep me coming back -- of interesting and diverse problems to force you to think about things in different ways. And there are still enough people posting replies to to get several different takes on possible solutions. And if you come up with something, it just might do someone else a good turn too.