Encouragement increases self-efficacy: the belief in one’s ability to successfully perform a task. Because we are more likely to engage in tasks we believe we can perform successfully, encouragement may be especially useful for attracting women to male-stereotyped fields and helping them to persist in the face of difficult challenges. Faculty can help by explicitly noting students’ good work, by actively encouraging their computing pursuits, and by encouraging a “growth mindset”.

Some suggestions

Praise and encourage effort. Help your students develop a “growth mindset” by praising their effort and diligence (e.g., "I'm so impressed with the hard work you put into this!") instead of emphasizing that they are smart or talented (immutable characteristics). Having a growth mindset is associated with persistence and “grit”.

Work it into your course materials. Integrate language into course materials that provides encouragement along the way (e.g., "This next task is challenging, so make sure you allocate enough time to complete it, including time you might need to seek help.") and positive reinforcement for completing tasks (e.g., "Congratulations on completing that difficult assignment!").

Make it okay to make a mistake. Let students know that we all make mistakes, get stuck, and have to redo things. Help them uncover their mistakes and encourage them to persist (e.g., "I see what you're doing and that's a typical mistake students make. Try it this way and see what happens.").

Examples from the collection

Interfaces and polymorphism- Painting!

In this lab, students work to create a 'painting' program. The Java program must use variables and methods to store values and perform actions, respectively, for painting. To abstract this idea beyond custom methods, students must create interfaces. Specifically, students are to create an interface where the user can (and must) implement all methods in that interface.

Engagement Excellence

Introduction to Java-Create a Cupcake!

In this lab, students work to create a program with classes in Java. Starting with a review of packages, classes, methods, parameters, and constructors, students will create a program that builds a 'cupcake.'

Engagement Excellence

Getting used to Java syntax (or, "Concise Guide to Java-ish for Tourists in Javaland")

In this tutorial, students work individually to explore the basic concepts of statements, sequence, and methods. Using pseudocode and various scenarios (such as making a milkshake, getting money from a cash machine, and doing laundry), students must examine the basic principles for creating a sequence of actions and then generate their own example. This activity is excellent for introducing the concept of sequences and statements to a student with no background in computer programming.

Resources

An In-Class Activity Exploring Hash Function Quality

This in-class activity enables students to explore how the quality of a hash function affects the performance of a hash table. Students write their own hashCode() function for Java strings and submit it to an autograder that determines the number of collisions that would occur with a given corpus. The results are displayed on a leaderboard for students to see in real time how their implementation compares to other students’ and the Java libraries. Afterwards, students are eager to see the winning implementations and the Java library implementations. This activity has been used successfully with 480 students in 10 sections over 3 years on Gradescope.

ACM Digital Library Entry

Teaching software testing with role-play games

Role-play activities have been used for many years to help students engage with abstract content and build understanding in a fun and collaborative way. They are particularly popular in teaching object-oriented programming and concurrency, as it is relatively straightforward for students to take on the role of objects within a software system.

Software testing is typically seen as a dry and uninteresting discipline. There are several reasons for this: it involves many abstract concepts, the process of designing and writing software tests can be quite repetitive, and students struggle to see the value of thorough testing without real-world experience. These challenges create an environment where teaching software testing is particularly challenging compared to other areas of computing. To address this, we designed role-play games with the goal of improving student learning and engagement in a software testing class.

Traffic Jam: Scaffolded Game Development to Teach Object-Oriented Programming

Traffic Jam is an assignment designed for a CS3-style course that is meant to (re-)introduce students to larger programming projects. Students implement a grid-based puzzle game based on the sliding block puzzle game Rush Hour. In the game, a player must slide adjacent cars facing horizontally or vertically in order to dislodge a particular car and move it to the other side of the grid.

This assignment consists of scaffolded instructions, UML diagrams, and starter files that guide students through the process of creating the game in four parts. This allows students to build on their work and to work on increasingly complex goals, from a text-based version to a graphical user interface in Java using the ACM Java library.

For this assignment, students should be familiar with arrays, methods, references, and classes. The project aims to help students gain more experience and proficiency with classes and object-oriented design in Java, as well as with event handlers and interactivity. Students learn how to read existing code and supplement it with new features to build a prototype of the game.

Embedded Ethics: Pandemic Exposure Notification Systems and Giving Ethical Justifications

In this follow-up to "Embedded Ethics: Pandemic Contact Tracing and Ethical Trade-Offs" [6], students revisit a trade- off they faced in that first module. There, students brainstormed about the rich data one might collect to build a powerful app for contact tracing, discovered that this may facilitate violations of privacy, considered the harms that can come from this, and recognized the trade-off between protecting privacy and gathering data to support the fight against the spread of a disease such as COVID-19.

Interaction Metrics Projects for Human-Computer Interaction

This Interaction Metrics OER consists of two group projects focused on teaching students how to create validated metrics for measuring human-computer interactions. If we want to measure how good a team is at teamwork, we might count communication utterances by members and see if they’re equally distributed. But is that measure predictive of team success? Probably not. If we want to measure how much a person likes an app, we might count number of uses per day or number of taps per usage session. While these metrics are countable, there’re not accurate predictors of fondness for an app. These two projects ask students to create objective, useful metrics for real-world human-technology interactions and to validate them with predictive models and collected data. I tell students these projects are about “developing metrics for things that are hard to measure” and ask them to consider whether the proliferation of inexpensive sensors, AI, and IoT might make fuzzy constructs like “team trust” or being a “good leader” more measurable.

Micro:Vote: An Introduction to Python using the BBC micro:bit

The Micro:Vote project is designed as an introduction to text- based programming through a 12-week project aimed at 11 to 13 year olds. The project is designed as a School-University partnership whose aim is to highlight the role of creativity and social impact in computing through the design of digital voting posters using the BBC micro:bit and MicroPython.

Adopting a Design Studio approach, the project scaffolds students in the creation of a physical computing voting system and informative poster, to gather responses on an issue of social importance within the community. Through the lens of Human- Computer Interaction, students investigate the role of computing in activism and learn to implement data and control structures.

ACM Digial Library Entry

Computational Creativity Exercise (CCE): Marble Maze I

In this assignment students work as a team to build, using only specified materials, a structure through which a marble will travel,  Students first work independently developing their own segment of the structure and then work collaboratively to construct a final structure. Students are required to video tape the execution of a marble traveling through the structure lasting at least n seconds. This exercise will allow students to practice problem decomposition, abstraction, generalization, and evaluation, and also debugging and testing.

This exercise was developed as part of the NSF-funded Computational Creativity project at the University of Nebraska-Lincoln.

Day One Ice Breakers

This a set of "icebreaker" activities are used on the first day of an introductory programming class to help create a welcoming learning environment for students and to lay the groundwork for discussions about how to be successful in Introductory Computing. I have included student-facing slides, a sign-in handout, and a short paper with tips for implementing these activities.

Wrapper classes

In this tutorial, students create a program in Java that utilizes wrapper classes. The program must include three ArrayLists (one of type Integer, type Double, and type Character) and it needs to parse values from the ArrayList.

Exam review: classes, methods, etc.

In this tutorial, students create a program in Java that covers methods, conditionals, and object-oriented programming. The activity requires students to use the Problem.java file to practice creating an interactive program that accepts user input and then performs some action on that entry. Then, the students must modify methods (such as answerCorrect) to evaluate the user's overall performance for answering questions correcting on the quiz/interactive program.

Subscribe to Effective Encouragement