### How Does Engaging Curriculum Attract Students to Computing?

NCWIT Resource

Use Meaningful and Relevant Content

“Make it matter” for students by experimenting with new and interesting topics for assignments and projects, and by using varied examples in your lectures and other materials. Students are more likely to persist in the face of a challenge when what they are learning is relevant to their life experiences and goals. Use examples that have broad appeal, place assignments in contexts that interest students, and explain how a particular idea is used in different contexts.

**Don’t assume what’s meaningful; find out!** Don’t rely on your notion of what’s interesting and meaningful, and certainly don’t rely on stereotypes. Find out from your students--and from the students you want to recruit--what is meaningful to them! Surveys and clicker polls are a great tools for this.

**Keep keeping it real.** Don’t relegate the discussion of larger context to the beginning of a course. Keep bringing students back to the real world application of what they are learning. This can be as simple as showing how a concept is used in a familiar application or program (e.g., how hash maps are used in natural language processing to predict what a user will type into a search engine).

**Highlight the people.** To help students see the people behind the concepts, refer to the contributions of an individual or group. A great story is Grace Hopper and her team at Harvard University finding a literal bug in one of their machines.

NCWIT Resources

NCWIT Resource

NCWIT Resource

NCWIT Resource

This project steps learners through a series of assignments that culminate into a photo viewer/archive tool. The assignments are designed to emulate a software development "sprint" in the Agile development process parlance. Each sprint consists of an assignment that builds off the code of the previous assignment, and is by itself a valuable piece of the overall end product.

Our aim is to give students the feeling and experience of working on a large project via a sequence of carefully-crafted homework assignments. This project helps students gain experience with Object Oriented Programming in Java, combined with software development techniques, commenting and documenting code for maintenance, unit testing with JUnit, exception handling, event-driven programming and use of pre-built Java Swing components. The project culminates in a fully-functional graphical user interface and leaves plenty of room for creative expression.

The project was designed and developed with a neutral position regarding gender, race, and other protected classes. We believe the end product has a universal appeal for users of technology and the potential software developers of tomorrow.

This CS1 assignment asks students to use lists, dictionaries, tuples,

and basic programming concepts in Python to analyze Airbnb data.

Students are then asked to make a connection to the real world by

finding articles about regulating Airbnb and reflecting on how data

analysis might be relevant to those conversations. The difficulty of

the assignment can be varied by changing the assumptions that students

are allowed to make about the input files.

This classroom activity uses Process Oriented Guided Inquiry Learning (POGIL) to introduce students to Java. Students work in small teams to answer a series of questions about relational and conditional operators. The instructor facilitates interaction among teams, offers guidance and encouragement, and summarizes key concepts.

Learning Objectives:

* Evaluate boolean expressions with relational operators (<, >, <=, >=, ==, !=).

* Explain the difference between assignment (=) and equality (==) operators.

* Evaluate boolean expressions that involve comparisons with &&, ||, and !.

* Evaluate complex logic expressions based on operator precedence.

The Coffee Barista Assistant assignment has students develop a tool that generates instructions to build a customer's cup of coffee. The assignment has a basic path for all students to complete, while containing additional layers to challenge high performing students. Through this programming assignment, students gain experience and proficiency with variables, conditionals, lists, and functions. By starting the assignment as an unplugged design activity, students will learn how to identify repeated patterns.

In this lab students compute the acceleration of a short track speed skater per lap. This is a lab for early in a semester of CS 1. It requires the use of 1) standard input/output, 2) variables and simple arithmetic expressions, 3) selection statements, and 4) loops.

Learning objectives:

* Compiling, linking, executing a program

* Developing an algorithm

* Testing a program

* Using the C++ syntax and programming constructs of standard I/O, variables and arithmetic expressions, selection statements, and loops

In this lab, students track their own fitness activities for a week. They submit this data which becomes some of the test data for the lab. Based on the students' activities, the program computes the number of equivalent miles each student has walked and the total number of miles walked by everyone together. Output is sorted from most miles walked to least miles walked.

This is a lab for late in the semester of a CS 1 course. It requires students to use text files and an array of structures.

Learning objectives:

- Compiling, linking, executing a program
- Developing an algorithm
- Testing a program
- Using the C++ syntax and programming constructs of standard I/O, variables and arithmetic expressions, selection statements, structures, arrays

Prerequisite knowledge: Students must have already been exposed to standard I/O, variables, arithmetic statements, selection statements, loops, functions, arrays, structures, and text files.

The lab could be easily modified to use a class instead of a structure and an array of objects.

This is a script of an in-class kinesthetic learning activity that illustrates the pros and cons of storing data in array-based and linked list-based data structures. The students act as either elements in an array or as nodes in a linked list; chairs are used to represent memory addresses.

In this project, students make a calculator that determines the Air Quality Index (AQI) given user-input sensor data. All calculations follow methods published by the US Environmental Protection Agency (EPA) and give students practice handling user input, rounding/truncating, calculating the max and min, and must handle a a simple calculation that requires either a look-up table or conditionals. This assignment can be given early in the semester to help students gain experience and proficiency with loops, calculating max/min, using conditionals and boolean expressions.

It can also be used--with some modifications--at many points in the curriculum to explore more complex data structures (2d arrays or dicts), to practice function decomposition, or even object-oriented programming. I have successfully used the assignment twice in one semester, letting students return to the assignment later to see how much simpler the solution becomes when they are able to use functions and complex data structures. See the "redux" files attached here.

Engagement Excellence

In this assignment, students will create geometric tilings in Python. Students work to draw tessellations whose specifications are provided, and have the opportunity to design their own. Students practice problem decomposition to build logic that draws a single element, a row of elements and finally a plane tiled with rows.

This assignment is essentially Robert Muller's "Problem Set 2: Tessellation" assignment, available in the EngageCSedu repository. We scaffold that material and add additional resources: (i) background materials are provided to help students with the geometry of the four mandatory elements to be tiled (squares, rings, hexagons, octagons); (ii) the assignment flow starts with simple shapes before moving to complex ones; (iii) a template is provided that gives function specifications, scaffolding the decomposition; (iv) test cases are given that allow students to check the correctness of their individual functions as they build them; and (iv) a potential grading rubric is provided.

In this 2018 Nifty assignment, students write an AI engine for the game of Pong. Pong is a game enjoyed by people in general, by the CS1 community in particular, and by pigeons. In this open-ended assignment, students write an AI engine for Pong from scratch. Students can have their AI engines play against each other, and participate in a class-wide tournament. To design good AI engines, students have to read, understand, and modify the game engine code. The assignment is accessible to any CS1 student, but leaves room for a lot of exploration and creativity — we have had success engaging both excellent students who had little difficulty in CS1 and students who found CS1 challenging.

NOTE: This is not a traditional CS1 assignment so it might make more sense used as a lab assignment or a bonus assignment.