CS 476: Computer Graphics
Ursinus College, Fall 2024
Instructor: Christopher J. Tralie
An animation of Newton fractals using GLSL, by Kevin Hoffman, fall 2022
"American Mirror Rave" ray tracer by Vincent Ha, CS 476 Fall 2022
Dino dance circle, CS 476 fall 2020
Heightmap levelset editor for implicit curve creation
Acrobatic actions from the CMU MOCAP Database, as rendered by the dynamic scene graph viewer by Nina Sun, Brandon Choi, and Cosi Goldstein in CS 290: Digital 3D Geometry, Spring 2016
A green cow falling from the sky with some geometric objects, which is an example of rigid passive dyanmics. Physics implemented using ammo.js in CS 476, fall 2019
A 3D mesh of homer simpson waving, created using Laplacian mesh editing
Cel shading Prof. Tralie's head on a box next to a yellow teapot and dino
Table Of Contents
Overview
Class Times / Locations
- Monday/Wednesday/Friday, 2:30PM - 3:20PM Pfahler Hall, 106
Student Office Hours
-
Monday/Wednesday 3:30PM - 5PM, Friday 3:30 - 4:30PM Pfahler Hall, 106
-
Tuesday 7PM - 9PM virtually by appointment
Prerequisites/Requirements
Math 111 or equivalent and CS 274 or CS 275, or permission of instructor
Instructor
Picture courtesy of Kevin Hoffman, CS 476 HW2 Fall 2022. Click here to view live!
I grew up right around the corner in the Montgomery County and attended Upper Dublin High school (class of 2007). I then did my undergraduate degree in Electrical Engineering at Princeton University and my master's and Ph.D. degrees in Electrical And Computer Engineering at Duke University (heavily studying math and CS along the way). I finally started my dream job at Ursinus College in Fall of 2019! You can read more about my interests on my professional web site. Looking forward to getting to know everyone as we work through this course together!
Course Description
Computer graphics is the study and use of computer algorithms to simulate what humans see in the natural world, or to procedurally generate visual art. In essence, computer graphics is an attempt to teach a computer broadly how to do the job of a visual artist (and beyond!). For the purposes of this course, a broad taxonomy of computer graphics is three-fold:
- Rendering, or the generation of images of virtual worlds (including photorealistic images or chosen artistic aesthetic, such as Pixar movies)
- 3D Shape representation and manipulation, or geometric data structures and algorithms to enable efficient and intuitive design of 2D surfaces and 3D volumes in 3D space
- 3D Animation, or the modeling of dynamics in scenes over time, often simulating aspects of physics in our natural world.
This hands on capstone course will be a breadth-first introduction to the world of 3D computer graphics. Rather than teaching the user interfaces of tools such as Blender and Maya, which are commonly used in video game design and movies, and which might be taught in a 3D design curriculum, we instead focus on the technologies themselves behind these programs. As such, the course will have a more mathematical and algorithmic focus. In particular, students will write code to implement vanilla tools from the ground up to design 3D scenes, to perform 3D rendering, to design and manipulate 3D shapes, and to help automate certain aspects of 3D animation, among other things. The course will culminate in a final project related to the digital humanities, or related to video game design for those doing a linked inquiry.
Learning Goals
- Learn the unique issues that arise when implementing mathematical concepts in code.
- Develop creative strategies to debug programs using visual output.
- Articulate the way mathematics, physics, and computer science work together in an application.
Learning Objectives
- Learn to write interoperable code at the interface of multiple, heterogenous languages (particularly the interaction of Javascript with GLSL). This is a very important skill for a professional software developer, since different languages have different strengths, and you will often need to combine them to leverage their joint strengths.
- "Reflect" on how humans see, and compare the tradeoffs made by different algorithms that try to simulate this process virtually.
- Develop fluency with more complicated, object-oriented data structures, such as the half-edge data structure for triangle meshes.
Linked Inquiry with DIGS-250
This course qualifies as a linked inquiry course (LINQ) if you take DIGS-250: Introduction to Game Studies during the same semester. This is optional, but it could be a great opportunity to fulfill the LINQ requirement for the new core, particularly if you're on the game design track in the computer science major.
DIGS-250 and CS-476 examine game design and development from different lens, or ways of asking. Linking these courses may be a good choice for you if you wish to specialize in digital game development. DIGS-250 introduces you to the field of game studies, game culture and effects, the game design and development process, and the basics of video and computer game development. CS-476 is a capstone course in the computer science department that teaches the intricacies of creating 3D computer graphics, animations, and rendering using programming and applied math. It provides more hands-on experience with the technologies used in the computer industry that make digital game design possible.
There are several connected assignments you will complete to LINQ these courses:
- In the second unit of CS-476 on 3D animation, you will explore several assignments that overlap with game design. First, you will create 3D scene graphs in mini assignment 2, which you will use to model 3D virtual worlds hierarchically. Then, in assignment 3, you will implement a Forward and Backward Reaching Inverse Kinematics (FABRIK) system and triangle mesh skinning to move a 3D body model around your screen. These assignments will highlight the linear algebra and vector math that go into creating 3D graphics and animations that appear in digital games. Then, shortly thereafter in DIGS-250, You will create a mini-digital game in Construct, which provides industrial strength implementations of scene graphs and other animation tools.
- In both courses, you will discuss the technical hurdles that prevent virtual reality from being more widely adopted. We will discuss this in CS 476 at the end of the rendering unit once we have a deep understanding of the time complexity of real time rendering pipelines.
- You will create a computer or video game in DIGS-250 for your final game project and in CS-476, you will create a plugin building on that game using code and concepts related to rendering, animation, or shape modeling.
- Final LINQ Reflection: A final reflection in both courses will include questions related to scoping a project and how various interdisciplinary approaches can help you better understand core questions and themes in game studies, culture, and development.
Technology Logistics
We will be using a zoo of technologies in the course, as has become standard in 21st century work environments. Below is a table summarizing what kinds of communications/activities occur via each technology, and below that there are more details on everything. This is admittedly complex, and it will take some getting used to, but it will be worth it once we get it nailed down.
NOTE: I will repeat the same announcements across e-mail and Discord, so you don't have to check all both for announcements.
Class web site (You are here!) |
|
Canvas |
|
Discord |
|
|
*: For privacy reasons, anything of a personal nature, and particularly things that have to with educational records (e.g. grades), need to be kept within Ursinus sanctioned platforms like Outlook e-mail.
Canvas
We will be using Canvas, but only to submit assignments and to store all of the grades. I will also keep all of the due dates current on the calendar there, as students have appreciated this common space for all of their classes in the past.
Discord / Anonymous Questions
To facilitate informal, class-wide discussions about the class, as well as buddy group coding with screen sharing, we will have a Discord channel for the class. My goal is for this to turn into a flourishing area to work through confusion and to share ideas as a group.
Voltaire Anonymous Questions
All questions are welcome! To help break down the barrier of asking questions, we will be using the chat bot Voltaire so students can ask questions anonymously. This has worked very well in the past. To use Voltaire, send a direct message to the Voltaire bot with the following syntax:
where channel_name
is the name of the channel you want to post to, and message
is the text you want to send. Below is an example:
Answer:
\[ u \cdot v = |u| |v| \cos(\theta) \]
In Class Anonymous Questions
In addition to Voltaire, I'll be running a bot during class that accepts questions to help quieter student who want to participate anonymously to do so. I've found this sort of thing to be particularly helpful with students from underrepresented groups. To ask a question during class, visit http://mathcs.ursinus.edu/question.
Readings
There will be no official textbook for the course. Instead, I will be teaching you with occasional pre-class modules, and I will sometimes link to supplementary resources from the schedule.
Deliverables
Assignments
The bulk of the grade in the course will be earned by completing roughly 4 small scale individual programming assignments, and a two large scale programming assignments. Be sure to start them early! Note that collaboration and sharing rules differ slightly between the individual assignments and the large assignments.
Programming Languages
Javascript
Most assignments will be written in Javascript, but no assumption will be made about prior Javascript knowledge! Those who can write code in any one of Java, C++, or Python can quickly learn the differences (it has syntax like Java but the typing/runtime/flexibility of Python). There are four main reasons for using Javascript in the course:
- It is widely used in modern web programming, so it will be useful in many projects beyond this course
- It requires no special software to run, and it works in the browser. As a result, it makes it easy to develop on nearly any computer, and it allows students to share their work online
- Since it runs in the browser, user interfaces are easy to design for the assignments
- People on the more mathematical side get to learn powerful web graphics programming techniques for communicating their ideas in the future with live demos on their web sites, rather than static images
GLSL
Students will also make use of the OpenGL Shading Language (GLSL), which has syntax and programming paradigms similar to C, but which is designed for the massively parallel hardware of the GPU. The language is a bit idiosyncratic, but it is used heavily in industry, and it's possible to do incredible things with it.
Debugging Principles
If you're taking this course, then you've certainly had experience with debugging, but it is a skill you will still need to work on, so you should expect to hit some roadblocks. In fact, it is time consuming and difficult even for very experienced programmers. So do not be hard on yourself if your programs don't work the first time around (they rarely do, even if you've been programming for decades!).
I have had over 20 years of programming experience at this point, and I have learned the hard way what works and what doesn't. Here are my main debugging principles in a nutshell
- Leave yourself adequate time to work on the assignments, because the amount of time it takes to resolve issues can be unpredictable.
- Write small bits of code and test them right away. Don't write a wall of code and test it, only to find out that something doesn't work. By contrast, if you write bits at a time, you will know right away what code you wrote caused things to be wrong.
- Apply the scientific method: have in mind hypothesis for what might be wrong, design a quick experiment to test your hypothesis, draw conclusions, and repeat.
- Fail quickly. If you're working on a larger scale program that processes a lot of data, do not wait for several minutes for data to load every time you make a small change. Instead, come up with the minimum, simplest experiment you possibly can which will tell you whether your code is correct or not.
- Don't forget that you can write code to help you automate debugging. Otherwise, it's sometimes tedious to repeat the same steps over and over again as you're changing things.
- Know when to walk away. We often get stuck in loops wanting to resolve things, but then our logical thinking goes out the window and we start randomly trying different things. Even if you're up against the clock, it is often good to take a little break and come back again a little bit later.
Pre-Class Modules
Since the material from this class is so different from an ordinary CS class, I want students to have thought about it a bit before coming to class so we can answer deeper questions and do more interesting exercises. Therefore, I will be following a largely flipped model with 2-3 modules per week that walk you through concepts with videos I made, followed by autograded Javascript/WebGL/Canvas/Other exercises. I worked hard on these, so I hope you enjoy them, and I hope it's an opportunity for you to study at your own pace!
NOTE: These modules are meant to be low stakes compared to the assignments, so please reach out to me or post on discord to the rest of the class if you get stuck on anything. I'm looking forward to some lively discussions as students work through them!
Schedule
Outlined below is the schedule for the course, including lecture topics and assignment due dates. All assignments are due at 11:59PM on the date specified. The specific dates of different topics are subject to change based on the pace at which we go through the course.
Lecture | Date | Lectures (click for notes) | Readings/Links | Assignments/Deliverables |
Geometric PrimitivesThe course will start with an overview of some important mathematical concepts from linear algebra and vector geometry to get everyone on the same page. These are the basic building blocks that will be used again and again in the rest of the course. The pace at which we go through this section will adapt to the background knowledge of the students. We will have two small individual programming assignments in this section to get everyone used to programming with geometry in Javascript. Big Concepts And Questions:
| ||||
1 | Mon 8/26/2024 | Course Overview, Intro To Javascript, Scoping And Infinite Loops in Javascript | Javascript Resources | |
Tue 8/27/2024 | Software Environment Configuration Due | |||
Tue 8/27/2024 | Survey / Discord Post due | |||
Tue 8/27/2024 | Syllabus Quiz Due | |||
2 | Wed 8/28/2024 | Basic Rasterization and Javascript | Module 1: Javascript Due Before Class | |
3 | Fri 8/30/2024 | Begin Vectors: Vector Addition, Dot Products | Math Resources:
| Module 2: Vectors And Dot Products Due Before Class
Assignment 1: Geometric Primitives (Individual) Out |
4 | Mon 9/2/2024 | Projection, Cross Products, Intersecting Circles | Module 3: Projections, Cross Product, Normals Due Before Class | |
5 | Wed 9/4/2024 | Barycentric Coordinates, Triangle Interior Point Testing, Normals | ||
6 | Fri 9/6/2024 | Lines, Rays, And Planes | Module 4: Lines/Rays/Planes Due Before Class Assignment 1 Part 1 Due | |
7 | Mon 9/9/2024 | Ray Intersect Plane & Ray Intersect Sphere | Module 5: Ray Intersect Plane/Triangle/Sphere Due Before Class | |
8 | Wed 9/11/2024 | 2D Matrix Transformations, Composition of Transformations, Inverses | Module 6: 2D Matrices Definition, Composition, And Inverses due before class | |
9 | Fri 9/13/2024 | Matrix Translations And Homogeneous Coordinates, Combined Rotations/Translations, Begin 3D Matrix Transformations | Assignment 1 Part 2 Due | |
3D AnimationIn this section, we will cover some of the basics of 3D animation at a surface level. This is an incredibly broad field, so we will focus primarily on the math underlying a subset of professional animation tools such as Blender and Maya, rather than the tools themselves. Big Concepts And Questions:
| ||||
10 | Mon 9/16/2024 | JSON, Hierarchical Transformations, Scene Graphs | Module 7: Homogeneous Coordinates, 3D Transformations, And Scene Trees due before class
HW2a: Euler Angles and HW2: Scene Trees Out | |
11 | Wed 9/18/2024 | Scene Graphs Continued | ||
12 | Fri 9/20/2024 | Finish Scene Graphs, Euler Angles And Gimbal Lock | ||
Sun 9/22/2024 | HW2a: Euler Angles Due | |||
13 | Mon 9/23/2024 | Axis-Angle Rotation, Rodrigues' Rotation Formula | ||
14 | Wed 9/25/2024 | Complex Numbers And Rotation, Begin Quaternions | ||
15 | Fri 9/27/2024 | Quaternions/SLERP | Module 8: Axis-Angle Rotation And Quaternions Due Before Class | |
Sun 9/29/2024 | HW2: Scene Graphs Due | |||
16 | Mon 9/30/2024 | MOCAP, Forward And Backward Reaching Inverse Kinematics (FABRIK) | Assignment 3: Character Animation (Group) | |
17 | Wed 10/2/2024 | Catchup Day | ||
18 | Fri 10/4/2024 | Rigging/Skinning | ||
19 | Mon 10/7/2024 | Basic Physics for Rigid Body Simulations | ||
20 | Wed 10/9/2024 | Basic Collision Detection And Response, Convex Hulls/The Separating Axis Theorem | Assignment 3 Part 1 Due | |
3D Shape RepresentationsNow that we know how to represent fundamental geometry numerically, we will discuss data structures for representing more complicated custom shapes, which form the backbone of modern CAD and 3D modeling applications. The first of these is the triangle mesh, which is a discrete approximation of a smooth 2D manifold surface consisting of a collection of triangles connected to each other at a common edge. We will then discuss continuous representations, including subdivision surfaces. We will conclude this unit with implicit surfaces, which are volumetric descriptions of surfaces which allow for easy boolean operations and natural design of neat shapes such as water drops. And as we will see, implicit surfaces lead to a very particular, smooth aesthetic via "metaballs" (not "meatballs"!). Big Concepts And Questions:
| ||||
21 | Fri 10/11/2024 | Triangle Meshes, Triangle Mesh Topology: Manifold, Boundary, Euler Characteristic |
| Assignment 3: Bones And Local Coordinate Systems Due |
-- | Mon 10/14/2024 | Fall Break | No CS 271 Class. Enjoy the break! | |
-- | Wed 10/16/2024 | Fall Break | No CS 271 Class. Enjoy the break! | |
22 | Fri 10/18/2024 | Mesh Orientation, Mesh Storage Requirements, Basic Mesh Data Structures | Module 10: Topological Properties of Manifold Meshes due before class | |
23 | Mon 10/21/2024 | Finish Basic Mesh Data Structures, Begin Half Edge Data Structure | Assignment 3 Part 2 Due
Assignment 4: Polygon Mesh Processing (Group) Out | |
24 | Wed 10/23/2024 | Half-Edge Boundaries, Per-Vertex Normals | ||
25 | Fri 10/25/2024 | Half Edge Code, Begin Edge Collapse | Module 11 Part 1: Mesh Data Structures due before class | |
26 | Mon 10/28/2024 | Mesh Simplification, Begin Subdivision Surfaces | Assignment 4 Required Tasks Due | |
27 | Wed 10/30/2024 | Finish Subdivision Surfaces | ||
28 | Fri 11/1/2024 | Implicit Surfaces/ Marching Cubes | Module 12: Heightmaps And Implicit Surfaces due before class | |
3D RenderingIn this part of the course, we discuss how to use a computer to generate images of 3D geometric scenes, a process known as "3D rendering." The ultimate goal of such techniques is to make photorealistic images that look like what a camera might take in the real world, though, as we will see, this is quite challenging. In the process of attempting to meet this goal, we will think about how light bounces around in the real world and how humans see that light, and we will discuss algorithms that attempt to mimic this. To this end, students will start off implementing a ray tracer, which is a non-realtime rendering technique, but which allows for visually stunning effects with reflection, refraction, and shadows. We will then talk about the more traditional rendering pipeline, which leads to visually inferior but interactive images. Students will learn the basics of the WebGL / GLSL Javascript API, which implements this rendering pipeline. Big Concepts And Questions:
| ||||
29 | Mon 11/4/2024 | Shaders And GLSL: Attributes, Varying, Uniforms |
| Module 13: GLSL And Shaders parts 1 and 2 due before class
Assignment: Shaders, Image Processing, And Music Visualizers Out |
Tue 11/5/2024 | Assignment 4 Final Submission Deadline | |||
30 | Wed 11/6/2024 | Animations with Shaders, Textures, Image Processing with Shaders | Module 13: GLSL And Shaders part 3 due before class | |
31 | Fri 11/8/2024 | Complex Numbers And Shaders: Julia Sets And Mandelbrot Sets | ||
32 | Mon 11/11/2024 | Local Illumination: Lambertian/Phong Illumination Gouraud Shading, Phong Shading | Module 14 Local Illumination: Exercises 1 and 2 Due | |
33 | Wed 11/13/2024 | Intro To Ray Tracing: 3D Perspectives, Ray Casting, Sphere Normals | Module 14 Local Illumination: Exercises 3 Due | |
Thu 11/14/2024 | Module 15: Ray Casting Due | |||
34 | Fri 11/15/2024 | rayIntersectScene, Ray Instancing, Normal Matrices | Assignment 5 Due
Assignment 6: Real Time Ray Tracing Out | |
Sun 11/17/2024 | Module 16: Ray Tracing / Global Illumination Due | |||
35 | Mon 11/18/2024 | Global Illumination: Multiple Lights, Shadows, Specular Reflections, Refraction/Transmission | Final Project Proposal Due | |
36 | Wed 11/20/2024 | Object-first rendering: The Camera Matrix, Perspective/Viewing matrices, Depth Sorting |
| Module 17: Perspective Projections Due Before Class |
37 | Fri 11/22/2024 | Cel Shading / Toon Shading, Hidden Surface Removal/Culling | ||
38 | Mon 11/25/2024 | Object-First Rendering: Bump Maps, Displacement Maps, Shadow Maps Beginning Blender | Assignment 6 Part 1 Due | |
-- | Wed 11/27/2024 | Thanksgiving | No CS 271 Class. Enjoy the break! | |
-- | Fri 11/29/2024 | Thanksgiving | No CS 271 Class. Enjoy the break! | |
39 | Mon 12/2/2024 | Shaders And Materials in Blender | ||
40 | Wed 12/4/2024 | The Rendering Equation, Monte Carlo Path Tracing, Examples in Blender | Assignment 6 Part 2 Due | |
41 | Fri 12/6/2024 | Virtual Reality, three.js And Augmented Reality | ||
42 | Mon 12/9/2024 | Dynamic 3D Gaussians | Assignment 6 Part 3 Due
Last day to drop courses with a "W" | |
Fri 12/16/2021 | Final Project Due | |||
Fri 12/16/2021 | Final LINQ Reflection Due (for those doing the Linked Inquiry) |
Grading
Breakdown
Class Engagement / Pre-Class Prep | 25% |
Programming Assignments | 65% |
Final Project | 10% |
Deadlines Policy
I have been very flexible in the past, but I have observed that this is usually to the detriment of students who let certain assignments drag on well past the deadlines and fail to move onto subsequent assignments, ultimately failing the course or getting artificially low grades that do not reflect their abilities. Moving forward, I would like to prevent this, and I would like all students to learn how to triage and submit "good enough" work on individul assignments so they can keep moving, and to practice valuable accountability skills that will benefit them in future endeavors past Ursinus. At the same time, I recognize that many things happen outside of the classroom that are beyond your control; life is inherently difficult and unpredictable, particularly for those who come from different backgrounds and who have responsiblities beyond the classroom. Therefore, I am building an oxymoronic "rigid flexibility" structure into the course, without exceptions outside of official accommodations. The rules are as follows:
-
All programming assignments are due at 11:59PM EST on the date(s) stated on the schedule
-
You have 5 free late days to use on programming assignments throughout the semester. These will go down to the decimal point if you submit minutes or hours after a deadline, so students don't have to fret about submitting at, e.g., 12:05 AM. You will get extra credit for any days you do not use, but no work will be accepted once the lateness days are used up
-
To help you adjust to the above policy, I will drop the lowest score on a mini-deadline in the assignments category by the end of the semester. For instance, HW6 has 3 mini deadlines. If you miss the third HW6 deadline and get a 0, but you hand in both other parts of HW6 and all parts of all other assignments on time, then I will ignore the third deadline on HW6.
-
Pre-class content modules that are submitted after class will get half credit.
To reiterate, you will find lots of flexiblity built into these policies, but they are designed to prevent you from getting too stuck on an individual assignment, and also to incentivize people to come prepared for lively class discussions. I hope we will all have more positive experiences moving forward with this.
Letter Grades
Letter grades will be assigned on the scale below at the end of the course.
|
|
|
|
|
Classroom Environment
Inclusive Environment
Computer science is a field that has historically been and continues to be steeped in inequalities. We have a double dose of this in computer graphics, since, first of all, modern work in this area is adjacent to AI and machine learning, which themselves have added fuel to the fire. Moreover, the "gamer culture" that has been adjacent to computer graphics has had a lot of issues, most prominently the impact of the Gamergate campaign against women in the field. So there is a special role and responsibility that those who have graphics knowledge have to play in being good stewards around both the technology and within work environments.
Within class interactions, my goal is to foster a environment in which students across all axes of diversity feel welcome and valued, both by me and by their peers. Axes of diversity include, but are not limited to, age, background, beliefs, race, ethnicity, gender/gender identity/gender expression (feel free to tell me in person or over e-mail which pronouns I should use), national origin, religious affiliation, and sexual orientation. Discrimination of any form will not be tolerated.
A slightly more subtle thing that we want to watch out for in class is not to assume anything about others based on implicit biases. I have heard from quieter students at Ursinus from different backgrounds in the past that they sometimes feel their contributions aren't valued from their group members and that they're talked over during collaborations. So be mindful of this and be sure to curb this behavior in yourself if you notice it...this is something immediate you can to do help stem the leaky pipeline in our field.
.Furthermore, I want all students to feel comfortable expressing their opinions or confusion at any point in the course, as long as they do so respectfully. As I will stress over and over, being confused is an important part of the process of learning computer science. Learning computer science and struggling to grow is not always comfortable, but I want it to feel safe. In other words, I will regularly keep you at the boundary of your comfort zone with challenging, real-world assignments, but I want you to feel comfortable with me and your peers and respected as a learner during the process.
Finally, I am aware that, particularly during the pandemic, there are a variety of factors that may make it difficult to perform at your best level in class. At Ursinus, we are fortunate to have quite a mix of students from different backgrounds, many of whom need to work part time, and an increasing number of whom are commuters and have family obligations. If you find yourself having difficulty performing at the level that you want and/or turning assignments in on time because of any of these issues, communicate with me, and we can come up with a solution together (I will gently reach out if I notice any slips even if you don't communicate). This is an exciting capstone course, and I want to work to keep your excitement alive, regardless of your personal circumstances. We will get you through the course as long as the lines of communication are open and we work together. You belong in CS!
Math Helproom (Pfahler 102) Work Jams 🍇🍓🫐🫙🎵 🎵 🎵
I've witnessed amazing collaborations happen in my office hours the past two years holding them in classrooms, and I want to encourage that kind of community to continue more outside of my own office hours. To that end, each student will be required to show up at least 3 times to the math helproom (Pfahler 102) to work with each other. This is your space. I'll have snacks stored in that room, so your job will simply be to show up, take out the snacks, and stay for at least two hours and work. You can sign up for any evening throughout the semester, but you must sign up for at least one evening before midterms. I will be having the same requirement in my CS data structures class this fall, so there should be some great cross-pollination.
When you attend one of these, submit an entry on one of the assignments on canvas indicating the date you went. Also, if you're comfortable, take a selfie with other people there and post it on the Maker club discord!
Note on Commuter Students
If you are a commuter student, you are welcome to earn your 3 points by going to 3 in-person sessions. However, I understand this might be difficult logistically. So commuter students only have to attend one in person. For the other two points, commuter students have the option to provide answers to 2 questions on discord for each point, for 4 question answers total.
Participation
Classroom Attendance And Etiquette
Students are expected to attend class in person. We're shooting for engagement over mere attendance; students are expected to be active in class exercises and to be fully invested in the class (i.e. no internet browsing). Students who are unable to attend class for significant reasons (whether isolation or quarantine for students who have received a positive test, those experiencing Covid-related symptoms while awaiting test results, or other issues that make it difficult to attend class) should work pro-actively to make up any class exercises that they missed. To help with this, I will do my best to put up Youtube videos from other instructors on topics that we cover.
Finally, students are expected to follow any college policy requiring mask wearing on campus, in addition to following any guidance faculty provide for their individual classes.Masks should be available in every academic building, if needed.
Maximizing Your Communal Experience
Here are ways students can maximize their experience as a class community, and which could lead to extra credit in certain situations.
- Helping to teach a student a topic during office hours.
- Certain calls for participation in class
- Particularly helpful or insightful messages on Discord
- Finding mistakes in the book or on the assigned homework
Discord Communication Policy
Since this is a class-wide communication, the following rules apply to online communication- Students are expected to be respectful and mindful of the classroom environment and inclusivity standards. They are equally applicable to a virtual environment as they are in class.
- Students are not permitted to publicly share direct answers or questions which might completely give away answers to any homework problems. When in doubt, send me a direct message on Discord.
- I will attempt to answer questions real time during my student office hours. Otherwise, I will make every attempt to respond within 24 hours on weekdays. I cannot be expected to respond at all on Saturdays or Sundays or outside of 10AM-8PM on weekdays, so plan accordingly. (Of course, students can and should still respond to each other outside of these intervals, when appropriate).
The points above are part of a more general term referred to as "netiquette." Refer to the chart below, provided by Touro College
Collaboration Policy
Overall Philosophy
The collaboration policy for this class walks the line between encouraging openness and collaboration during a challenging learning process, while also making sure that each students is progressing technically at an individual level without relying on 100% on other classmates. Communication between students is allowed (and encouraged!) on most assignments, but it is expected that every student's code or writeups will be completely distinct. General rules are as follows:
-
Do not copy code off of the Internet
-
Use of ChatGPT or other large language models is not permitted in this class. Later in your career once you've mastered the fundamentals we're covering, it's more appropriate to use it as a co-pilot. But you have to learn how to do it on your own first. Furthermore, since these models are optimized to sound convincing rather than to output correct information, it's quite likely that they will introduce bugs into code that they generate. So it's likely it will be easier to write your code from scratch anyway.
Finally, on a personal note, I have a lot of responsibilities to juggle in my job. Please don't waste my time by sending me code that's not yours. As those who have had me before know, I put a lot of time into feedback to help you grow. Take advatage of that.
-
Please do cite any sources in addition to materials linked from the course website that you used to help in crafting your code and completing the assignment
Assignment Buddies
To encourage collaboration, students will be allowed (not required) to choose one or more "buddies" to work "near" during assignments. Students are still expected to submit their own solutions, but they are allowed to provide substantial help to each other, and even to look at each others' code during the process. Students should indicate their buddies in the README upon assignment submission. Let me know if you would like a buddy but are having trouble finding one.
Individual Assignments
There will be a few assignments that students are expected to complete on their own with no communication with anyone but me. They will be limited in number, but this will be just to make sure every individual students is progressing technically. You can think of them like an open-ended, open-book take-home quiz where you can ask me questions.
Collaboration Scenarios Table
Below is a table spelling out in more detail when and how you are allowed to share code with people (table style cribbed from Princeton CS 126).
Click on each button below to view the collaboration parameters for individual and budd (group) assignments
Buddy/Group Assignment
YOUR BUDDY |
COURSE STAFF |
CS 477 GRADS |
CLASS- MATES |
OTHER PEOPLE |
|
---|---|---|---|---|---|
DISCUSS CONCEPTS WITH: | ✔ | ✔ | ✔ | ✔ | ✔ |
ACKNOWLEDGE COLLABORATION WITH: | ✔ | ✔ | ✔ | ✔ | ✔ |
EXPOSE YOUR CODE/SOLUTIONS TO: | ✔ | ✔ | ✔ | ✘ | ✘ |
VIEW THE CODE/SOLUTIONS OF: | ✔ | * | ✘ | ✘ | ✘ |
COPY CODE/SOLUTIONS FROM: | ✘ | * | ✘ | ✘ | ✘ |
Individual Assignments
YOUR BUDDY |
COURSE STAFF |
CS 477 GRADS |
CLASS- MATES |
OTHER PEOPLE |
|
---|---|---|---|---|---|
DISCUSS CONCEPTS WITH: | N/A | ✔ | ✘ | ✘ | ✘ |
ACKNOWLEDGE COLLABORATION WITH: | N/A | ✔ | ✘ | ✘ | ✘ |
EXPOSE YOUR CODE/SOLUTIONS TO: | N/A | ✔ | ✘ | ✘ | ✘ |
VIEW THE CODE/SOLUTIONS OF: | N/A | * | ✘ | ✘ | ✘ |
COPY CODE/SOLUTIONS FROM: | N/A | * | ✘ | ✘ | ✘ |
* You may view and copy code from class exercises and class resources without citing them, but you should not copy solutions from previous semesters that the instructor may have provided
NOTE: The terms "exposing" and "viewing" exclude sending or ingesting electronically, which would be considered copying. Exposing and viewing are normally done in the context of in-person working or in the help room. When students work remotely, what this means is that buddies can screen share as they are working through things, but they should not send code directly.
NOTE ALSO: "Other people" includes internet sources.
If the collaboration policy has been violated in any way, regardless of intent, then it may be an academic dishonesty case, and it will be referred to the Associate Dean for Academic Affairs. I am required to make this report in every occurrence, so it is best to speak with me first if there are any questions about the policy or expectations. You should feel free to have these conversations with me anytime prior to making your submission without fear of penalty.
On a more personal note, though a willful violation of academic honesty may seem merely transactional to a student, faculty take violations very personally, as they are disrespectful to the time and effort we put into our courses. I would also like to emphasize that your reputation is much more important than your grades. The recommendations we as faculty write go a long way, and we are much happier to write positive recommendations for students with lower grades who show grit and growth than we are to write recommendations for students with higher grades who have cheated.
Other Resources / Policies
Accommodations
In addition to our general awareness diversity, Ursinus College is also committed to providing reasonable accommodations to students with disabilities. Students with a disability should contact the Directory of Disability Services ASAP at disabilityservices@ursinus.edu. They are located in Lower Wismer. Visit this link for more information on the process. I will do my best to accommodate your requests, and they will be kept completely confidential.
One on One Tutoring
One on one tutoring for up to two hours per week is available through the institute for student success. Click here to fill out a Qualtrics survey if you'd like to take advantage of this.
Let's Talk
Mental health care is increasingly recognized as a crucial service for the undergraduate population. Visit this link for more information about complementary counseling services provided by the college. The Wellness Center has a virtual drop-in crisis hour at 2-3 pm each weekday, which is available for students in crisis who need to be seen immediately by a clinician. If you are still hesitant to go, take me (Professor Tralie) as an example of someone who has benefited greatly from talk therapy and medication in the past. I am happy to discuss this in student office hours in more detail.
Beyond that, please have a look at this document for a variety of resources related to mental health at Ursinus.
Finally, be aware that there are resources outside of mental health care proper to address some core sources of mental stress and strain, such as time management and writing at the Institute for Student Success and the Center for Writing And Speaking.
Title IX
Title IX is a federal law, under which it is prohibited to discriminate on the basis of gender. The Title IX Coordinator is available to receive inquiries and to investigate allegations in this regard.
Inclement Weather Policy (aka COVID Policy)
In the event that the College closes due to inclement weather or other circumstances (such as a COVID lockdown), our in-person class sessions, drop-in student office hours, or other meetings will not be held. I will contact you regarding our plan with regard to rescheduling the class or the material, any assignments that are outstanding, and how we can move forward with the material (for example, any readings or remote discussions that we can apply). If necessary, I may schedule online virtual sessions in lieu of class sessions, and will contact you with information about how to participate in those. I will communicate this plan to the department so that it can be posted on my office door if it is feasible to do so. This policy and procedure will also apply in the event that the College remains open but travel conditions are hazardous or not otherwise conducive to holding class as normal. Should another exigent circumstance arise (for example, illness), I will follow this policy and procedure as well.