5 ms·
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 switc
by japhyr 12y ago
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:
--- Year 1 ---
[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.
Also offer some web-focused classes, focusing on basic html and css, getting into Bootstrap and Wordpress as well.
Support other topics such as 3d modeling, graphic design, etc.
--- Year 2 ---
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.
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?
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.
--- Year 3 ---
Offer an advanced Python class. Refine the C/ Go/ Java offerings. Focus on helping students build portfolios of finished projects.
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.
--- Year 4 ---
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.
---
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?
[edited slightly for formatting]
- bayonetz 12y agoI'm teaching an intro class for 5th-7th graders that already have some experience with Scratch (visual block based programming). I think Processing, especially in its static mode, does a good job at helping make the leap to actual programming (typing in code) without exposing the novice to as many real programming language constructs like Python does. Since it so trivial to get drawing, animation, and interaction going with Processing, I also find it is more fun for the first timer, especially the ones who don't have a natural geek bent. I'd say go with Python for year two, when you know you have the ones that cared enough to return for more.
- fractallyte 12y agoMatthias Felleisen, one of the co-authors of 'How to Design Programs', contends that Racket is a gentler, kinder introduction to computer science and programming for high schoolers (actually, for beginners in general). There's less emphasis on syntax (since Scheme is so minimal), and more on concepts - which cover all the mainstream paradigms. In addition, starting with functional programming demonstrably better complements and reinforces learning in other subjects such as Math. The 'standard' text is HtDP (http://www.htdp.org/); http://www.htdp.org/); it's being used in high schools as well as colleges. A second, revised edition of HtDP is in development (http://www.ccs.neu.edu/home/matthias/HtDP2e/ http://www.ccs.neu.edu/home/matthias/HtDP2e/). There's also 'Picturing Programs', by Stephen Bloch (http://picturingprograms.com/ http://picturingprograms.com/), an alternative to HtDP, perhaps more suitable for high schoolers. (Incidentally, DrRacket is an excellent IDE, with all 'batteries included'!) Conversely, his colleague Shriram Krishnamurthi has carried out extensive research into learning, and is now of the opinion that Racket is actually too minimal syntactically! Hence the development of a new (and rather cool) teaching language called Pyret (http://www.pyret.org/ http://www.pyret.org/). (It's been discussed in thrilling detail on HN in the past.) Lastly, it was found that beginners who started with Scheme actually did better when continuing later to Java than others who began with Java. There are some rather blunt testimonials (from students) that reinforce this point... 'Matthias Felleisen often teaches a programming languages course, and reports that near the end of the semester, students (particularly the stronger ones) ask why they didn't learn Scheme first, before Java. At least one top student disagreed: Make sure you always teach assignment and bad programming first. They must go through hell before they are allowed to program in heaven.' (A lot more here: http://home.adelphi.edu/sbloch/class/pbd/testimonials/ http://home.adelphi.edu/sbloch/class/pbd/testimonials/)