CS 271: Data Structures And Algorithms
Ursinus College, Fall 2023
Instructor: Christopher J. Tralie
Vincent Ha, CS 371 Spring 2022, eating an onion to help demonstrate O(logN + h) half plane range searching with fractional cascading
A minimum spanning tree on a stipple pattern of Darth Vader, by Sean Sharo in CS 371 Spring 2022
Identifying plant cells efficiently with the help of union find. Students will implement this from scratch in homework 2
An example of the 2-opt heuristic used to create traveling salesperson art of a family of Emperor penguins.
A screenshot from an RPGMaker game by Jay Kosa and Jonas Ling explaining the alpha complex, CS 271 Fall 2022. Students can choose to do something similar for their final in the class.
Shortest paths from a point on a triangle mesh that an ant would take, computed using a variant of Dijkstra's algorithm
Table Of Contents
Overview
Class Times / Locations
- Monday/Wednesday/Friday, 11AM - 11:50AM in Olin Hall, 108
Student Office Hours
-
Monday/Wednesday 3:30PM - 5PM, Friday 3:30 - 4:30PM Pfahler 107
-
Tuesday evening 7PM - 9PM over zoom in 20 minute blocks, by appointment
Prerequisites/Requirements
Math 111 or equivalent, and a grade of C- or higher in CS 174
Instructor
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!
Lab T.A.: Matt Wallace
Matt Wallace is an Ursinus senior and a CS 271 veteran. He will be grading most of the labs in this class, and he will be at many of my office hours to help.
Course Description
The word algorithm is often used as a catch-all term for any "recipe," or sequence of steps, that a computer follows to solve a problem. Alternatively, an algorithm can be defined as an abstract computer program that takes an input and gives an output. For example, an algorithm to solve a Sudoku puzzle would take as input a Sudoko board and would output the numbers that go in the blanks.
Coming up with algorithms that are guaranteed to give correct outputs, or provably correct is already a difficult enough problem. Computers are very simple minded compared to humans, so we have to work hard to break down problems into very concrete steps that they can run. In this course, we will learn a few strategies to attack different classes of problems in this manner, and students will practice solving problems from scratch. But we will go even further by analyzing the efficiency of different algorithms using rigorous mathematical tools, such as Big-O Notation. We will also explore data structures (e.g. hash tables and ordered binary trees), as well good pairings between data structures and algorithms that lead to efficient, elegant implementations.
There are six units in the course, and each unit will culminate in an assignment that showcases one of the main algorithms or data structures in that unit. The assignments for each unit will be as follows:
- Hash tables and applications to natural language processing
- Word autocomplete from partially typed words
- Resizing images without blurring content
- Fair elections of favorite movies
- Construction of phylogenetic trees from DNA sequence data
- Traveling salesperson art
Students will implement algorithms in Python, since this language is very compact syntactially and very close the mathematical pseudocode we use to reason about algorithms in the abstract. But the language is secondary to reasoning about the algorithms themselves. Still, it gives us an opportunity to ensure that all Ursinus students leave with some Python knowledge.
NOTE: CS 271 used to be CS 371. The content of the two is largely the same, but this version has more of a focus on implementations and less theory, and as such, it does not require discrete math as a prerequisite. Instead, students will get a crash course on some important math concepts (e.g. logs, factorials, triangle numbers) during the first week, and students will not have to do as many proofs on the assignments. The benefit of this change is that students can take this foundational topic earlier in their CS trajectory at Ursinus, making further courses like operating systems, databases, and artificial intelligence more accessible.
Learning Goals
- Develop a sense for algorithm efficiency and the synergy between algorithms and data structures.
- Learn how to incrementally design, implement, and test efficient algorithms to solve a problem.
Learning Objectives
- Implement data structures, such as queues, linked lists, hash tables, trees, and graphs, using object-oriented paradigms.
- Analyze the runtime and memory complexity of algorithms using rigorous mathematical foundations, including big-O notation, as well as the lesser-known big-gamma, big-theta, and little-o notations.
- Develop familiarity with common strategies for algorithm design, including divide and conquer, dynamic programming, and greedy approaches.
- Apply algorithms to various problems in the sciences and digital humanities.
- Practice patient problem solving by developing comfort with the edit -> compile -> run loop, along with intermediate debugging skills.
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 |
|
Zoom |
|
|
*: 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: N*(N-1)/2), which is related to the triangular numbers
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.
Other Rules
Do not send me direct messages or anything of a sensitive nature (e.g. grades) over Discord. Instead, use e-mail for that, since those transactions are locked down better under Ursinus control.
Readings
The official textbook for this course is A First Course on Data Structures in Python by Don Sheehy, which is freely available online at this link. The author of the book has a very similar background to me (Princeton CS undergraduate, researcher in computational geometry and topology), so we have a similar set of topics we'd like to emphasize. Still, since we have covered some of the content in CS 174, we will go slightly beyond the book.
Deliverables
I'm very excited about the assignments I have come up with for this class and refined over the years, and I hope you find them challenging and rewarding applications of what we're learning.
NOTE: While I try to cover as much of the topics in class as I can with assignments, there's not enough time for me to cover everything without completely overwhelming you during the semester. So there are some things I will do in class only, but they are important for your knowledge as you prepare for coding interviews and future CS classes.
Labs
We will have labs implementing fundamental data structures from scratch, which will build up to larger assignments. Sometimes we will devote a whole class to these, and other times we will devote only part of a class to these.
Programming Assignments
The bulk of the grade in the course will be earned by completing 6 medium scale programming assignments, one for each unit, which will build on the data structures you create in the labs. Be sure to start them early, since debug time can often be unpredictable! Refer to the collaboration and sharing rules for these assignments.
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 nearly 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.
Class Engagement / Pre-Class Work
It's easier to learn a difficult subject like data structures by going through a number of examples on each topic beyond the examples in the large assignments. Because of this, we will often do small programming exercises and experiments in class related to a topic that we're learning. At times, I may ask you to read over a description of an exercise or to read some notes about a new topic before class so we can go more deeply into the examples. I may also ask you to hand in something small related to the class exercises to make sure you were putting effort in during class. This will all make up a small part of your grade in the class.
Final Assessment
Students have some autonomy in the final assessment for the class. There are two options. Brief descriptions are below, but you should click here to read more in-depth information. Both options are designed to give students concrete help in their future job searches, either by strengthening interview skills or by contributing to their software portfolios.
Option 1: Mock Coding Interview
It is a very common practice in interviews for software engineering jobs for recruiters to administer a live coding module, in which applicants implement one of the algorithms we went over in this class in the context of some specific problem. I will administer a half hour coding interview in Python to students who choose to do this assessment, and anything in the course is fair game. This assessment should be of particular interest to students who want to go into software engineering industry. Click here to view more information.
Option 2: Geometric Algorithm Multimedia Expo
One of the areas that is "tangential" to my research is computational geometry, which is really CS 271 meets geometry. It studies algorithms that are useful in computer graphics, robotics, video game design, city planning, map making, and beyond. Every year there is a "multimedia expo" at the Symposium on Computational Geometry, which is the flagship computational geometry research conference, in which groups of people submit video sketches, presentations, or web apps demonstrating an algorithm. Students in this class who choose this option will do the same thing, and projects that are good enough will be submitted to the conference next year! (This has happened once before for an outstanding project). Click here to read more about this option and to see some ideas I have of projects that could work for this class.
Option 3: Data Structure Serious Game
Students can also choose to make a video game that explains a data structure in the course or beyond. Ideally, there will be a natural coupling between the gameplay and the data structure so that the player can learn the data structure simply by playing the game, but it shouldn't just be a completely dry step through of the data structure.
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 | Lectures (click for notes) | Readings/Links | Assignments/Deliverables | |
Intro To Python, Abstract Data Types, And Complexity | ||||
1 | Mon 8/28/2023 | Course Intro, Exponential Functions, Subset Sum | ||
Tue 8/29/2023 | Syllabus Quiz Due, Survey And Discord Post Due | |||
2 | Wed 8/30/2023 | Logs, Loops in python, |
| Python Module Parts 1-2 Due Due before class |
3 | Fri 9/1/2023 | Continue Lab 1, Python Classes And Objects, The ADT Concept, Set ADT |
| Python Module Parts 3-6 Due Due before class
Pop stars survey for HW4 due |
4 | Mon 9/4/2023 | (Doubly) Linked Lists, Stack And Queue ADTs |
| Lab 1 Due |
5 | Wed 9/6/2023 | Hash Tables: The Ultimate Needle in A Haystack Data Structure | ADT Module Due before class
Homework 1: Hash Maps And Tweets Out | |
6 | Fri 9/8/2023 | The ArrayList ADT and Data Structure, Amortized Analysis | ||
7 | Mon 9/11/2023 | Disjoint Sets And Union Find | Homework 1 Parts 1-2 Due | |
8 | Wed 9/13/2023 | Lab 2: The Union Find Algorithm |
| Disjoint Set / Union Find Module Due Before Class |
9 | Fri 9/15/2023 | Begin Asymptotics: Big-O, Polynomial, Exponential, Factorial | Big-O Module Due Before Class | |
10 | Mon 9/18/2023 | Little o, Big Omega, Little Omega | Homework 1 Parts 3-5 Due
Lab 2 Due Homework 2: Plant Cell Segmentation Out | |
Recursion And Dynamic Programming | ||||
11 | Wed 9/20/2023 | Complexity Hierarchies, Union Find Recursive Solution | Recursion Module due before class | |
12 | Fri 9/22/2023 | Lab 3: Towers of Hanoi, Begin String Edit Distance | Edit Distance Module due before class | |
13 | Mon 9/25/2023 | String Edit Distance, Memoization, Dynamic Programming |
| Lab 3 Due |
Tue 9/26/2023 | Homework 2 Parts 1 and 2 Due | |||
14 | Wed 9/27/2023 | Backtracing, Longest Common Subsequence | Homework 3: Seam Carving Out | |
15 | Fri 9/29/2023 | Continue backtracing |
| Homework 2 Part 3 Due |
16 | Mon 10/2/2023 | Making Change, Recursively Backtracing Multiple Solutions | Homework 3 Dynamic Programming Rules Due Before Class | |
17 | Wed 10/4/2023 | Knapsack Problem | Longest Common Subsequence Module Due | |
Sorting, Selection, And Shuffling | ||||
18 | Fri 10/6/2023 | Sorting Basics: Permutations, Insertion Sort, Bubble Sort |
| |
19 | Mon 10/9/2023 | Lab 5: Merge Sort, Kendall Tau Examples | Sorting Basics Module Due before class
Homework 3 Compute Optimal Seam, Backtrace Optimal Seam Due | |
20 | Wed 10/11/2023 | Quick Sort, Stability of Sorts | ||
Thu 10/12/2023 | Lab 5 Due | |||
21 | Fri 10/13/2023 | Linear Time Selection | Homework 3 Final Submission | |
-- | Mon 10/16/2023 | Fall Break | No CS 271 Class. Enjoy the break! | |
22 | Wed 10/18/2023 | Ω(NlogN) Barrier for Comparison-Based Sorts, Counting Sort, Begin Radix Sort | Homework 4: Fair Elections of Pop Stars Out | |
23 | Fri 10/20/2023 | Finish Radix Sort, Fisher-Yates Shuffling | ||
Tree Data Structures And Algorithms | ||||
24 | Mon 10/23/2023 | Binary Trees: Preorder/Inorder/Postorder (Module), Contains/Add (Class) | Trees Module due before class | |
25 | Wed 10/25/2023 | Drawing Binary Trees, Begin Tree Removal | HW4 Part 1 Due | |
26 | Fri 10/27/2023 | Lab 6: Binary Search Tree Removal |
| |
27 | Mon 10/30/2023 | Tree Rotations | ||
28 | Wed 11/1/2023 | Introducing self-balancing binary trees, AVL Trees |
| HW4 Part 2 Due
HW5: Phylogenetic Trees out |
29 | Fri 11/3/2023 | Lab 7: AVL Trees |
| Lab 6 Due
Fisher-Yates Module Due |
30 | Mon 11/6/2023 | Priority Queues / Binary Heaps |
| |
31 | Wed 11/8/2023 | Minimum Spanning Trees, Kruskal's Algorithm | HW5 Needleman-Wunsch Tasks Due | |
Thu 11/9/2023 | Spanning Trees module due | |||
32 | Fri 11/10/2023 | Dendrograms And Single Linkage Clustering |
| Lab 7 Due |
33 | Mon 11/13/2023 | Tries |
| |
Graph Data Structures And Algorithms | ||||
34 | Wed 11/15/2023 | Graph Data Structures | ||
Thu 11/16/2023 | Graphs Module Due | |||
35 | Fri 11/17/2023 | Breadth-First Search, Depth-First Search | ||
36 | Mon 11/20/2023 | Euclidean Traveling Salesperson Problem |
| |
Tue 11/21/2023 | Last day to drop courses with a "W" | |||
Tue 11/21/2023 | BFS/DFS/TSP module due | |||
-- | Wed 11/22/2023 | Thanksgiving | No CS 271 Class. Enjoy the break! | |
-- | Fri 11/24/2023 | Thanksgiving | No CS 271 Class. Enjoy the break! | |
37 | Mon 11/27/2023 | Dijkstra's Algorithm | ||
38 | Wed 11/29/2023 | Lab 8: Implementing Dijkstra's Algorithm | HW5 Dendrogram And Clustering Due
HW6: Traveling Salesperson Art Out | |
39 | Fri 12/1/2023 | Finish Dijkstra's | ||
40 | Mon 12/4/2023 | Bellman Ford, Floyd-Warshall | Lab 8 Due
HW6: 2-Approx with MST DFS Due | |
41 | Wed 12/6/2023 | Directed Acyclic Graphs (DAGs), Topological Sort | ||
42 | Fri 12/8/2023 | Clique Finding | HW6: Final Deadline | |
42 | Fri 12/15/2023 | Final Project Due |
Grading
Breakdown
Class Engagement / Pre-Class Work | 15% |
Programming Assignments | 50% |
Labs | 20% |
Final Project / Mock Coding Interview | 15% |
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, HW5 has 3 mini deadlines. If you miss the third HW5 deadline and get a 0, but you hand in both other parts of HW5 and all parts of all other assignments on time, then I will ignore the third deadline on HW5.
-
Labs will not be accepted late because the timing has been planned very carefully to set you up for class and for subsequent assignments, but I will drop the lowest lab score at the end of the semester to help you adjust to this new policy.
-
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 will do our best to put the topics we're working on into the appropriate historical context, and to address broader societal issues that are related to the code that we write. We will strive to do better in our course, with an honest look at where we have been in the field. To that end, 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.
.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 a foundational course for the CS major, and I want to work to keep your excitement alive, regardless of your personal circumstances. You belong in CS!
Evening Pfahler 106 Work Jams 🍇🍓🫐🫙🎵 🎵 🎵
To foster work and collaboration, I've booked Pfahler 106 from 7PM - 10PM during every week night, Monday - Friday, during the semester for people to go and work on assignments together. 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 attend at least 3 evening sessions. 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 477 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 and labs. 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.
For the labs, collaboration rules are slightly more permissive beyond buddies. See the collaboration grid below.
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 each scenario. Labs are more permissive than assignments, which are more permissive than individual tasks
Lab Collaboration Grid
YOUR BUDDY |
COURSE STAFF |
CS 271/371 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: | ✘ | * | ✘ | ✘ | ✘ |
Assignment Collaboration Grid
YOUR BUDDY |
COURSE STAFF |
CS 271/371 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 Collaboration Grid
YOUR BUDDY |
COURSE STAFF |
CS 271/371 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. Dee Singley is located in the Center for Academic Support in the lower level of Myrin Library. 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. Please 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. Please 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 in the past. I am happy to discuss this in 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
In the event that the College closes due to inclement weather or other circumstances, our in-person class sessions, drop-in 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.