CS257 Software Design F23 Syllabus
Table of Contents
- Quick Facts
- Overview
- Learning Goals
- Course Administration
- Expectations
- Getting Help
- Assessment
- Doing Honest Work
Quick Facts
Fall 2023
Instructor: Anya E. Vostinar
Room: Olin Hall 310
Time: 1A
Course Staff: See Moodle
Course materials:
Required:
- Don’t Make Me Think! Revisited, by Steve Krug
- Clean Code, by Robert C. Martin
- 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 12:10-1:10
- Wednesdays 2-3
- Thursdays 2:30-3:30
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 9-5 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
While we’re back in person this year and the pandemic is officially over, there are likely to still be disruptions. In these unprecedented times, we will need to exhibit flexibility and patience with each other throughout the term. 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 COVID-19 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 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.
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.
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. 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 two 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.
Grading Scale
I’ll be using a version of specifications grading this term. Each assessment that you hand in will be evaluated against a checklist or rubric related to one or more of the course learning objectives. I will distribute the rubrics and checklists I’ll use to assess each assignment so that you know exactly what constitutes each of these levels. I will rank each learning objective, and the overall submission, according to a five-level scale:
-
Insufficient evidence (basically nothing turned in)
-
Does not yet demonstrate proficiency (something was turned in but it did not fulfill the criteria)
-
Demonstrates proficiency (the submission provides evidence of proficiency in the learning objective(s))
-
Demonstrates mastery (the submission provides evidence of strong mastery of the learning objective(s))
An important aspect of specifications grading is revision. You may revise any group or individual deliverable up until the end of exams. Learning is not a linear process, and learning 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 this form, however I make no guarantee of how quickly the resubmission will be assessed; it might not happen until the end of the term.
How this translates to course grades
To earn a C in the course: you must show that you are proficient in all the learning objectives of the course by having all deliverables at ‘demonstrates proficiency’
To earn a B in the course: you must show that you are proficient in all the learning objectives of the course and have mastered half of them by having all deliverables at ‘demonstrates proficiency’ and at least half at ‘demonstrates mastery’
To earn an A in the course: you must show that you have mastered all of the learning objectives in the course by having all deliverables at ‘demonstrates mastery’
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 does not specifically contribute to your grade, and so a late work or extension policy doesn’t make sense for it. It is expected that you complete the preparation work ahead of the class period that it is associated with, however if you aren’t able to, I recommend you complete it as soon afterward as you can.
All work must be submitted by the end of the last finals period as per College policy. 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.
Doing honest work
AI-Assistance
Only use an AI text generator if the assignment explicitly calls for it or allows it, and follow specific assignment guidelines to disclose which text comes from the AI. Most assignments (probably all) in this course will NOT allow the use of an AI text/code generator, since you need to learn how to write the code yourself. If you already have the GitHub Co-pilot extension in VSCode, you must disable it for all course work.
Groups
Working in groups is a great way to learn computer science, and learning how to work with others is an essential skill. The opportunity to work in groups 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 and Jeff Ondich.