CS 174: Introduction To Object Oriented And Systems Programming
Ursinus College, Fall 2022
Instructor: Christopher J. Tralie
Alligator Cow Castle, by Jessica Sokolski, CS 174 Spring 2022
3 short low quality digital music clips are hidden in this image (original photo taken by my cousin Allie Mellen). Students will learn how to extract this kind of hidden data using concepts from systems programming.
Progressively applying bilateral image filtering to Dr. Scoville's face. This is an example of an embarrassingly parallelizable algorithm, which students will learn to accelerate using threads in C++.
A Monte Carlo simulation of a strategy to eliminate invasive species by introducing supermales, as inspired by the work of Dr. Takyi
An animation of the Koch Curve, a "fractal" geometric object which is made up of an infinite amount of copies of itself, and which is somewhere in between 1 and 2 dimensional. Students will learn how to draw this using recursion.
A conceptual drawing of the Shazam algorithm, which is used to identify music from small clips of digital audio. Students will use object oriented concepts to implement this as their final project in the class.
Table Of Contents
Overview
Class Times / Locations
- Monday and Friday, 2:30-3:45PM, Wednesday 2:30PM - 3:20PM in Pfahler 107
Student Office Hours
-
Monday/Wednesday 4PM - 5PM in Pfahler 107
-
Wednesday/Friday 10AM - 11AM in Pfahler 001 (Note the location change!)
-
Tuesday 12PM - 1PM virtually on Discord
Prerequisites/Requirements
CS 173 with a grade of C- or better, or permission of the instructor.
Instructor
Christopher J. Tralie
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!
Office Hours / Helproom T.A.
Matt Wallace
More info coming soon...
Course Description
This course is the continuation of CS 173, and it can be seen as the second part of an introductory computer science and introductory programming sequence.
Now that students are familiar with the fundamentals of programming, such as variable types, conditional statements, loops, and methods, the class will branch out into two more sophisticated directions: systems programming and object oriented programming. This class will prepare students for more advanced work in computer architecture and data structures, respectively.
In systems programming, we look "under the hood" at how programs are really run on the computer, digging into things such as memory (de)allocation, or where variables actually get stored, and metaprogramming, or the process of automating and running code from the command line. For this reason, our language of choice in this class will be C++, which has syntax very similar to Java, but which requires a lot more care managing memory and program compilation.
In object oriented programming, on the other hand, we zoom out focus more on the design of programs at a high level. The goal is to make programs that are easy to read and maintain by others. At the core of object oriented programming are classes, or their instances: objects (hence, the name). While we always have primitive variable types, such as int
, double
, and char
at our disposal, a class can be though of as a "designer variable type." For example, we can make a "Person" class that stores the name, age, and height of a person. That might look something like this in C++:
An instance of a class is known as an object. Just like 10
is an example of an int
, chris
is an example of a person, whose name is "Chris", whose age is 33, and whose height is 6.08 feet. In this way, we have encapsulated (i.e. "placed in a capsule") what it means to be a person all in once place. This makes it way easier to define multiple people, as we don't have to define separate variables for their name, age, and height each time. Moreover, we can start to create instance methods in a class that can be used to change the state of a particular object. For instance, a method void doBirthday()
could increment the age of a person by 1 (e.g. chris.doBirthday()
would change the age of the chris
object to 34).
Objects allow us to enforce two principles that make software much more usable and easier to maintain: modularity and reusability. Modularity refers to the ability to encapsulate everything doing related tasks under one umbrella, while reusability refers to versatile, general purpose code that doesn't have to be completely rewritten for minor changes. Both of these properties should be apparent from any well-executed object oriented design.
As was emphasized in CS 173, a high level programming language like C++ gives us an intuitive, organized way to talk to computers, but computer science is automation and computing in general, not tied to a specific language. In this course, we will be exploring C++, but the focus is on programming in general in the service of a broad, interdisciplinary array of applications. A few examples of programs students will be working on include
- Creating virtual models of 3D cities.
- Steganography, or the process of hiding data in one format in plain sight in another format.
- Creating a simulation of strategies to eradicate invasive species
- Implementing parts of the "Shazam algorithm" to automatically determine what song someone is listening to based on a small clip of audio.
Learning Goals
- Implement and engineer multi-component systems that solve real world problems.
- Write software that is well-organized with good encapsulation and which is easy to read and maintain by others.
- Begin to develop a sense for algorithm efficiency and the synergy between algorithms and data structures.
- Demistify what's going on "under the hood" when code runs on your computer.
Learning Objectives
- Learn the basics of "metaprogramming," or writing scripts to compile code, in the command line.
- Practice patient problem solving by developing comfort with the edit -> compile -> run loop, along with intermediate debugging skills, particularly on runtime errors.
- Make appropriate design choices between compile time (e.g. static members of a class and compile time memory) and runtime code structures (e.g. object member variables and dynamic memory).
- Allocate and clean up dynamic memory, avoiding memory leaks.
- Implement data structures, such as queues, linked lists, trees, and hash tables, using object-oriented paradigms.
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 |
|
Microsoft Teams |
|
|
*: 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 and Microsoft Teams.
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:
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 Microsoft Teams or e-mail for that, since those transactions are locked down better under Ursinus control.
Microsoft Teams
For one on one direct messages with me, we will be using Microsoft Teams, which is linked to your Office suite through Ursinus, so you are automatically enrolled.
Readings
There is no official textbook for this course. Instead, I will sometimes link to online resources on the schedule, or I will have you read something or watch a video and complete exercises before class for initial exposure to some topics. I will also write and share notes on the schedule to summarize things that we did in class, as needed.
Deliverables
Submission Rules
-
You are expected to hand in all assignments on time. The best way to ensure that this happens is to work on the assignment in small bits over time. Staying on schedule will also make sure you can benefit from the class community real time as others are working through things.
-
I will not grade code that doesn't compile. This is one of the most important rules in the class, because students who get stuck on syntax will never make it to the main learning goals of the course related to incremental design and debugging. Moreover, I tend to think about programming in C++ like trying to hit a home run in baseball. There are three lines of defense the pesky computer has against you, which are
- Syntax errors
- Compile time errors, mainly related to linking and proper inclusion of header files.
- Runtime errors. These are the toughest, and they're where I want you to spend most of your time
If you get stuck on syntax errors or compile time errors, post on discord publicly so we can work it out. You certainly will not be the only one with these problems, and we'll sort it out together so you can keep it moving. Let's get you to hit home runs in this course!!
Programming Assignments
The bulk of the grade in the course will be earned by completing 5 medium scale programming assignments and one large scale one (the "Shazam algorithm" at the end). Be sure to start them early, since debug time can often be unpredictable! Refer to the collaboration and sharing rules for these assignments.
Labs
As in CS 173, we will have a number of labs throughout the course. Generally, our 30 minute Wednesday blocks will be devoted to these, and final submissions will be due the following Monday. Collaboration is more open here, and I will generally provide more starter code relative to the programming assignments, since the idea is for students to get some initial exposure and to practice ideas before moving onto more complicated things.
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 difficult subjects like object oriented and systems programming 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.
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 | |
Unit 1: Introduction To C/C++ And Systems Programming | ||||
1 | Mon (75 mins) 8/29/2022 | Course Overview, The Terminal, Filesystem Navigation | Syllabus Quiz Due | |
Tue 8/30/2022 | Student Survey Due | |||
2 | Wed (50 mins) 8/31/2022 | C Primitives and printf, Loops, Conditionals, Arrays | C++ Fundamentals Module Due before Class | |
3 | Fri (75 mins) 9/2/2022 | More C++ Practice: 10 Heads in A Row and Audio Filtering | Assignment 1 (Individual): Design Your Own City Out | |
4 | Mon (75 mins) 9/5/2022 | Pointers, Header files, Makefiles | Assignment 0: Software Test Due | |
Tue 9/6/2022 | Pointers Fundamentals Exercises Due | |||
5 | Wed (50 mins) 9/7/2022 | Lab 1: HTML Holidays | ||
6 | Fri (75 mins) 9/9/2022 | Workshopping Lab 1, HW1 | ||
7 | Mon (75 mins) 9/12/2022 | C Pointers And Arrays, Dynamic Memory, 2048 (time permitting) |
| Lab 1 Due |
Tue 9/13/2022 | Pointers And Arrays Exercise Due | |||
8 | Wed (50 mins) 9/14/2022 | Continue Arrays + Pointers, Lab 2: C++ Bug Hunt, LLDB | ||
9 | Fri (75 mins) 9/16/2022 | Command Line Arguments, 2D Array Allocation/Cleanup | Assignment 1 Due | |
Sun 9/18/2022 | Binary And Hex Module Due | |||
Sun 9/18/2022 | Bitwise Module Due | |||
10 | Mon (75 mins) 9/19/2022 | Binary, Hex, Bitwise Operators | Assignment 2 (Buddy): Image Processing And Steganography Out | |
11 | Wed (50 mins) 9/21/2022 | Lab 2: C++ Bug Hunt, LLDB |
| |
Unit 2: Fundamentals of Object Oriented Programming | ||||
12 | Fri (75 mins) 9/23/2022 | Introduction To Classes: Constructors, Instance Variables / Methods | Assignment 2 Part 1 Due | |
13 | Mon (75 mins) 9/26/2022 | C++ Classes: Static Variables, Information Hiding/Encapsulation (public and private) | Lab 2 Due | |
14 | Wed (50 mins) 9/28/2022 | Classes Practice, Begin Inheritance | ||
Thu 9/29/2022 | Assignment 2 Part 2 Due | |||
15 | Fri (75 mins) 9/30/2022 | Lab 3: Drawing Shapes with Aggregation And Inheritance | Classes And Inheritance Module Due Before Class | |
16 | Mon (75 mins) 10/3/2022 | Polymorphism | Assignment 2 Part 3 Due | |
17 | Wed (50 mins) 10/5/2022 | Finish Polymorphism, HW3 Workshopping | Lab 3 Due
Assignment 3 (Buddy): Invasive Species Polymorphism Out | |
18 | Fri (75 mins) 10/7/2022 | Dynamic Arrays, the STL list type | ||
19 | Mon (75 mins) 10/10/2022 | Abstract Classes Lab 4: Comparators And Insertion Sort | ||
Unit 3: Object-Oriented Data Structures | ||||
20 | Wed (50 mins) 10/12/2022 | Work Session | ||
21 | Fri (75 mins) 10/14/2022 | Robyn Hannigan inauguration (NO CLASS) | Assignment 3 Part 1 Due
Lab 4 Due | |
-- | Mon (75 mins) 10/17/2022 | Fall Break | No CS 174 Class. Enjoy the break! | |
22 | Wed (50 mins) 10/19/2022 | Linked List Implementations with Nodes/Aggregation | ||
23 | Fri (75 mins) 10/21/2022 | Continue Linked Lists, Stacks | ||
24 | Mon (75 mins) 10/24/2022 | Doubly-Linked Lists, Queues | ||
25 | Wed (50 mins) 10/26/2022 | Continue doubly-linked lists | Last day to drop courses with a "W" | |
26 | Fri (75 mins) 10/28/2022 | Lab 5: My Vector (Dynamic Array ADT) | Assignment 3 Due
Assignment 4 (Buddy): Doubly Linked Lists And Mazes Out | |
27 | Mon (75 mins) 10/31/2022 | Recursion And Memoization: Factorial, Fibonacci, Ackermann | ||
28 | Wed (50 mins) 11/2/2022 | Lab 6: Recursive Drawing / Fractals | ||
Thu 11/3/2022 | Lab 5 Due | |||
29 | Fri (75 mins) 11/4/2022 | Binary Search Trees | ||
30 | Mon (75 mins) 11/7/2022 | Binary Search Trees: Traversal with Preorder/Inorder/Postorder, Cleanup, Addition | Lab 6 Due | |
31 | Wed (50 mins) 11/9/2022 | Binary Search Trees: Drawing | ||
32 | Fri (75 mins) 11/11/2022 | STL Priority Queue, Lab 7: Huffman Trees | ||
33 | Mon (75 mins) 11/14/2022 | Friend Classes, STL Map, LinkedMap Implementation | Assignment 4 Due
Assignment 5 (Buddy): Basketball Hashing Out | |
34 | Wed (50 mins) 11/16/2022 | Finish LinkedMap Implementation, Hash Tables | Lab 7 Due | |
35 | Fri (75 mins) 11/18/2022 | Prim's Algorithm, Merge Sort | Ackermann Memoization Module Due | |
36 | Mon (75 mins) 11/21/2022 | Final Project Proposals | ||
Unit 4: Advanced Topics in Systems Programming | ||||
-- | Wed (50 mins) 11/23/2022 | Thanksgiving | No CS 174 Class. Enjoy the break! | |
-- | Fri (75 mins) 11/25/2022 | Thanksgiving | No CS 174 Class. Enjoy the break! | |
37 | Mon (75 mins) 11/28/2022 | Function Pointers | ||
38 | Wed (50 mins) 11/30/2022 | Begin Parallel Programming And Threads | ||
39 | Fri (75 mins) 12/2/2022 | Continue Parallel Programming And Threads | Assignment 5 Due | |
40 | Mon (75 mins) 12/5/2022 | Race Conditions And Mutexes | ||
41 | Wed (50 mins) 12/7/2022 | Lab 8: Image Filtering with Threads | ||
42 | Fri (75 mins) 12/9/2022 | Final Project Work Session | ||
Fri 12/16/2022 | Final Project Due |
Grading
Breakdown
Class Engagement / Pre-Class Work | 15% |
Labs | 25% |
Programming Assignments | 60% |
Deadlines
The purpose of deadlines is to keep students on track as they work through the course to avoid a snowball effect, and deadlines will be strictly enforced for this reason. This is a department wide departure from the unfettered flexibility we gave during the earlier stages of the pandemic. That said, if students have accommodations or if other life events come up, they should communicate with me at least 3 days in advance of any deadline to request an extension. In the absence of said communications, all assignments are due at 11:59PM EST on the date(s) stated on the schedule. Students can turn in those assignments past the deadlines, and the scores will be adjusted as follows:
- -5% for work submitted between 1 minute - 6 hours late
- -10% for work submitted up to 12 hours late
- -15% for work submitted up to 24 hours late
- -25% for work submitted up to 48 hours late
- -40% for work submitted up to 96 hours late
- -50% for work submitted more than 96 hours late
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 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!
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 myself and other instructors, as well as class notes, 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 Microsoft Teams.
- I will attempt to answer questions real time during 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. Do not copy code off of the Internet. 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 174 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 174 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 174 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. Since we are working 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.