In the past year, I’ve had a growing interest in formal methods of Instructional Design. One of my new favorite activities is writing learning objectives. I’m still developing that skill, but I though it would be interesting to share some of the objectives I’ve written for the Computational Thinking course. As you can see, there are a large number of learning objectives, and I doubt we actually cover all of them in the CT course. There’s still a lot to improve about the curriculum. There’s also a lot to improve about these outcomes. I noticed while reviewing them that there isn’t anything about students working with nested control structures, for instance.

• Algorithms

• Control Structures

• State the control structures of algorithms

• Differentiate between sequence, decision, and iteration [and function]

• Explain the behavior of nesting control structures inside of each other.

• Program State

• Define the concept of a program’s state

• Describe how program state changes with respect to time

• Trace program execution with sequence, decision, and iteration

• Relate program state with the inputs and outputs of a program.

• Decision

• Identify the condition, body, else-body of a decision

• Write a numerical condition

• Write a Boolean condition

• Write a condition with a logical AND or OR

• Explain the behavior of commands inside a decision.

• Solve a problem that requires decision

• Iteration

• Identify the iteration variable, iteration list, and body of an Iteration

• Write an iteration over a list of complex structured data

• Write an iteration over a list of primitive data

• Evaluate the name of the iteration variable

• Express implicit solutions in terms of explicit iteration commands

• Explain the behavior of commands inside an iteration

• Documentation

• Explain the use, power, limitation, and danger of importing

• Define documentation for an API

• Identify the inputs and outputs for a given function of an API

• Explain how to search for help on an API

• Reporting

• Predict the printed output for a string variable

• Predict the printed output for a string

• Predict the printed output for an integer

• Predict the printed output for a list

• Differentiate between storing, importing, printing, and plotting

• Create an algorithm to solve a problem involving real-world data.

• Abstraction

• Types

• List the types of data used in this course (String, integer, float, Boolean, list, or dictionary)

• Differentiate between simple/primitive types of data and complex types.

• Differentiate between a variable and a string

• Real-world vs Code

• Create an abstraction, including the real-world entity, stakeholder, variables

• Instantiate an abstraction, including the values for each variable

• Code an abstraction as an integer, string, Boolean, list, dictionary

• Interpret an abstraction to identify the real-world entity, potential stake-holders, limitations, and potential questions it could be used to answer

• Variable Creation and Manipulation

• Create a value to print

• Create a list of values for a plot

• Append values to an empty list using iteration

• Manipulate an existing variable

• Evaluate the name of a variable for clarity, correctness, and disambiguity

• Calculate the result of an assignment involving constant expressions.

• Calculate the result of an assignment involving self-referential expressions.

• Estimate the result of an assignment involving a function call

• Evaluate the benefit of storing the result of a call in a variable for use

• Dictionaries

• Access an element of a dictionary

• Access a dictionary inside of a dictionary

• Identify the elements of a dictionary (name of key, type of value)

• Differentiate between a dictionary and a list

• Lists

• Identify the type of a list

• Explain the difference between an empty list a non-empty list

• Explain the purpose of the “append” function of lists

• Identify how to access data within a list

• Structured data

• Outline the structure of data

• Give the path to an element of structured data

• Relate a path to the needed control statements to access that data (iteration, dictionary access)

• Analysis

• Criticize a data set for its limitations
• Social Impacts

• In Society

• Identify the stakeholders, impact, conflicts, and pressures of a scenario.

• Evaluate a conflict to identify an ethical action to take

• Describe the pervasiveness of computing for a stakeholder

• Identify stakeholder pressures and judge whether they are external or internal

• Describe the privileges (or lack thereof) of stakeholders in relation to computing

• Describe the privacy rights and expectations of stakeholders in relation to computing

• Describe the powers of stakeholders’ over computing

• Relate computing ethics to your profession.

• Use ethics to decide on and defend your computing behavior

• Data Science (Secondary objectives)

• Plotting

• Identify the scenarios where you would want to use a given type of plot

• Differentiate between line plots, XY plots, scatter plots, histograms, bar charts, maps

• Interpret a plot to answer a question

• Evaluate a plot for its clarity and beauty

• Statistics

• Give descriptive statistics for a list of numbers (min, max, mean, std dev)

• Explain the value of reporting the standard deviation alongside the mean.

• Project Management

• Develop a project iteratively

• Debug a program that is not behaving

• Detect the problem in a program

• Work on a project early, consistently, and in reasonable chunks.