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

    • In Your Life

      • 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.