Skip to main content

Syllabus

CS 2100: Program Design and Implementation I

Course Description

Building on intro programming experience (from CS 2000 or a different institution), examines the fundamentals of program design and implementation. Studies design of data and object-oriented programs, including common patterns, use of data structures, and underlying principles such as abstraction, encapsulation, inheritance, and interfaces. Introduces common software engineering practices such as version control, writing tests, development environments, and good programming habits. Practices using these design principles by writing medium-sized applications and using data science code libraries. Continues to interweave ethical challenges and skills in program design.

Recordings, lecture notes, and supplementary material are available on Canvas.

This syllabus is subject to change. Any significant changes will be announced to the class.

Learning Outcomes

  • Students can design programs using classes, objects, and inheritance effectively.
  • Students can select appropriate data, data structures, and design patterns to implement medium-sized programs that meet specifications including non-functional requirements such as performance, maintainability and privacy.
  • Students can write thorough test suites for programs of moderate complexity, using a variety of types of data and design patterns.
  • Students demonstrate proficiency with command line tools, such as compilers, version control, and debuggers.
  • Students exercise collaboration skills by solving problems with others.
  • Students can identify pros and cons of using given data to solve the desired problem, and identify and defend privacy issues in problems presented to them without being told there is a privacy issue to identify.
  • Given a technical problem, students can (a) identify the stakeholders, (b) identify values and interests at stake for each stakeholder, (c) discuss conflicts of values, and (d) identify modifications that would mitigate conflicts of values.

These skills will:

  • prepare students for a more advanced course in program design and implementation
  • help students prepare for technical job interviews
  • serve students throughout their careers

Prerequisite Skills

Students who have not taken CS 2000 will need to demonstrate a passing knowledge of the following topics to be placed into this course:

  • Variables and operations
    • Arithmetic
    • String operations
    • Boolean operations
  • Types
  • Functions
  • Looping and iteration
  • Conditionals
  • Using lists

Textbook

The textbook "Python 3 Object Oriented Programming: Harness the Power of Python 3 Objects" by Dusty Phillips covers most of the object-oriented concepts relevant to this course, though we will not follow it exactly.

Course Structure

There will be three in-person lectures and one recitation (also known as lab) per week. During the lectures (CS 2100) we will go over new content using lecture, live coding, discussion, and individual exercises. The recitation (CS 2101) will include individual exercises and an opportunity to begin homework with guidance and feedback from instructional staff. Recitations will be led by Lab Leader TAs.

Students can register for any CS 2101 lab section on their campus.

There will also be weekly homework assignments. The purpose of homework is to give you hands-on experience with the course material you learned in lecture, and to prepare you for the quizzes and projects.

There will also be four quizzes over the semester, tentatively scheduled during lecture.

There will also be a final exam at a time to be announced by the university.

Grading

Assessment will be based on homework, participation, labs, and quizzes. You may ask for feedback on anything else, but it will not figure into your final grade.

TopicPercentage
Homework30%
Quizzes + Final Exam50%
Labs10%
Lecture In-class Exercises10%

The in-class exercises during lecture will be graded based on whether questions were attempted, not on correctness. Because students may need a small number of absences, students can submit the lecture absence form to miss up to six lectures. If the lecture absence form is submitted before the lecture or less than 24 hours after the lecture, the student will not lose the lecture participation points for the day. Students who need to submit the form more than six times should reach out to their instructor. In-class exercises can only be done from the lecture classroom (or attending synchronously online with explicit permission). Completing an in-class activity while not present is a serious academic integrity violation, which will result in a zero for the participation grade for the semester and an OSCCR report.

Since everyone makes mistakes and has a bad day, the lowest homework and two lab scores will be dropped.

Final grades will be assigned based on the overall percentage calculated using the weightings listed above. Numeric grades will be rounded to the nearest percentage (so, e.g., 89.5 will be rounded to 90, and 89.49 will be rounded to 89). Percentages will be converted into letter grades as shown:

PercentageResulting Grade
93-A
90-92A-
87-89B+
83-86B
80-82B-
77-79C+
73-76C
70-72C-
67-69D+
63-66D
60-62D-
0-59F

It is neither appropriate nor effective to ask for an unearned grade. Doing so shows a lack of academic integrity and will not be in the student's interest.

To progress, students are required to meet the grade point average (GPA) requirements as determined by Khoury College of Computer Sciences. (See Khoury's website for more information.)

Collaboration and Academic Honesty

Computer science, both academically and professionally, is a collaborative discipline. In any collaboration, however, all parties are expected to make their own contributions and to generously credit the contributions of others. In our class, therefore, collaboration on assignments is encouraged, but you as an individual are responsible for understanding all the material in the assignment and doing your own work. Always strive to do your best, give generous credit to others, start early, and seek help early from both your professors and classmates.

The following rules are intended to help you get the most out of your education and to clarify the line between honest and dishonest work. The professor reserves the right to ask you to verbally explain the reasoning behind any answer or code that you turn in and to modify your project grade based on your answers. It is vitally important that you turn in work that is your own and follow the guidelines for academic honesty. The minimum penalty for an academic integrity violation is a zero on the assignment and a report to the Office of Student Conduct and Conflict Resolution (OSCCR). Penalties are increased if there are aggravating factors, such as stealing another student's work or lying about cheating.

If you have had a substantive discussion of any assignment with a classmate (or anyone else), then be sure to cite them in your assignment. Here are some example citations:

  • "I had no idea how to approach Question 3 until classmate Husky Huskington explained how I could break it down into separate functions."
  • "Joseph Aoun and I bounced ideas off each other for Question 4, although we both did our own coding."
  • "I didn't remember how to convert a string to an int, so I asked East Northern. They also showed me how to handle an exception if the string couldn't be converted."

If you are unsure of what constitutes "substantive", then ask us or err on the side of caution. You must not copy code or answers by hand, electronically, or in any other manner. Another way to think about it is that you should be talking in English (or another natural language) with one another, not Python.

The following rules apply to anything you hand in for a grade.

  • You may not copy anyone else's code or answers under any circumstances. This includes online sources.
  • You may not permit any other student to see any part of your program.
  • You may not permit yourself to see any part of another student's program.
  • You may not publicly post your homework project code or answers in a chat or discussion where another student can see or copy it.
  • You may not describe a solution (or receive a description) in such detail that your work is virtually identical to another student's.
  • You may consult online resources as part of your course work, but you may not copy code or answers from online sources, books, etc. If you get an idea of how to solve a problem from an online source or another person, include a citation. You are not required to cite course materials or help from a TA (although we are always happy to hear when a TA was helpful).

The university's academic integrity policy discusses actions regarded as violations and consequences for students, which are severe.

If you have a question about what is considered a violation of this policy, please ask an instructor.

If you feel that cheating is your only option, please ask for help.

The AI Policy

AI coding assistants like Cursor and Windsurf are not allowed for this course. We believe that using an AI assistant is an important skill that should be covered after the basics (which is why there is a different policy in CS 3100). Using AI assistants before covering the basics would be like using a calculator before a course on arithmetic -- it would undermine your ability to review and understand code.

AI large language models like ChatGPT and Claude are not allowed for assignment-related use. For example, you may not copy and paste (or otherwise enter) any part of the assignment instructions into the AI, and you may not take assignment solutions from it. You also may not paraphrase the assignment instructions to an AI, "only look" at an AI-generated solution before writing your own, or otherwise undermine your learning using AI. Things that violate the spirit of the policy (loopholes that are not explicitly mentioned) are also not allowed. If you have a question about whether something is allowed, we encourage you to ask an instructor, and you will not be penalized for asking. You may use AI language models for non-assignment-related things.

The exception is the AI overview that appears when using a search engine like Google. You may use a search engine to look up documentation, errors, concepts, etc. when doing assignments. You may read that AI overview.