I always end up searching and reading up "Best books to begin A..B..C..D.." instead of actually making myself begin somewhere. This consumes all my energy and I never really start.
There is no single true path to begin learning something but in the case of programming, I'd suggest start building something fairly challenging as early as possible. You don't have to understand everything about it. Just start and gather the knowledge along the path. We as humans tend to procrastinate because we're afraid of failing. We want to know everything upfront in order to lower the chance of failing but this actually prevents us to get the thing done.
Reading many books about something is great but it doesn't compensate for experience. I found it best to gather some knowledge at first and then trying to apply them to the problem at hand. You may feel intimidated at first, but this helps build the necessary experience. Experience is the key to get something done. Knowledge is then, the key to get it done well.
Use interactive resources. It is a much better learning by doing something. (This is the reason I like Codeschool so much).
Also, a lot of the good books are working with example projects. Simply build these things while you read, do some experiments and eventually expand the project.
Lorefnon
Open Web Enthusiast
After trying various things over the last few years, I now almost entirely ignore video courses, instructor led MooCs, books spanning several hundreds of pages etc.
I mostly focus on things which are directly related to my job (which happens to be closely aligned with my interests) and try to familiarize myself with the stack as deeply as possible.
For instance, if you are a web developer, once you are productive enough your language/framework of choice you can use that as a reference point to expand familiarity with multiple facets of your technology stack - eg. the communication layer (HPBN is an excellent resource), client side performance tuning (Google developer site is an awesome resource), utilities for monitoring and benchmarking the server side aspects, deployment solutions, distributed job queues etc.
Reading official documentation, technical manuals and writing actual code is simply much more time efficient than courses and tutorials (not that they don't serve a purpose) and keeping the learning track aligned with a singular primary role (or a primary prospective job profile) ensures that you keep getting the benefits out of this at a day to day level which (atleast for me) significantly helps in staying motivated.