Learning is incredibly personal, and not all people learn the same way. For example, I'm drawn to clear and absolute instructions, without a lot of room for ideology. I take comfort in manuals. I value tables and diagrams. I learn best by studying clear examples, and pattern matching. Only after I can explain the material to myself and others do I feel comfortable enough to be creative and explore.
I enjoy making strong decisions and completing observable milestones, so listening to engineers debate the merits of recursion is not how I'm going to learn recursion. You may be completely different. You might find my methods stifling and conventional. That's fine.
The point is, there is no one "best" way to learn programming. Just find what you like and stick to it until you're ready to move on. For example, if you find w3schools helpful, use it until it doesn't help you anymore. Don't worry about offending "real" programmers with "newbie" techniques. Everyone has to start somewhere, and if you get caught up caring about whether or not yours is the "best" way, you're going to be spinning in circles.
This is an excellent blog post that chronicles exactly what I mean, applied to a real life example.
And remember, all this is just my opinion.