I currently teach high school math and science, but I'm looking to switch over to CS in the next year or so, still at the high school level. If I make the switch, I'm going into a school that has no meaningful programming classes. I am currently outlining a four-year plan to build a good high school CS program, that would set students up well for jumping into a competitive CS undergrad. I'd love feedback from people in this thread, about how well this would set people up for their undergrad work:<p>--- Year 1 ---<p>[few students in the entire school program at all] Offer multiple sections of an Intro to Python class. Focus on Python, because people can start to do meaningful projects in a relatively short period of time, while still learning meaningful fundamentals. Focus on intro classes, to build a broad base of overall programming competence in the school. Focus on games, visualizations, maybe delve into some robotics.<p>Also offer some web-focused classes, focusing on basic html and css, getting into Bootstrap and Wordpress as well.<p>Support other topics such as 3d modeling, graphic design, etc.<p>--- Year 2 ---<p>Offer an intermediate Python class for students who have taken the Intro class, and who have continued to build their own projects. Expand projects to include web apps, focusing on full frameworks such as Django and more modular frameworks such as Flask.<p>Start to offer other languages. C for students who want to understand how things work at a lower level. Go for students who want to work in a newer language? Maybe Java for students who want exposure to a statically-typed language, without dropping all the way to C?<p>Start to bring students to a conference or two, probably starting with PyCon. I took one student to PyCon last year, and it was a great experience for him, and continues to be a guiding experience in his life.<p>--- Year 3 ---<p>Offer an advanced Python class. Refine the C/ Go/ Java offerings. Focus on helping students build portfolios of finished projects.<p>Offer a class focused on databases? Support students in learning Rails? Maybe refine an independent learning class, where students who have learned Python develop a plan for learning a second language or building a specific project. Focus on teaching students to use the appropriate support channels such as StackOverflow, IRC, mailing list archives, etc, more than teaching directly.<p>--- Year 4 ---<p>Have a clearly articulated set of pathways for students who just want some exposure to programming, for students who want to build specific projects, and for students who know they want to go fully into CS. Work closely with teachers in the math and science departments, letting students do CS projects that focus on a content area in another class.<p>---<p>I could write an essay on this, so I'll stop there. Many of you are now professional programmers. If you could influence a nascent high school CS program, is there anything in here you would want emphasized, or want to steer me away from?<p>[edited slightly for formatting]