i have no formal experience in teaching, but given my own experience i'd have to say that having a technical mentor who is close to you is the single most important factor. important enough that it could probably stand alone (with the proper ambition of course).
i'd like to see some sort of matching service that helps match potential programmers with mentors, based on common interest. the "student" gets to learn in a context relevant to their interests, and the mentor gets an extra hand on their project.