Note to Teachers
Part of my intention in creating this site is that you be able to borrow parts of it for your own classes. Unlike many lesson plan websites you will see, this website is being developed alongside a class that I am teaching to two different periods of students at many different levels of familiarity with computers. There will be comments from me and my students on the lesson plans, describing what went well and what did not. You can be reassured immediately that some idea does or does not work well with actual students.
As you must know, most of what you do in class can't be recorded in a lesson plan. It simply comes out of you, and is more or less ad-libbed. So, don't try to reproduce exactly what I did in the classroom, even if I say that it went amazingly well. As T.S. Eliot says, "Immature poets imitate; mature poets steal." I invite you to not just imitate what I do, but to steal it, make it your own, teach it in your own way.
Unless otherwise noted, anything on this site - text, images, programs, etc - is my original work, and can be freely used and modified in any way you want, provided that it isn't included in any product that is being sold. Information wants to be free.
Many computer science classes in high school simply put the students in front of computers and expect them to read a text or notes and work through a set of assignments at their own pace. I felt that some more structure would help students to avoid the very basic mistakes that can hang up a student's progress for weeks. Therefore, my class combines lectures and readings to deliver information, constantly tests student understanding with feedback questions and homework, and still provides much time for students to work things out for themselves in front of a computer.
You will also notice that the first term is very intense in teaching new information, and the later terms provide much more opportunity for practice. I felt that it was important to get students to a certain basic level of competency with Java, and then to give them a long time to practice at that level.
Finally, you will notice that in all the assignments, students are asked to add to an existing system rather than create a program entirely from scratch. This is done for several reasons:
- For the student's enjoyment. Being able to create a working "Asteroids" game is a lot more fun that writing a program that displays a dimond pattern of asterisks, even though the same skills are used.
- To be more comparable to real-life programming tasks. Programmers are typically asked to work on part of an existing program, not to create one entirely from scratch.
- To emphasize and practice object-oriented programming. More complex projects require that the student write several interacting classes, not just a single class implementing a single algorithm. Having much of the program written already shields the students from much complexity they are not ready to deal with yet, and speeds up the pace of the class while emphasizing just those data structures and techniques that the students really need.