1 Course information

Resource Link
Class website (public) https://anyone-can-cook.github.io/rclass2/
Questions & Discussion (private) https://github.com/anyone-can-cook/rclass2_student_issues
Announcements (private) https://github.com/orgs/anyone-can-cook/teams/rclass2_announcements
Class Zoom link https://ucla.zoom.us/j/94557277378

2 Course description

EDUC 260B: Fundamentals of Programming is the second course in “Anyone Can Cook,” a programming/data science sequence explicitly designed for students who do not have a programming background (the first course in the sequence is EDUC 260A: Introduction to Programming and Data Management). EDUC 260B primarily uses the R programming language. However, the course is organized around practical programming skills/concepts that are fundamental across modern object-oriented programming languages (e.g., Python, Javascript). Course topics include the following: organizing files, folders, and scripts; reading (importing) and writing (exporting) data; using Git and GitHub for version control and collaboration; iteration (e.g., “loops”); conditional execution; writing functions; strings and regular expressions. These general programming skills are prerequisite for flashier data science applications (e.g., web-scraping, interactive maps). Students will become proficient in programming skills/concepts through weekly problem sets, which will be completed in groups.

The course primarily use data and examples from education research. However, the course is designed to teach skills that are important for social science research more broadly and also for computational research within the humanities. We welcome students from across the university.

2.1 Prerequisite Requirements

The prerequisite is the first course in the sequence: EDUC 260A: Introduction to Programming and Data Management or equivalent.

3 Instructor and teaching assistants

3.1 Instructor

Ozan Jaquette

  • Pronouns: he/him/his
  • Office: Moore Hall, Room 3038
  • Email: ozanj@ucla.edu
  • Office hours:
    • Zoom office hours: Wednesdays 3-4pm, zoom link
    • And by appointment

3.2 Teaching assistants

Patricia Martín

  • Pronouns: she/her/hers/ella
  • Email: pmarti@g.ucla.edu
  • Office hours:
    • Zoom office hours: Thursdays 11am-12pm, zoom link
    • And by appointment

Crystal Han

  • Pronouns: she/her/hers
  • Email: cyouh95@ucla.edu
  • Office hours:
    • Zoom office hours: Tuesdays 11am-12pm, zoom link
    • And by appointment

4 Course learning goals

  1. Organize files, directories, and programming scripts for a research project
  2. Read data (e.g., .csv files) into R; Write data from R to other formats
  3. Use Git and Github for version control and collaboration
    • Learn basic Unix commands (“Terminal” for Mac users; “Bash” for PC) necessary to perform Git operations from the command line
    • Perform essential actions in Git (clone repo, commit, push, merge)
    • Use GitHub to work collaboratively in teams
  4. Become proficient in manipulating string/character data using string functions and regular expressions
    • Use string functions and regular expression (regex) patterns to parse text
    • Apply regular expressions to practical applications (e.g., analyzing Twitter data, web-scraping)
  5. Learn programming concepts to write efficient code that completes multiple tasks
    • Iteration using loops
    • Conditional statements
    • Writing functions
    • Functional programming

Another broad goal of the course is for students to begin developing practical proficiency in “computational thinking.” The California Computer Science Standards define computational thinking as “the human ability to formulate problems so that their solutions can be represented as computational steps or algorithms to be executed by a computer.” This course will encourage students to work on the following elements of computational thinking:

  • Continue practicing elements of computational thinking described in the syllabus of EDUC 260A: Introduction to Programming and Data Management, the prerequisite to this course.
  • For people who are new to programming, taking formal courses (like this one) and working through textbooks (like this one) are great ways to learn programming skills and computational thinking. More advanced programmers often learn new skills by reading blog posts and tutorials on the web (like this one). Therefore, a goal of this course is for you to learn how to learn on your own. As such, a substantial portion of the required reading will be blog posts and online tutorials. Once you become proficient at learning from these resources, you can learn new programming skills on your own without always having to take a formal course.

4.1 Course structure

The course will be structured around weekly asynchronous (pre-class) lectures and one synchronous workshop-style class meeting per week. Weekly homework will consist of students working through the lectures on their own, a modest amount of required reading, and weekly problem sets completed in groups of three.

  1. Asynchronous (pre-class) lecture materials. Weekly asynchronous lecture materials will be posted on the course website with the expectation that students work through all lecture materials on their own. Lecture materials will consist of three types of resources: first, detailed lecture notes (HTML) with sample code; second, video lectures (45 to 60 minutes total per week) that discuss important and/or challenging concepts from the lecture, but not a line-by-line recitation of the lecture; and, third, the .Rmd file that created the HTML lecture notes. This .Rmd file will contain all “code chunks” and links to all data utilized in the lecture. Thus, students will be able to “learn by doing” in that they can run R code on their own computer while they work through lecture materials on their own.
  2. Synchronous class meetings. Our weekly synchronous meeting will by Fridays from 9:00 - 10:30AM. However, for Week 1 (and potentially for other selected weeks) weeks we will meet from 9:00 - 11:20AM. Synchronous meetings will largely be forward-looking (i.e., introducing new material) rather than backward-looking (e.g., reviewing/applying previously introduced material). The bulk of synchronous class time will be lecture about new course material. Lectures will not cover every concept and every slide. Rather, the goal of these lectures is for students to learn the most important and/or difficult concepts so that they have an easier time working through lecture materials on their own. These lectures will be recorded and added to the asynchronous lecture materials. We will also devote some time to Q&A about previous material and – time permitting – time for students to get started on the upcoming problem set.

4.2 How to succeed in this class

In just a few words, the keys to success in this class are: start early, ask for help, help others

Here are some substantive tips to help you succeed:

  • Work through weekly asynchronous lecture materials as soon as you can
    • The weekly asynchronous lecture materials (lecture HTML, lecture .Rmd file with code, short video lecture) are the core of this course. Lecture materials are designed for you to run the code on your computer as you work through the lecture. Therefore, treat each lecture as an active learning experience rather than passively reading lecture notes.
  • Start the weekly problem set early so that have time to seek help on questions you are struggling with
  • If you can’t figure something out, ask for help!
    • Discuss with your problem set group
    • Ask a question on GitHub
    • Come to office hours
  • Be supportive of your classmates. Together, we will create a classroom environment where we all help each other succeed!

5 Classroom environment

We all have a responsibility to ensure that every member of the class feels valued and safe. Be mindful that our words and body language affects others in ways we might not fully understand. We have a responsibility to express our ideas in a way that doesn’t make disparaging generalizations and doesn’t make people feel excluded. As an instructor, I am responsible for setting an example through my own conduct.

Learning the fundamentals of a new programming language can feel overwhelming! We must create an environment where students feel comfortable asking questions and talking about what they did not understand. Discomfort is part of the learning process. Unburden yourself from the weight of being an “expert.” Focus your energy on improving and helping your classmates improve.

5.1 Towards an anti-racist, anti-heteronormative learning experience

This course teaches R programming and working with data, tools that are often perceived as objective, independent of context and content. We must acknowledge that racism, white supremacy, and heteronormative ideas of gender identity and sexual orientation are rooted in every aspect of data. These seemingly objective rules (e.g., “the right way to handle data”) affect the way data are gathered, how variables are created, the questions asked (or not asked), etc.

In this course we will utilize data that reflect systemic gaps based on race, ethnicity, immigration status, and gender identity, among other aspects of identity. It is critical to acknowledge that the processes used to create these data (e.g., how data collected, the categories chosen to represent identity) are often based on notions of white supremacy and heteronormativity. When you encounter a data management strategy that may cause harm, we encourage you to raise concerns. It may be that your instructor/TAs may need to think more critically about strategies they have been using for a long time! It is also critical that we acknowledge that the social and economic marginalization reflected in data is rooted in systemic oppression that upholds white supremacy and heteronormativity. We should all be reflecting about our own role in upholding these systems.

6 Course website and communication

6.1 Course website

All course related material can be found on the course website. Pre-recorded lecture videos, lecture notes (HTML), and .Rmd files will be posted on the class website under the associated sections. Additional resources (e.g., syllabus) may also be posted on the class website.

6.2 Course discussion

We will be using GitHub teams for class announcements HERE.

  • GitHub teams: The teaching team will post all class announcements using GitHub teams. The GitHub team discussions feature allows for quick and seamless communication to all members of an organization or team – in this case, to all students with a GitHub account enrolled in the course. Some features include:

    1. The class team can be viewed and @mentioned by all students enrolled in the class and part of the organization.
    2. Posts can include code snippets, links, images, and references to issues which make them ideal for this class discussion and participation.