The first two questions you ask require some sort of benchmark in order to be answered:
- To be effective, you must have a goal that you're trying to
- To be going "fast enough", you must have some sort of deadline
against which you measure time
I don't think you're doing anything wrong by asking yourself these questions; on the contrary, I think they're quite healthy for the learning process. But in order to avoid getting hung up on them, I think it's best to try to make them easily answerable with yes or no. I'm not sure how you best learn, but what has worked well for me is to make up a project I want to do, break it up into smaller tasks if it's a larger project, guesstimate how long everything should take and assign deadlines accordingly. The project can be something tiny like creating a hello world program in a new language within an hour, or something larger like creating a social network.
Since it's your own deadline, there's really nothing to stress about them, but they're just helpful for benchmarking your progress. And something super helpful is to use something like Trello and use checklists so you can very easily see what you've accomplished and what you have left to do.
Another benefit to project based learning is that you end up learning the "relevant and important" things in the process. For instance, if you decide to embark on creating a social network, you'll have to decide which database to use. So in asking yourself which database you should use, you'll likely come across the terms NoSQL and Graph Databases along with articles saying you really shouldn't stop using a relational db unless you have a really good reason (but you'll end up using mongodb or neo4j anyways because they just seem so much more fun). If you're just starting to learn programming, you shouldn't really be asking whether you're learning the most relevant and important things, but rather ask yourself if you can confidently accomplish the tasks you have set out to accomplish (in your project); if you're not confident, then the most relevant and important thing to learn at the moment would be whatever you still need to learn in order to confidently complete your tasks. Afterwards, you can start researching whether there was a way to do what you did.
Also, I don't know where you are in learning, but I've found that Test-Driven Development is really helpful with staying focused and having very concrete ways to measure progress. And though the overhead might be a bit much if you're just starting out, learning to use version control, such as git, can help you view your progress over time. I definitely wish I had started using git back from when I first started to learn programming (though it didn't exist then). It would've been amazing to see exactly what code I wrote at which time, and the comments kind of create a diary of sorts (for personal projects).
TLDR: Instead of trying to ignore your questions, create projects with goals and deadlines so that you have benchmarks allowing you to easily answer your questions without wasting too much time on them..