- Class Sessions: MWF 9 AM-9:50 AM, Alden 101
- Laboratory Session: Thursday, 2:30 PM-4:20 PM, Alden 101
- Name: Professor Emily Graber
- Office Location: Alden Hall 106
- Monday: Alden 106, 12-1pm
- Tuesday: Alden 106, 2-4pm
- Wednesday: Alden 106, 10-10:30am, 12-1pm, 2-3:30pm
To meet with the course instructor during office hours, please visit the Google Calendar for Office Hours to reserve an appointment(s) as needed. If there are no suitable times, contact the instructor.
A continuation of CMPSC 100 with an emphasis on implementing, using, and evaluating the computational structures needed to efficiently store and retrieve digital data. Participating in hands-on activities that often require teamwork, students create data structures and algorithms whose correctness and performance they study through proofs and experimentation. Students continue to refine their ability to organize and document a program's source code so that it effectively communicates with the intended users and maintainers. During a weekly laboratory session, students use state-of-the-art technology to complete projects, reporting on their results through both written documents and oral presentations.
- Prerequisite: CMPSC 100 or permission of the instructor.
- Distribution Requirements: QR, SP.
- When solving a problem with a Python program, accurately describe data structures and algorithms and their inherent trade-offs.
- Use data structures and algorithms to correctly and efficiently solve a problem through the use of a Python program.
- Use empirical methods to characterize the performance of a Python program that uses data structures and algorithms.
- Use industry-standard practices, such as testing and debugging, and professional-grade integrated development environments (IDEs), command-line tools, and version control systems to implement Python programs.
- Implement Python programs and documentation that conforms to industry-standard formats and styles.
Quantitative Reasoning (QR): Quantitative Reasoning is the ability to understand, investigate, communicate, and contextualize numerical, symbolic, and graphical information towards the exploration of natural, physical, behavioral, or social phenomena.
Learning Outcome: Students who successfully complete this requirement will demonstrate an understanding of how to interpret numeric data and/or their graphical or symbolic representations.
Scientific Process and Knowledge (SP): Courses involving Scientific Process and Knowledge aim to convey an understanding of what is known or can be known about the natural world; apply scientific reasoning towards the analysis and synthesis of scientific information; and create scientifically literate citizens who can engage productively in problem solving.
Learning Outcome: Students who successfully complete this requirement will demonstrate an understanding of the nature, approaches, and domain of scientific inquiry.
Introduction to Computation and Programming Using Python by John V. Guttag
To order through the virtual campus bookstore, click on the "Let's get started" button, and enter Spring 2024, Computer Science, CMPSC 101.
- Visual Studio Code
- Python 3
- pipx
- Poetry
- Gatorgrade
- Git
- Free GitHub Account
- Free Discord Account
- Google Account
- Syllabus
- Schedule
- Course GitHub Organization
- Guttag Textbook Previews
- Python Docs
- Proactive Programmers
- Week One: January 17 to January 19: Software Operations
- Week Two: January 22 to January 26: Python Foundations
- Week Three: January 29 to February 02: Numerical Computation
- Week Four: February 5 to February 9: Function Scope
- Week Five: February 12 to February 16: Proactive Review
- Executable Examination One: February 16 during the class session
- Relevant Modules:
- Software Operation
- Python Foundations
- Numerical Computation
- Function Scope
- Relevant Modules:
- Week Six: February 19 to February 23: Structured Types
- Week Seven: February 26 to March 01: Program Components
- Spring Break March 04 to March 08
- Week Eight: March 11 to March 15: Software Testing
- Week Nine: March 18 to March 22: Object-Oriented Programming
- Week Ten: March 25 to March 29: Proactive Review
- Executable Examination Two: March 29 during the laboratory session
- Relevant Modules:
- Structured Types
- Program Components
- Software Testing
- Object-Oriented Programming
- Relevant Modules:
- Week Eleven: April 1 to April 5: Algorithmic Complexity
- Week Twelve: April 8 to April 12: Algorithmic Complexity
- Week Thirteen: April 15 to April 19: Data Structures
- Week Fourteen: April 22 to April 26: Optimization Problems
- Week Fifteen: April 29: Proactive Review
- Final Examination: Examination Code: A, Date: Thursday, May 2nd, 2024 at 09:00 AM. Complete Final Exam Schedule
- Comprehensively covers all course modules
The grade that a student receives in this class will be based on the following categories. All of these percentages are approximate and, if the need to do so presents itself, the course instructor may change the assigned percentages during the academic semester.
Category | Percentage |
---|---|
Course Participation | 5% |
Midterm Examinations | 10% |
Final Examination | 15% |
Programming Projects | 30% |
Engineering Efforts | 40% |
These grading categories have the following definitions:
-
Course Participation: Students are expected to regularly attend and actively participate in all class and laboratory sessions. Participation is determined by the completion of in-class exercises and timely cloning of repositories that are released in labs. Students who need to miss class or attend class late for an excused reason should communicate their situation to the course instructor as soon as possible.
-
Midterm Examinations: The midterms are online cumulative assessments covering all prior material from the class, programming, and laboratory sessions, as outlined on the course schedule. Unless prior arrangements are made with the instructor, all students should use their computer to take this test on the scheduled date and to complete it in the stated location while taking no more than the required amount of time. Each midterm is an executable examination that a student will complete through the use of GitHub, VS Code, and the programming tools installed on their laptops.
-
Final Examination: The final is an online cumulative assessment covering all of the material from the class, programming, and laboratory sessions, as outlined on the course schedule. Unless prior arrangements are made with the instructor, all students should use their computer to take this test on the scheduled date and to complete it in the stated location while taking no more than the required amount of time. The cumulative final is an executable examination that a student will complete through the use of GitHub, VS Code, and the programming tools installed on their laptops.
-
Programming Projects: Graded on a check mark basis. Programming projects (i) help a learner to demonstrate that they can remember learned material by recalling facts, basic concepts, and answers to questions presented in the textbook and in course materials; (ii) allow a learner to demonstrate an understanding of facts and ideas by translating, interpreting, and stating the main technical ideas presented through the textbook and course materials; (iii) further equip a learner to solve new problems in the field of computer science by applying — in a new way — their knowledge of the facts and techniques related to data structures and rigorous Python programming.
-
Engineering Efforts: Graded on a percentage basis. These assignments invite students to explore different techniques for rigorously designing, implementing, evaluating, and documenting real-world Python programs. These assignments also encourage students to use tools like a terminal window and a modern Python development environment to implement functions that strike the right balance between understandability, generalizability, and specialization. Students will also use the data collected from running experiments to evaluate the implementation of a Python function as they consider trade-offs between, for instance, its efficiency, flexibility, and correctness.
All assignments will have a stated due date shared through GitHub, GitHub Classroom, and Discord. Electronic versions of the engineering efforts and programming projects must be submitted to the instructor through a student's GitHub repository created by GitHub Classroom. No credit will be awarded for any course work that you submit to the incorrect GitHub repository. Unless special arrangements are made with the instructor, no work will be accepted after the published assignment deadline.
You will privately receive a grade for each assignment in the [gradebook repository]. Your grade will be a function of whether or not you completed correct work that fulfills the project's specification and submitted it by the deadline.
Engineering Efforts are graded. Sixty percent of the grade is set by the percentage of gatorgrade checks passed. Forty percent of the grade is set by three check marks (13.3% each) for code correctness, writing quality, and professional skills respectively. Professional skills include linting, formatting, testing, and/or profiling.
Programming Projects are pass/fail. A full mark is earned by passing 100% of the gatorgrade checks on the assignment. All other gatorgrade scores will earn 0 points.
The deadlines for assignments are hard deadlines.
However, you can choose to take an extension for any three assignments and the instructor will completely swap out the old grade with the new one. Any type of assignment can be extended, but grading will be carried out according to the assignment type as stated in the Grading section above.
To extend an assignment, create an issue in the GitHub repo, tag the instructor, and say that you want to resubmit the assignment. The instructor will re-open the classroom manager so you can push updates. When you are satisfied with your submission, please tag the instructor again so they can look at the changes.
It is mandatory for all students to attend the course sessions. If, due to extenuating circumstances, you will not be able to attend a session, then, whenever possible, please communicate with the instructor at least one week in advance to describe your situation. Students who have any signs of illness should not attend any in-person course sessions.
In order to maximize learning, students must invest time to prepare for the class discussions, laboratory, and programming sessions. During the class periods, the course instructor will often pose challenging questions that could require group discussion, the creation of a Python program, a vote on a thought-provoking issue, or an in-class presentation. Students should prepare by reading the assigned material and reviewing the current course projects to effectively participate in these class discussions.
During the class sessions students will also be required to download, use, and modify Python software components and data sets that are made available through means such as the Proactive Programmers web site or a GitHub repository.
This course will primarily use GitHub and Discord for all course communication. We will use GitHub for managing and viewing source code, and for reporting issues in those materials. The Allegheny College Computer and Information Science Discord Server will be the main forum for announcements and technical discussions about Data Structures and departmental activities including TL office hours.
Although we will primarily use Discord for class communication, the course instructor will sometimes use email to send announcements about important matters such as changes in the schedule. It is your responsibility to check your email at least once a day and to ensure that you can reliably send and receive emails. This class policy is based on the statement about the use of email that appears in The Compass, the College's student handbook; please see the instructor if you do not have this handbook.
The Academic Honor Program that governs the entire academic program at Allegheny College is described in the Allegheny Academic Bulletin. The Honor Program applies to all work that is submitted for academic credit or to meet non-credit requirements for graduation at Allegheny College. This includes all work assigned for this class (e.g., examinations and course assignments). All students who have enrolled in the College will work under the Honor Program. Each student who has matriculated at the College has acknowledged the following Honor Code pledge:
I hereby recognize and pledge to fulfill my responsibilities, as defined in the Honor Code, and to maintain the integrity of both myself and the College community as a whole.
Computer science is an inherently collaborative discipline. People must work together to produce large, complex, and ultimately useful software systems. Because of this, the Department of Computer and Information Science at Allegheny College encourages students to engage in collaboration. However, in the context of individual coursework, through which each student must demonstrate their own knowledge, there are certain forms of collaboration that are and are not acceptable.
-
Acceptable forms of collaboration include:
- Discussing high-level concepts, such as the use cases for
while
loops or the various methods that can add elements to alist
. - Referring someone to a course text book, course slides, example programs, or other resources that contain helpful information or instructions.
- Outlining the high-level steps to solving a problem or implementing a feature, without mentioning specific lines of code that need to be written.
- Discussing high-level concepts, such as the use cases for
-
Unacceptable forms of collaboration include:
- Sharing details about specific lines of code, including showing your source code to someone or looking at someone else's code.
- Copying someone else's source code, technical writing, program commands, or program output, even with some slight modifications.
- Typing source code, technical writing, or commands on someone else’s computer.
The aforementioned forms of communication are unacceptable because they make it difficult for both the course instructor and a learner to assess individual knowledge. Moreover, these unacceptable forms of collaboration can impede your learning or someone else's learning since an individual is less likely to understand source code or technical writing that they do not create themselves. Any student who participates in these unacceptable forms of collaboration, whether they are the one sharing, showing, looking, copying, or typing, are in violation of Allegheny College's Honor Code.
In summary, students should collaborate as long as they do so in acceptable ways. If a student needs assistance beyond what can be gained through acceptable forms of collaboration, they should seek help from the course instructor or a technical leader. If a student submits deliverables (e.g., source code or technical writing) that are nearly identical to the work of others, this will be taken as evidence of violating the Honor Code.
Students who are struggling to understand the knowledge and skills developed in either a class, laboratory, or programming session are encouraged to seek assistance from the course instructor and the student technical leaders. Students should, within the bounds of the Honor Code, ask and answer questions on the #data-structures Discord channel. The Discord channel is preferred to make learning and teaching collaborative. Students can find out the office hour schedule for student TLs in the CIS Discord Server under #tl-office-hours, or book appointments for office hours with the instructor.
For exams and all other coursework, students are expected to adhere to the given instructions specifying what is or is not considered authorized assistance for the particular exam or item of coursework. It is the responsibility of the student to review the authorization specifications on every item and act appropriately, upholding the honor code. Unauthorized assistance may or may not preclude 1. internet use, including but not limited to online large language models (e.g. ChatGTP); 2. offline artificial intelligence tools; 3. textbooks; 4. other specifically named materials or sources. Students are reminded to review Honor Code Article III Section 1, requiring students who know that an honor code violation has occurred to report the violation. Moreover, "Failure to do so is as injurious to the honor of the College community as is the observed act of dishonesty and constitutes an infraction of the Honor Code."
The Americans with Disabilities Act (ADA) is a federal anti-discrimination statute that provides comprehensive civil rights protection for persons with disabilities. Among other things, this legislation requires all students with disabilities be guaranteed a learning environment that provides for reasonable accommodation of their disabilities. Students with disabilities who believe they may need accommodations in this class are encouraged to contact Student Accessibility and Support Services (SASS) at 814-332-2898. Student Accessibility and Support Services is part of the Learning Commons and is located in Pelletier Library. Please do this as soon as possible to ensure that approved accommodations are implemented in a timely fashion.