I've taken CS50 a while ago and I think it is a phenomenal introduction to CS/programming.<p>Starting off with a toy language, Scratch, to six weeks of C, followed by two full web projects (Python/JS). The instructors find a wonderful balance between theoretical concepts (compilers, binary, Big-O) and practical applications in different domains: a bit of crypto, a project about finance, usage of APIs, ...<p>The course is wonderful in showing what is out there and contrasts with beginner courses that hit people with a year of data structures & algorithms (e.g. MITx's 6.001x - also good but less "real world").<p>Recommending the course is my go to answer for the question "how can I learn to program?"