<p>Having been a TA for introductory computer science for 3 semesters, I’m not going to recommend starting with Java or C++. They have a lot of tricky errors, a steep intro learning curve, and can more easily introduce some poor programming practices if not learned correctly.</p>
<p>My recommendations would be Python (starting with Codecademy and then moving on to using PyGame or doing project Euler), or Racket. Racket isn’t a commonly used language outside of teaching, but it’s great at teaching design principles, and once you know it then it’s relatively easy to translate the knowledge to new languages and keep good habits. You can also program Racket completely within the DrRacket interface with no need to worry about compatibility or different OSes.</p>