1) You learn from making mistakes. Do NOT try to avoid them while learning, even if they hurt sometimes (when you wasted months trying to implement something, just to find out you were on the wrong track all along and have to redo it)... they will ALL teach you important lessons way better than the best experts on the field can (In case of the wasted months, not to waste so much time on something you don't even know will work for you use case).
Of course not learning from other peoples mistakes will not serve you well, if you have to make all these mistakes all over again. All I am saying is to not worry too much if you do make mistakes along the way. A Mistake you made is only time wasted if you don't learn from it. And share it with the world, be "proud of your mistakes"... many people might thank you for it, because that is one mistake they can scratch off their list.
2) Best learning path by far is: practice, practice, practice. Just start somewhere, and keeping working on games, prototypes and subsystems. Don't worry too much about "wasting time" and stuff like that... programming takes many years to master alone, with the additional things involved in game development, that time only increases.
3) Be ready to invest A LOT of time. Years. Many. And then some more. If this is not a labour of love for you, you should look elsewhere.
One best practice that gets named often for beginners is to start small and work your way up. Basically working your way through the history of video games, start with a pong clone or text adventure, move to pac-man and snake, and so on.
What a lot of people would call bad practice is to jump directly to 3D development with a modern high end engine and try to create a AAA level game. That will certainly lead to dissapointment as the scope is just way too large.