This approach is turning out to be helpful for several reasons. For one, I wanted to organize the content into 8 or so example programs that will hopefully be of interest to the target students. Each program will be demonstrated first before I walk them through how it's made via live coding. As certain concepts are needed, the coding will pause and we will discuss the concept in general and in the specific context of the program. I also intend to have at least one peer instruction question per lecture period. Having a detailed list of objectives is helping me ensure I hit all the main points in the planning process.
Beyond this, as I have found when teaching as a contract instructor in the summer, you can give your learning objectives up front all you want, but it doesn't mean students will remember them or see how the course material connects to them. This year, I plan to colour code the objectives and explicitly link to them during every lecture and in every tutorial and assignment. I am hoping that this will make the course more clearly interconnected and help students organize the content in their minds as we go.
Finally, always linking back to the objectives will help me prove to students (and know for myself) that everything we do is relevant to the desired outcomes. Nothing should feel like busy work!
If you're interested, the current version of my objectives for this course are below.
By the end of the course, you should be able to...
- Understand what computer science is, and how it can help you solve problems in your field.
- Learn how to use Processing to create visual programs of varying types.
- Explain these basic concepts of programming to somebody who has never programmed before:
- data types (numbers, Strings, etc)
- Booleans and if statements
- Solve basic programming problems by working with:
- searching and sorting algorithms
- using simple data structures
- dynamic memory
- Develop good programming practices in the areas of:
- breaking a problem down into smaller pieces
- code reuse
- Learn to approach programming problems with the following values:
- a desire to experiment
- the confidence to make mistakes and try again
- the instinct to consult documentation and seek solutions yourself before asking for help