The three key pieces that I’ve taken away from the Center for Academic Excellence course that I’m doing at the moment are:
- How to structure my course priorities and assessment using goals and objectives,
- How to structure the delivery of my course by using modules, and
- Using online tools such as Quip to allow collaborative discussions about the subject matter of the course.
The course I’m teaching this coming semester is CPSC 2232 Data Structures. I haven’t taught it before, and so I don’t have any prepared material. Thankfully, colleagues who’ve taught it before have been kind enough to provide their materials, and the text books that I’m going to use have lots of nice supporting material.
This is the first in a series (I hope!) of three posts going through the bullet points above.
Goals and objectives
The questions I am asked to answer for defining the goals of my course are:
What do you want your students to learn and in what ways do you want them to grow?
If you ran into a student who had taken your class the previous semester, what would you hope the student would say about what she/he took away from your course?
Let’s take each of these in turn.
What do I want my students to learn?
The course description is where I will start:
This course covers abstract data structures such as queues, stacks, heaps, linked lists, trees, graphs, hash tables, and sorting. Students apply data structure concept in advanced programming.
So the topics are, at minimum all the different basic data structures and how they’re applied in programming.
For each of these data structures, I want the students to be able to understand what each of them is, how to implement them in Java or C++ (better: both), what their algorithmic complexity is for the operations they allow, what situations each is best used for and when they’re not best used.
In what ways do I want my students to grow?
Most students will also not have any idea about the data structures in the course description above, so clearly that’s an area of growth, too. I’d capture this by saying I want them to be able to think at a higher level when deciding how to represent real world information in their programs.
Another, perhaps wishful thought, is that I’d like the students to understand the data structures presented from the ground up: how is this implemented in the CPU of the computer I’m using?
Finally, my students are coming into my course after having completed an early (though not introductory) programming course. They will have familiarity with Java. Most will mostly not have familiarity with C++.
So, one way that I’d like the students to grow is by learning C++.
What do I hope the student would say about what they took away from your course?
I hope that the students take away an understanding of what the different data structures are capable of, how they can be implemented in Java and, optionally, C++, and be able to explain them to someone else.
Summarizing the ideas expressed above, my three goals for the students in the data structures course are:
- Students will be able to analyse programming problems and choose the most appropriate data structure for storing the information required.
- Students will be able to explain, graphically, how the data structures work and achieve their functionality and performance.
- Students will be able to write Java and, optionally, C++ implementations of the data structures examined.
The advice the course is giving me about how to define more concrete objectives for each of these goals is to define Learning Objectives that:
- Define a goal
- Focus on student performance
- Focus on product
- Are assessable
- Use verbs that specify behaviors
- Use simple language
- Indicate level of attainment
- Are realistic and achievable
For each of these items I’m going to write some quick notes for each of my course goals.
Students will be able to analyse programming problems and choose the most appropriate data structure for storing the information required.
By the end of this course
- The student can analyze a programming problem and choose an appropriate data structure.
- In doing so, the student determines the correct choice of data structure and can explain why it’s correct.
- The student can quantify the performance of the data structure.
Students will be able to explain, graphically, how the data structures work and achieve their functionality and performance.
By the end of this course
- The student can diagram all the data structures examined.
- The student can explain the operation of each of the data structures diagrammed.
- The student can show why the performance of the data structure is what it is.
Students will be able to write Java and, optionally, C++ implementations of the data structures examined.
By the end of this course
- The student can implement all the data structures examined in Java.
- Optionally, the student can implement all the data structures examined in C++.
- The student can write programs in the Java Eclipse IDE.
- Optionally, the student can write programs in the C++ Eclipse IDE.
This is my first chance to write down all my thoughts from the first part of the course. I still have to tackle the modularity and collaboration pieces, which I’ll aim to do in upcoming posts.