These courses are for beginners, but I started with what I learned from a few courses in Coursera and turned it into a career as a software engineer. https://www.coursera.org/learn/learn-to-program and https://www.coursera.org/learn/program-code from Jennifer Campbell and Paul Gries from the University of Toronto laid a great foundation to build on. I think I took them the first time they offered it and I still don't understand how they completely nailed a new medium like that first try. It was very accessible, but with enough detail to make sense and the videos were so clear and concise.
The Python one from Rice University, is a fun, awesome course, where you build games to learn. https://www.coursera.org/learn/interactive-python-1
I extracted everything I could from those courses, which served as a basic comp sci foundation, saw that I was pretty good at it, took a few more not-as-important courses, then applied to a challenging coding bootcamp. I passed the coding tests, got in, worked and learned the hardest I have ever done so before for a few months, and continued studying on my own for a couple months. Then I applied for a job that required a practical coding test, knew someone at the company so they would at least give me a chance, and crushed the coding challenge. I was almost optimally prepared for the job and hit the ground running, while having no official credentials. It's been great since then. The only drawback is that I don't have the broad depth of knowledge/experience that I imagine can come from a CS degree. So I am planning on getting a masters.