CS 257: Software Design Syllabus (Fall 2024)

This syllabus is based on materials from Profs. Anya E. Vostinar, Amy Csizmar Dalal, & Jeff Ondich.

Table of Contents

  1. Course Personnel & Materials
  2. Overview
  3. Learning Goals
  4. Course Administration
  5. Expectations
  6. Getting Help
  7. Evaluation
  8. Doing Honest Work

Course Personnel & Materials


Instructor: Jean Salac (she/her)

Classroom: Weitz Center 235

Time: 2a (Mondays & Wednesdays 9:50-11am; Fridays 9:40-10:40am)

Course Schedule: You can find the course schedule and important deadlines here.

Course Staff: Joe Bremer

Required Course Materials:

  • Don't Make Me Think! Revisited, Steve Krug. See Moodle for free access instructions.
  • Clean Code, Robert C. Martin. Free online access available through Carleton library.
  • Additional readings linked through Moodle

I recognize the potential financial burden of additional course materials. If you need assistance to cover course expenses, please reach out to me by Friday of Week 1.

Student Drop-In Hours (also known as Office Hours):



Overview


By now, you’ve taken at least a couple of computer science courses. You know how to program. You might know how to program pretty well. But mostly, you’ve done small-ish projects with clear guidelines and clear outcomes. You may wonder, how close is your experience so far to that of those who develop software — to “real world” programming? What do you need to know about how to write software in the real world to be a successful and independent programmer? Further, what do you need to know about how to be ethical in developing software and working with a team and clients?

This course is an introduction to the key concepts of software design, which we’ll loosely define as the art and science of effective and ethical software planning, construction, development, and maintenance. In this class, we’ll focus on the tools, skills, and ideas that good software developers should use in their day-to-day work. The concepts we’ll cover, practice, and discuss will be useful for programs, projects, and teams of any size.



Learning Goals


There are five high-level learning goals in this course:

  1. Work effectively in stable teams over the course of the term.
  2. Create a database-driven website that successfully meets the goals of a specified audience.
  3. Create code that is well-written, modular, well-documented, maintainable, and follows acceptable best practices.
  4. Successfully select and utilize appropriate tools, languages, and methodologies to complete the database-driven web site project.
  5. Analyze & apply ethical reasoning to the software development process.

Course Administration


Moodle: All course related materials, assignments, projects, readings, and resources will be posted here.

CampusWire: All course announcements and changes to assignments, projects, and readings will be posted here. We’ll also use CampusWire for some pre-class discussions about the readings. I highly encourage you to ask and answer questions (e.g. clarifications, bugs, error messages, etc) posted by your peers to foster a community of learning.

GitHub Classroom: All starter code for assignments will be distributed here, and your project repositories are hosted here. You will turn in most of your projects on GitHub.

Languages: Python, HTML, CSS, SQL, and Javascript.

IDE: VSCode. You should download VSCode to your personal machine. We’ll also be doing a fair amount of work in text editors and the terminal.

Default environment: I will default to Mac OSX in class, for development.

I am committed to the principle of universal learning. This means that our physical and virtual spaces, our practices, and our interactions should be as inclusive as possible. Mutual respect, civility, and the ability to listen and observe others carefully are crucial to universal learning.
I strive to create an inclusive and respectful classroom that values diversity. Our individual differences enrich and enhance our understanding of one another and of the world around us. This class welcomes the perspectives of all ethnicities, genders, religions, ages, sexual orientations, disabilities, socioeconomic backgrounds, regions, and nationalities.



Expectations


Attendance: Attendance is not strictly required in this class, though I believe that you will do much better if you attend every session. Because much of the classtime is spent working with your team, if you miss class, you will miss out on that opportunity.

Communication: I expect you to check Moodle and CampusWire every day for updates on activities and assignments. All out of class written communication will happen via the class announcement forum. Please make sure you are checking it regularly and/or have email or push notifications setup. Each class day will have preparation assignments for you to complete before class. All materials will be released at least 48 hours before they are due.

Technical Issues: If you experience significant technological problems that limit your ability to participate, please contact the ITS Helpdesk at 507-222-5999 or helpdesk@carleton.edu. For announcements of known technical issues, visit the Helpdesk portal.

Extenuating Circumstances: If your personal situation (due to COVID-19 illness or other circumstances) begins to impact your ability to engage with the course, please let me know and contact the Dean of Students Office.



Getting Help


Student Hours: Student hours are a great time to clear up any lingering confusion you may have about certain concepts, ask about the daily readings and assignments, work through ideas, or just talk about something in the course or in computer science generally or in life that’s piqued your interest. These time slots are for you, so use them! If for whatever reason you cannot make it to office hours, feel free to make an appointment to see me (info at the top of this page).

Accommodations for Students with Disabilities: Carleton College is committed to providing equitable access to learning opportunities for all students. The Office of Accessibility Resources (Henry House, 107 Union Street) is the campus office that collaborates with students who have disabilities to provide and/or arrange reasonable accommodations. If you have, or think you may have, a disability (e.g., mental health, attentional, learning, autism spectrum disorders, chronic health, traumatic brain injury and concussions, vision, hearing, mobility, or speech impairments), please contact OAR@carleton.edu or call Sam Thayer (’10), Director of the Office of Accessibility Resources (x4464), to arrange a confidential discussion regarding equitable access and reasonable accommodations.

Assistive Technologies: The Assistive Technologies program brings together academic and technological resources to complement student classroom and computing needs, particularly in support of students with physical or learning disabilities. Accessibility features include text-to-speech (Kurzweil), speech-to-text (Dragon) software, and audio recording Smartpens. If you would like to know more, contact aztechs@carleton.edu or visit go.carleton.edu/aztech.



Evaluation


One of my goals for you in this course is for you to continue to develop as an independent programmer and learner. I’m much more interested in what skills and understanding you have mastered by the end of the course than the exact pace at which you master them. However, it isn’t healthy for you or me if you leave everything to the last minute. It also isn’t fair to your team if you haven’t prepared as much as they have. Therefore, my goal with the following evaluation metrics is to balance providing you flexibility to learn at your own pace while also making sure to spread your learning out over the entire term.

Towards that end, your performance in this class will be evaluated in three different ways according to the learning goals for the course:

  • Group Deliverables: This course consists of a team project that lasts the majority of the course and has components that you will create and get feedback on along the way. Your work will be evaluated on the effectiveness of the process you and your team utilize, the product you attain (and how closely this product meets the project deliverable requirements), and the effectiveness of your team’s collaboration. This contributes to your final grade according to the specifications grading scale outlined below.
  • Individual Deliverables: Many of the team project deliverables will also have an associated individual portion. The individual deliverables allow you to demonstrate individual mastery of the key learning objectives in this course – which will provide you with more targeted feedback on your performance. These may be programs or written reflections, depending on the learning goal. This contributes to your final grade according to the specifications grading scale outlined below.
  • Preparation Assignments: Almost all class meetings will have an associated preparation assignment to be completed BEFORE class time to ensure you are ready for the material covered in class. These tasks will be assessed based on completion, not correctness.

Specifications Grading Scale

Each deliverable that you turn in will be evaluated against a checklist of specifications related to one or more of the course learning objectives. I will distribute the checklists I’ll use to assess each deliverable so that you know exactly what constitutes each of these levels. I will rank each learning objective, and the overall submission, according to a four-level scale:

  1. Insufficient Evidence: The deliverable was not turned in or does not engage with the prompt in the intended manner.
  2. Developing: The deliverable demonstrates progress towards the learning objective(s), but needs further work and engagement to reach proficiency.
  3. Proficient: The deliverable demonstrates achievement of the learning objective(s).
  4. Exemplary: The deliverable demonstrates achievement of the learning objective(s) at a higher level (e.g. more nuance, sophistication, etc).
Revisions

You may revise any group or individual deliverable except for anything due on the last day of classes or finals. Learning is not a linear process, and learning involves making mistakes and learning from them. You may revise and resubmit each deliverable ONCE, within a week after its grades have been released or with the next deliverable.

  • You must turn in a credible submission within the 1-hour grace period of the deadline to be eligible for a revision, so I encourage you to turn in a deliverable, even if incomplete. "Credible" is not the same as the "Insufficient Evidence" level on the scale above. "Credible" means that there is some evidence of an attempt to meet the learning objectives or answer the prompt in the intended manner.
  • Revisions are due a week after you receive a grade for a deliverable.
  • You can revise team deliverables, individual deliverables, or reflections.
  • Your revised grade will completely replace your original grade as long as it's higher. If for whatever reason your revision results in a lower grade, I'll keep the original grade.
  • Along with your revision, you need to submit a Google Form asking you some questions about what you chose to revise, how you responded to feedback, how the revisions improve the deliverable, etc.
  • If the deliverable you want to revise is a team deliverable, you may choose to combine your revision with the next team deliverable, given that the pieces of the project build upon each other. You will still need to explicitly indicate how the new submission addresses the feedback in the earlier submission, and you will still need to fill out the Google Form.
  • You cannot revise preparation assignments. These are assessed based on completion, not correctness, so revisions aren't necessary.
  • You cannot revise the final reflection and the final project deliverable. These are due at the end of the term and there is not enough time to revise before grades are due.

Deadline Flexibility

In this course, we need to balance flexibility for individuals with structure for teams and the class as a whole. I also want to help you avoid procrastinating to the point that you can’t get everything submitted by the end of the term. Therefore, the late work/extension policy varies depending on the type of work.

All deliverables have a 1-hour grace period after their posted due date and time to account for slight technical delays in submission while allowing evaluation of submissions to start soon after the due date. You must turn in a credible submission within the 1-hour grace period from the deadline to be eligible for a revision, so I highly recommend you aim to submit something in the original submission window, even if it isn’t complete, so that you can benefit from feedback and revision.

Preparation assignments are due 10 minutes after the start of the class meeting to account for slight delays in submission while enabling you to be prepared for the class it is associated with.

If you’re staring down a deadline that you know you can’t meet, or if you’ve fallen behind, get in touch with me immediately and we’ll make arrangements. While I need to put boundaries in place for my own health and wellness, and for fairness to everyone in the class, I also want to make sure you are progressing in your learning.

Per Carleton policy, all extensions for end of term work need to go through your class dean.


How Specifications Grading Translates to Course Grades
  1. To earn a C: You must have 50% of deliverables at "Proficient" and have completed 75% of preparation assignments.
  2. To earn a B: You must have 100% of deliverables at "Proficient" and have completed 85% of preparation assignments.
  3. To earn an A: You must have at least 90% of deliverables at "Exemplary" and the remaining 10% at "Proficient", and have completed 95% of preparation assignments.
  4. If you are between letter grades, +/- grades will be awarded based on which letter grade you are closer to (i.e. if you're closer to an A than a B, you get an A-; if you're closer to a B, you get a B+).
  5. There will be approximately 10 deliverables and 24 preparation assignments throughout the term.

Doing Honest Work


AI-Assistance

Only use an AI text generator if the assigned work explicitly calls for it or allows it, and follow specific guidelines to disclose which text comes from the AI. Most assigned work (probably all) in this course will NOT allow the use of an AI text/code generator, since you need to develop the skills to both comprehend & write code independently. If you already have the GitHub Co-pilot extension in VSCode, you must disable it for all course work.



Teams

Computer Science is a collaborative discipline, & people who apply computer science concepts and skills both shape and are shaped by social, political, & cultural environments beyond themselves. You are encouraged to collaborate with your classmates to learn, but collaboration comes with additional repsonsibilities:

  • As a member of a team, it is your responsibility to contribute equally and fully to the final product. For example, it is not acceptable to let a teammate “finish the project” without you and put your name on it before submitting it, or work on significant portions of the project without you, or any permutation of this. When pair programming, I expect you to actively work side-by-side with your partner the majority of the time.
  • As a member of a team, it is your responsibility to be able to explain and/or reproduce your solution individually, if asked. If you do not understand the solution, then you did not contribute fully to the project, and this will hinder your learning of the course material.
  • Whether you are working in a team or individually, it is your responsibility to follow the written and stated guidelines for any particular project. This includes guidelines from both me (e.g. tools and resources you can use) and your teammates (e.g. when to show up for team meetings).
  • When you put your name on an assignment or deliverable, it is a contract between you, your teammates (if applicable), and me that this work represents your own work and not the work of someone else. It is never acceptable to turn in a program, or a problem solution, that you have found anywhere (on the Internet, in your textbook or another book, from a friend who took this course before) or commissioned as your own. Making cosmetic changes to someone else’s program or solution (such as changing the variable names or comments) is also not acceptable.
  • Whether you are working in a team or individually, it is your responsibility to credit any assistance you receive. If you receive assistance from anyone (another book, a lab assistant, a classmate, me), you must properly credit your source. If a piece of your program utilizes outside assistance, you might include the following in your program’s comments:
# Method to decide how much financial aid students should receive
# I used this StackOverflow post to refresh on the syntax for writing conditional statements in Python: https://stackoverflow.com/link-to-post


Per Carleton policy, I am required to report cases of suspected academic dishonesty to the Dean's office.