CS257 Software Design W26 Syllabus
Table of Contents
- Quick Facts
- Overview
- Learning Goals
- Course Administration
- Expectations
- Getting Help
- Assessment
- Doing Honest Work
Quick Facts
Winter 2026
Instructor: Anya E. Vostinar
Room: Olin 310
Time: 1A
Course Staff: See Moodle
Course materials:
Recommended:
- Don’t Make Me Think! Revisited, by Steve Krug
- Clean Code, by Robert C. Martin. Free online access through Carleton library
- Some additional reading materials will be linked through Moodle
I recognize the potential financial burden of additional course fees, supply requirements, and travel costs. If you are in need of assistance to cover course expenses, please speak with me by Friday of Week 1.
Drop in student hours:
All in Olin 306/308:
- Mondays 1-2pm
- Wednesdays 2-3pm
- Thursdays 2:30-3:30pm
Remember that you are always welcome to schedule an appointment with me outside of these times. To schedule an appointment, please see my calendar, find a time that isn’t marked ‘Busy’ within 8-4 M-F and either send a calendar invite to an event or email me. These meetings will be in my office, Olin 323.
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, each of which has subgoals that you can find below:
Work effectively in stable teams over the course of the term.
Components:
- Develop and successfully adhere to a team contract.
- Complete candid and constructive peer and self evaluations.
- Communicate consistently, effectively, and frequently with team members.
- Execute a shared, equitable workload.
- Participate in regular code reviews.
- Successfully utilize one or more aspects of Agile development methodologies: pair programming, sprints, Scrum, Kanban.
Create a database-driven website that successfully meets the goals of a specified audience.
Components:
- Develop appropriate user stories for your site.
- Identify an appropriate dataset or data structure for your website.
- Analyze and integrate web usability and accessibility principles.
- Design and implement an appropriate user interface for your website.
Create code that is well-written, modular, self-documenting, maintainable, and follows acceptable best practices.
Components:
- Write self-documenting code that is easy to read and maintain.
- Write appropriate code comments that enhance and supplement the code.
- Write code that adheres to the single responsibility principle (for classes) and single layers of abstraction (functions/methods).
- Design and implement an appropriate functional interface for your database-facing code.
- Design and implement classes that demonstrate best object-oriented programming practices like the Law of Demeter, encapsulation, etc.
- Design and implement classes that follow specific design patterns (namely MVC).
Successfully select and utilize appropriate tools, languages, and methodologies to complete the database-driven web site project.
Components:
- Demonstrate basic competency with git and GitHub: storing, versioning, and tagging code; resolving merge conflicts; working with branches.
- Demonstrate basic competency with ssh and vi.
- Successfully develop one database method using test-driven development.
- Create a working interactive website using HTML, CSS, forms, and (optionally) Javascript.
- Demonstrate basic competency with developing a database schema, importing data into a database, and constructing database queries.
- Correctly use Python language constructs and modules.
- Successfully use a web framework (flask) to implement a working database-driven website.
Analyze and apply ethical reasoning to the software development process.
Components:
- Apply the ACM Code of Ethics to various scenarios.
- Critically examine software development practices for potential harm and/or exclusion.
- Develop a personal set of professional responsibilities based on ethical principles.
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, and as a way to ask and answer questions about projects and such. I also encourage you to use CampusWire to communicate with your project teams.
GitHub Classroom: all starter code for assignments will be distributed here, and your project repositories are hosted here. You will “hand 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
I have done my best to design the course so that everyone can be successful, regardless of personal circumstances. Communication will be key; please keep me updated about your situation in addition to reaching out to the other relevant offices on campus. 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. If your personal situation (due to illness or other circumstances) begins to impact your ability to engage with the course, please contact the Dean of Students Office and also let me know.
I expect you to attend every class session and log in to 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 activities for you to complete and a section on Moodle to guide you through what you should do before class. All materials will be released at least 48 hours before they are due.
Attendance
Attendance is expected in this class and, therefore, it is one main way that you are able to earn “engagement credits,” which are a portion of your final grade (see below).
Assessment
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. Finally, much of the value of this class comes from engaging with the material and each other throughout the term. 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:
-
Engagement credits There is a great benefit to you to fully and authentically engage with the course content in and out of class time. To encourage this engagement while providing some flexibility, the course has an “engagement credit” system. You will need a specific number of engagement credits to earn a specific grade (shown in the list below). You can earn these credits in many ways, but the main way is through completing the preparatory work and attending (and engaging with class). You may earn 1 credit for completely preparatory work satisfactorily and 1 credit for attending and engaging effectively in class. There may be additional ways to earn engagement credits during the term as well.
-
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 processes 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 understanding 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.
Grading Scale
I’ll be using a version of standards and specifications grading this term for the individual and team deliverables. Each assessment that you hand in will receive narrative feedback and be marked on the following scale:
-
IE: Insufficient evidence (basically nothing turned in)
-
RR: Revise (does not meet the requirements yet)
-
S: Satisfactory (meets the requirements)
Requirements for deliverables will be in one of two categories:
-
CR: Core
-
AD: Advanced
How this translates to course grades
Your final course grade will be based on how many advanced and core requirements you have satisfied (from both individual and team deliverables) as well as how many engagement credits you earned. The table below shows the minimum requirement for each letter grade for each category. To calculate your grade, I will find the highest letter grade for which you have met all requirements. For example, if you satisfied 11 advanced requirements, 11 core requirements and had 55 engagement credits, you would receive a B+ due to the missing core and advanced requirements. Note that a “-“ is due to not having all the required engagement credits and a “+” is due to having more advanced requirements satisfied.
| Grade | Advanced Satisfied | Core Satisfied | Engagement Credits |
|---|---|---|---|
| Total | 6 (Team) + 6 (Individual) = 12 | 6 (Team) + 6 (Individual) = 12 | >54 |
| A | 12 | 12 | 50 |
| A- | 12 | 12 | <50 |
| B+ | 8 | 11 | 45 |
| B | 8 | 11 | 45 |
| B- | 8 | 11 | <45 |
| C+ | 3 | 10 | 40 |
| C | 0 | 10 | 40 |
| C- | 0 | 10 | <40 |
| D+ | 1 | 8 | 35 |
| D | 0 | 8 | 35 |
| D- | 0 | 8 | <35 |
| F | 0 | 0 | 0 |
Homework revisions
An important aspect of specifications grading is revision. You may revise any individual or team deliverable up until the last day of classes. Learning is not a linear process, and it involves making mistakes and learning from them. You may revise and resubmit a deliverable at least once, within a week after its assessment has been released. I will keep the higher of the {original, revised} levels (though if you end up with a revised submission at a lower level than the original, we should meet to discuss it). You may further revise that deliverable before the final submission and request additional feedback via the form linked on this page. However, you may only request one subsequent individual and team assessment per week.
Late work and extensions
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 delays in submission while allowing assessment of submissions to start soon after the due date. If you miss that cutoff, you will still be able to submit something during the revision period. 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 work cannot be submitted late. If you miss the submission for a given day, you cannot earn the engagement credit for that work.
All work except for the final team submission must be submitted by the end of the last day of classes as per College policy. The final team submission (and accompanying reflection) must be submitted the the end of the last final. All that said: This (like every term for a while now) term is going to be weird, and hard, and disruptive, for all sorts of non-academic reasons. 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 work something out. 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.
Getting help
There are many resources available to help you succeed in this course – please take advantage of any or all of them!
-
Office hours: Office hours are a great time to clear up any lingering confusion you may have about certain concepts, ask about the daily readings and essay 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. We will decide as a group at the beginning of the term exactly when office hours should be. Once we’ve decided, I will post that information here and to Moodle. 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), or send me a message on CampusWire.
-
Lab assistant hours: The student staff person for this course holds lab assistant hours each week in Olin 310. These are posted on Moodle and I will remind you during the term. There are also lab assistants working in Olin 310 during the afternoons and evenings. These students are great resources for help thinking through debugging strategies, and design options.
-
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: Technological Resources for Students: 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.
-
Library: Library staff can help you find and evaluate articles, books, websites, statistics, data, government documents, and more. You can make an appointment with a librarian, get help via chat 24/7 from any page on the library’s website, email, or call. The Library building has lots of great study spaces, and we’d love for you to visit! For more information and our hours, visit the Gould Library website at carleton.edu/library.
-
Student well-being: Your health and well-being should always be your first priority. At Carleton, we have a wide-array of health and wellness resources to support students. It is important to recognize stressors you may be facing, which can be personal, emotional, physical, financial, mental, or academic. Sleep, exercise, and connecting with others can be strategies to help you flourish at Carleton. For more information, check out Student Health and Counseling (SHAC) or the Office of Health Promotion.
AI-Assistance
In this new age of AI assistants everywhere, we need to cautiously navigate their relationship with engaged learning together. There are many many (many) ways that generative AI is (sort of) helping you and some are more clearly acceptable or unacceptable than others. While these tools are being used extensively in the software development industry now, you must first learn the concepts yourself so that you can identify when the tools are going off track and potentially causing giant security and functionality errors. I can’t make an exhaustive list of what is allowed and isn’t, because there is just too much and something new is going to pop up within the ten weeks of this term. I will do my best to guide you, but you also are going to need to use good judgment at times (and don’t rely on the AI’s judgment!).
Clearly unacceptable:
- Pasting the entire assignment prompt into anything (even if you don’t use the code that comes out)
- Submitting for credit any code that you have not checked over carefully for security vulnerabilities
- Having gen AI summarize a reading and write a prep check answer for you
- Having gen AI write any portion of a reflective assignment for you
Clearly acceptable:
- Asking gen AI to explain a class concept that you are struggling with (but triple check it is giving accurate information!)
- I am exploring creating a custom chatbot to provide acceptable help on the programming deliverables. If I do provide one of these, you can use it in the way that it is intended to be used.
- Making an image to enhance your deliverable
- Asking gen AI to help YOU understand how to fix a bug or error
Borderline (i.e. you could easily slip into unacceptable):
- Asking outside gen AI to help you understand what an assignment is asking
- Asking outside gen AI a question instead of coming to drop-in hours or posting to CampusWire
- Leaning on a provided chatbot too heavily for your assignments
- Using GitHub Co-pilot extension in VSCode (remember to be very careful with what code and documentation you use from it)
If you are in a borderline situation, you could try prefacing your request with something like the following (This is part of what I may do with the custom chatbot to make sure it provides only acceptable help): “I’m working on a programming assignment and need some guidance. I’m not looking for the direct solution, but rather help understanding the concepts involved and strategies for approaching the problem. Could you please provide hints, explanations of relevant topics, or suggest debugging techniques based on my question, without giving away the exact code?”
If I’m being honest, the most depressing thing about genAI to me on a personal level is that students are using it instead of coming to drop-in hours. I really love talking with you in drop-in hours or 1-on-1 meetings and helping students in that setting is my favorite part of this job. Please remember that you wouldn’t be bothering me to come by, you would be making my day better. I doubt that the genAI can say the same.
Doing honest work
Teams
Working in teams is a great way to learn computer science, and learning how to work with others is an essential skill. The opportunity to work in teams also comes with some additional responsibilities:
-
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 instructions on the level of acceptable collaboration, restrictions on the tools and resources you can use, etc.
-
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 cite your source. I’m not concerned with format—use any format with which you are comfortable. Here’s an example of citing assistance in code: if a piece of your program utilizes someone else’s idea, you might include the following in your program’s comments:
# Method to calculate the first ten prime numbers in a series. # Thanks to Mary Smith for helping me fix the logic in the loop in this method. -
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. In general, when you put your name on an assignment or project, you are verifying to me that this work represents your own work and not the work of someone else. You should consider putting your name on an assignment, project, or exam as a contract between you, your teammates (if applicable), and me that this work is your own work and not the work of someone else.
Cases of suspected academic dishonesty will be turned over to the dean’s office, as per Carleton policy.
This syllabus is based on the materials from Profs. Amy Csizmar Dalal, Jean Salac, and Jeff Ondich.