I never would have called myself an Ivy League candidate, so I was a little surprised that I decided to give Harvard's CS50 - Introduction to Computer Science a try as my first foray into coding.
Harvard offers this course free through edx.org (there are paid options, but at its base it's free), so, I figured that if I failed miserably then it would only be a loss of my time; but, if I succeeded I could then say I had passed a class at Harvard. Talk about a confidence boost!
Every fall this introduction to computer science course is taught on Harvard's campus, and in the process, they record the lessons and publish them later in the year on edx.org. They do an excellent job! The online course is very robust to include recordings of the lectures, additional resources and videos which break down the concepts in more detail, and assignments to apply what you learned.
In the end, taking the CS50 course was probably one of the best decisions I made in my journey. Professor Malan does a great job of teaching the fundamentals of computer science. He breaks down the concepts and then builds them up using visual representations and examples that stick with you.
While I will describe the basic flow of the course from when I took it, which was in 2015-2016, this course is dynamic and with each iteration things tend to change. In fact, I started in the fall of 2015 and as it is self-paced, and I was very busy, I had not completed it by the time the next iteration was released. I was able to save my progress and just move forward, but there were changes (all of which were good).
One of the first assignments in CS50 was to build a program using MIT's Scratch program. This is a program in which you use puzzle-like pieces to put together working code in order to create animations, games, etc... It allows you to play with the logic of computer programming without having to know HOW to code and was a very accessible way to get an overview of the process.
The next set of assignments were done in the coding language C. When I mention this to most programmers they are surprised because C is not used directly as often in the modern coding world. However, Professor Malan does a good job of explaining why he starts with this language:
"C is just about as close to a computer's hardware as you can get before you have assembly language (which would be too arcane, I think, for an introductory course like CS50). In C, there's no magic. If you want something to be somewhere in memory, you have to put it there yourself. If you want a hash table, you have to implement it yourself. The result by term's end, we hope, is that students understand how things work from the bottom up and, better yet, can explain as much. C is also a small language that, by mid-semester, students have seen nearly all of (except for, e.g., unions and function pointers)"... (See the full answer HERE)
From there the course heads into how the concepts and fundamentals apply within some of the higher-level languages. Since I was not taking this class for credit, and it would just be giving more of an overview, I decided to veer from this course and begin to dive in and start learning a specific language.
All in all, I HIGHLY recommend the CS50 course to anyone wanting to get started with computer programming. It will give you an excellent base of understanding to build from.