Syllabus

EDLD 653: Functional Programming for Educational Data Science
(CRN: 31621; 3 credit hours)

Introduction to Course and Instructor


Term: Spring 2026

Time: Mon, 1:00-3:50pm

Classroom: 142 HEDCO

Instructor: Joe Nese, PhD

  • email: jnese@uoregon.edu (preferred contact method)
  • office hours: By appointment

Course Overview

This is the third course in a sequence of courses that will eventually lead to a data science in educational research specialization. All courses will be taught through R, a free and open-source statistical computing environment. This course builds upon the content covered in the first two courses, with a specific focus on becoming a better programmer and improving workflows. Students will continue to work with the {tidyverse} suite of packages in R, with a emphasis on {purrr} for functional programming. At its core, functional programming is a technique to iterate a function over a vector, or set of vectors, to complete repetitive tasks. We will compare and contrast {purrr} functions with base R approaches, including for loops and the apply family of functions. Functional programming helps reduce redundancies in code, making it more efficient, less error-prone and, often, more readable. The course will also cover writing custom functions, which can also help in completing repetitive tasks, but can also extend the functionality of R, and is a key component of functional programming. The course concludes with a brief introduction to shiny for building interactive applications which, although somewhat outside of the scope of functional programming, requires using (and often writing) functions.


Acknowledgment. This course, and much of the materials prepared and content presented, was originally developed by Daniel Anderson and Cengiz Zopluoglu. In collaboration with Daniel Anderson, Alison Hill, Chester Ismay, and Andrew Bray, helped design the content for this course and the specialization as a whole.

Student Learning Outcomes

By the end of this course, students should be able to:

  • Understand and be able to describe the differences in R’s data structures (including the four main vector types, data frames, and lists) and when each is most appropriate for a given task
  • Explore purrr::map() and its variants, how they relate to base R functions, and why the {purrr} variants are often preferable
  • Work with lists and list columns using purrr::nest() and purrr:unnest()
  • Convert repetitive tasks into functions
  • Understand elements of good functions, and things to avoid
  • Write effective and clear functions to continue with the mantra of “Don’t Repeat Yourself”

Course Prerequisites

Enrolling in this course requires successful completion of the first two courses in the EDS specialization (EDLD 651 and EDLD 652). Students who waived the first course are assumed to have the knowledge and skills as covered and taught in EDLD 651.

Course Modality

This is an in-person course: that means that, unlike asynchronous online/ASYNC WEB courses, we will meet during scheduled class meeting times. I will accommodate absences as described in the Absences policy below. If you need additional flexibility, UO encourages you to consider ASYNC WEB courses. If you need accommodation related to a medical or other disability, you can request those by working with the Accessible Education Center.

Books

All required course readings are freely available online or will be provided by the instructor. Note that the assigned readings should be read before each class.

Assignments (200 points total)

This course includes three labs (20 points each), a take-home Midterm test (70 points), and a take-home Final exam (70 points).

Labs (60 points; 30%)

Each lab is worth 20 points and is scored on a “best honest effort” basis. Please do not turn in partial work. Instead, please ask for help. Each lab will include dedicated in-class time, but it is expected that most labs will require additional time outside of class. Contact the instructor for help rather than submitting incomplete work. If the assignment is not complete, and you have not contacted me for help, it is likely to result in a partial credit or zero score.

Midterm Test (70 points; 35%)

The take-home Midterm will be completed outside of class time, and responses will be scored on a correct/incorrect basis rather than a “best honest effort”. The Midterm will primarily cover working with and subsetting lists, as well as iterating with {purrr}. The Midterm is worth 70 points (35% of your grade).

Final Exam (70 points; 35%)

The Final exam is similar to the midterm, in that it will be completed outside of class time, and responses will be scored on a correct/incorrect basis rather than a “best honest effort”. The Final could cover anything covered in this course. The Final is worth 70 points (35% of your grade).

Weekly Schedule (Topics, Assignments, and Readings

See Schedule for complete course schedule.

Week 1: Intro & Data Types

Reading Slides Lecture1 Assigned Due
Mar-30 AdvR(2e) Intro


AdvR(2e) 3



1 Passcode: $L6&HnNN

Week 2: Iterations & Lab 1

Reading Slides Lecture1 Assigned Due
Apr-06 AdvR(2e) 5

Lab 1
1 Passcode: NA

Week 3: Iterations & Lab 2

Reading Slides Lecture1 Assigned Due
Apr-13 R4DS(1e) 25

Lab 2 Lab 1

AdvR(2e) 9.1-9.3



1 Passcode: NA

Week 4: Batch Load Data & List Columns

Reading Slides Lecture1 Assigned Due
Apr-20 {fs}


Lab 2

AdvR(2e) 9.4-9.6



1 Passcode: NA

Week 5: Parallel Iterations & Looping Variants

Reading Slides Lecture1 Assigned Due
Apr-27


Midterm Test
1 Passcode: NA

Week 6: Writing Functions

Reading Slides Lecture1 Assigned Due
May-04 Creating Functions (SC)


Midterm Test

AdvR(2e) 6.1-6.4



1 Passcode: NA

Week 7: Writing Functions & Lab 3

Reading Slides Lecture1 Assigned Due
May-11 AdvR(2e) 6.5-6.8

Lab 3
1 Passcode: NA

Week 8: Shiny

Reading Slides Lecture1 Assigned Due
May-18 Shiny Basics


Lab 3

How to Build a Shiny App




Mastering Shiny: Ch1



1 Passcode: NA

Week 9: No class: Memorial Day

Week 10: Shiny & Review

Reading Slides Lecture1 Assigned Due
Jun-01 Mastering Shiny: Ch3

Final Exam

Mastering Shiny: Ch5




Mastering Shiny: Ch17



1 Passcode: NA

Week 11: No class: Final exam due

Course Policies

Grading Components

Grading Components
Lower % Lower point range Grade Upper point range Upper %
97 194 or more A+
93 186 A 192 96
90 180 A- 184 92
87 174 B+ 178 89
83 166 B 172 86
80 160 B- 164 82
77 154 C+ 158 79
73 146 C 152 76
70 140 C- 144 72
F 138 or less 69

Student Engagement Inventory

Graduate: 1 credit hour = 40 hours of student engagement (3 credit hours = 120 hours of student engagement).

Student Engagement Inventory
Educational activity Hours student engaged Explanatory comments (if any):
Course attendance 28.3 10 meetings at 170 minutes per meeting
Assigned readings 28.7 Weekly readings are assigned, and expected to take about as long to complete as the in-seat time per week
Labs 15.0 3 labs assignments, at approximately 5 hours each outside of class
Midterm Test 20.0 Take-home Midterm test
Final Exam 28.0 Take-home Final exam
Total hours: 120.0

Communicating with Me: How and Why

How will I communicate with you? Our class will communicate through our Canvas site. Announcements and emails are archived there, automatically forwarded to your UO email, and can even reach you by text. Check and adjust your settings under Account > Notifications.

When I need to get in touch with individual students, I do so through email.

When giving feedback on assignments, I do so in Canvas, and turnaround time for feedback is generally one week.

How can you communicate with me? If your question (or comment) is about a technical challenge with Canvas or another technology, please contact the UO Service Portal. If it is about course content or activities, about something personal, time sensitive, or something else that doesn’t feel like it fits above, please reach out to me by email. I try to respond to questions within one business day.

Why should you communicate with me? I enjoy talking with students about our course material! Are you confused or excited about something? Wondering how what we’re learning relates to current events, career choices, or other classes you can take UO? Please be in touch! Please also be in touch to tell me how you are doing in the course. If you are having trouble with some aspect of it, I would like to strategize with you. I believe every student can succeed in this course, and I care about your success.

Classroom Community Expectations

Participate and Contribute: All students are expected to participate by sharing ideas and contributing to the learning environment. This entails preparing, following instructions, and engaging respectfully and thoughtfully with others. While all students should participate, participation is not just talking, and a range of participation activities support learning. Participation might look like speaking aloud in the full class and in small groups as well as submitting questions prior to class or engaging with Discussion posts. We will establish more specific participation guidelines and criteria for contributions in our first weeks of the term.

Expect and Respect Diversity: All classes at the University of Oregon welcome and respect diverse experiences, perspectives, and approaches. What is not welcome are behaviors or contributions that undermine, demean, or marginalize others based on race, ethnicity, gender, sex, age, sexual orientation, religion, ability, or socioeconomic status. We will value differences and communicate disagreements with respect. We may establish more specific guidelines and protocols to ensure inclusion and equity for all members of our learning community.

Help Everyone Learn: Part of how we learn together is by learning from one another. To do this effectively, we need to be patient with each other, identify ways we can assist others, and be open-minded to receiving help and feedback from others. Don’t hesitate to contact me to ask for assistance or offer suggestions that might help us learn better.

Course Attendance and Engagement

This is a face-to-face course. Attendance is important because we will develop our knowledge through in-class activities that require your active engagement. We’ll have discussions, small-group activities, and do other work during class that will be richer for your presence, and that you won’t be able to benefit from if you are not there. Excessive absences make it impossible to learn well and succeed in the course. While there is not an automatic grade deduction for missing classes, it is unlikely that students who miss 6 or more classes will be able pass this course. That said, if you are feeling ill, please stay home to heal and avoid infecting your classmates. Please take absences only when necessary, so when they are necessary, your prior attendance will have positioned you for success. If you must miss a class, please fill out the absence report form.

My course attendance and engagement policies were built with absences and deadline flexibility that students commonly need in mind. There are, however, times when a student may experience an extraordinary circumstance—an unanticipated and significant crisis—that impacts their attendance. Exceptions to the attendance policy and/or deadlines may be granted in the event of extraordinary circumstances. Please contact me as soon as you are able to request it—ideally before the class or deadline has passed, or, if your circumstance makes this difficult, then as soon as possible afterwards. This exception will not be offered on an open-ended basis, so if you need to ask for it, please give some consideration to how much time you will realistically need to complete the work. To activate this policy, send me an email with “Extraordinary circumstance request” in the subject line, and if you are requesting deadline flexibility, let me know by what updated deadline you will be able to submit your assignment. There is no need to explain or offer information about the nature of the extraordinary circumstance in your email—we will trust you only to activate this policy in crisis situation. Please note, too, that detailed feedback on your written work may be delayed or impossible to provide if you’re submitting to meet an extended deadline. At the end of term, granting extensions is hard for the teaching team because of UO’s tight turnaround on grading. Please be in touch in an emergency and we can discuss your options.

Generative Artificial Intelligence Use

Students may use GenAI tools in this class to help with coursework and assignments. Helpful uses include assistance for code checking, generation, or explanation. However, if you include in your assignment submissions any content that GenAI generates, you must cite the GenAI tool that is your source, in the same way that you must cite any content you use from other sources, such as books, articles, videos, the internet, etc.

Students are encouraged to approach GenAI tools cautiously, particularly as beginners in R programming. While GenAI can provide valuable insights and guidance, excessive reliance on these tools can hinder the development of essential problem-solving and debugging skills necessary for becoming proficient in programming. Additionally, GenAI-generated code may not always be accurate, efficient, or aligned with best practices, which can potentially introduce errors or misconceptions into your work. As you build your foundational programming skills, prioritize actively writing, reading, and troubleshooting your own R code, using GenAI primarily as a supplementary resource rather than a primary source of solutions.

Note. The second paragraph of this section was generated by ChatGPT 4.5. See the link for a copy of the prompt. https://chatgpt.com/share/67ea4c72-8e78-800d-9411-44e6b8d59be9

Grievance Policy

A student or group of students of the College of Education may appeal decisions or actions pertaining to admissions, programs, evaluation of performance and program retention and completion. Students who decide to file a grievance should follow University student grievance procedures and/or consult with the College Associate Dean for Academic Affairs: Edward M. Olivos at emolivos@uoregon.edu or 541-346-2983.

University Policies

The University of Oregon policy statements now exist on the student-facing University Course Policies page and are also linked to from every Canvas course site.