Syllabus for CS304, Databases with Web Interfaces, Spring 2024

Welcome to what I think will be an exciting class! This page describes the structure, format and requirements of the class.

About this Course

If you haven't already, please read about this course

Educational Goals

The major concepts and topics are listed in the "About" page, above. The major goals of this course are that students

  1. understand those concepts and topics
  2. be able to build a web application using those concepts and techniques
  3. be able to work in pairs and teams to accomplish a joint goal
  4. to build community

The first ones are typical of CS 304 for many years, but the last is new. In this pandemic era, it is easy to feel isolated, cut off from your fellow students. I'm glad to be teaching in person again, instead of zoom. Nevertheless, one of my goals is to fight that feeling of isolation: to try to build friendships and relationships. Please help me with this.

Instructor

My name is Scott Anderson. Feel free to call me Scott. My office is in W118 and my office phone is extension 3249, but the best way to reach me is by email at scott.anderson@wellesley.edu. At this point, my office hours are currently as follows. All times are ET, Eastern Time.

  • Wednesdays 1pm-3pm
  • Fridays 2pm-4pm

I encourage you to come to my office, but if you're not able to, we can meet on Zoom.

If these times don't work for you, please let me know. You can always schedule an appointment.

Note that you can also ask questions by email. Sometimes it's easier to talk over zoom, but often an email will suffice.

I love to talk with students one-on-one — it's the best part of my job — so please visit me during office hours. You don't even need to have a question!

As I said above, I encourage you to come to my office, but if you're not able to, we can meet on Zoom. My office hours will always use my personal zoom link. They are configured to use a waiting room so feel free to stop by even if you don't have an appointment (though making an appointment will minimize your wait):

These links are synonymous.

I've set up bookable appointments (15 minute slots) during my office hours. That will allow you to have some idea whether I'm available and be able to reserve some of my time. However, you don't need to make an appointment in order to visit. If someone else already has that slot and nothing better is available, you can come then and hope that the other person's question takes less than 15 minutes. I'll be using a waiting room, so you'll just wait in the waiting room until I'm available. Or, contact me for an alternative time.

Note that I typically expect students to meet me in person in my office, so if you want to meet on Zoom, be sure to tell me.

Scott's Calendar

You can book OH appointments via Calendly:

Masking

  • Masks will be optional in this class. Please note that masks remain an important tool in helping to limit the spread of COVID-19 and other respiratory illnesses. We kindly ask you to wear a mask if you feel unwell, have sniffles, or think you may have been exposed to someone with COVID-19 or the flu. I reserve the right to ask you to mask up or change policies on masking during the semester.
  • Please be respectful to members of our community (students, faculty, staff and others) who choose at any point in time to wear or not to wear a face mask. Please refrain from making any judgments as masking may help reduce allergies, prevent the spread of respiratory illnesses, or protect immunocompromised individuals or their family members.

Tutors

We have an excellent, experienced tutor this semester who will be holding café (drop-in) hours:

  • Anders Freeman (af103), Tuesdays 3pm-5pm in L180

Prerequisites

CS 304 has CS 230 Data Structures as a prerequisite. Students with equivalent programming ability may also be admitted. If you do not have this prerequisite, contact me ASAP. You should probably drop the class.

Class is In Person

Class time will be in person; there is no remote option via zoom except as mandated by the college. If, for any reason, you're unable to come to class, you can get notes from someone who was there (as usual) or talk to me.

We will spend class time on active learning as opposed to lecture. You'll spend much of the time working on exercises or assignments with your partner. So you'll want to attend.

Active Learning

I'm teaching this course using active learning, sometimes also called a flipped classroom format. That means we will spend our class time on interaction (discussions, Q&A) and on coding. The coding will be working on homework assignments and project work. It's unlikely that you will complete the assignments solely during class, but hopefully you will make good progress. Furthermore, I will be available to help when you get stuck. In some ways, class time becomes office hours. (I'll also hold regular office hours.)

Active learning means that I will expect you to prepare for class before class. That means doing the reading, watching the videos, and taking some quizzes. I have always asked students to prepare for class by doing reading before class, but the balance is much changed now. I will be minimizing lecturing as much as possible, so that we can maximize time to work on assignments.

Grade Cutoffs

I use Sakai and have configured it to use these grade cutoffs. Yes, if you are very close to the next higher level, I will "round up".

min letter grade
93 A
90 A-
87 B+
84 B
80 B-
77 C+
74 C
70 C
60 D

Re-doing an Assignment

There has been a lot of discussion recently about equity in grading policies and how that may be different from equality. As an extreme example, if I based the grade on a single high-stakes exam at the end, it would treat everyone equally, but might not be "fair." A student who doesn't "test well" (maybe has an anxiety condition or something else) or just has a bad day, can end up with a grade that doesn't fairly represent their knowledge of the material.

In some cases, I am willing for an assignment to be fixed and re-submitted. I want to be judicious about this, though, because a policy of unlimited do-overs favors students who have lots of time, and that isn't always equitable. (I recall a student who thanked me for imposing a time-limit on the take-home exam because they felt disadvantaged compared to other CS majors who has a lot more time available.) These re-submissions are typically for people who misunderstood an assignment and just did the wrong thing, rather than for people who just made a few mistakes here and there.

Schedule

The current schedule is online. My goal is to make sure everyone is comfortable with a topic before going on, so we may spend more time on these topics than I have allocated. If so, topics will be moved later, and the last topics will be omitted. I expect we will not fall more than a couple of days behind, but we'll see.

The schedule lists:

  • readings, which should be done before that day's class. There will usually be an associated Sakai quiz, which will be mailed out beforehand. Look for that. The readings will mention if there is an associated video.
  • activities for that day of class (usually shown for brevity as "do") on the schedule. No need to read that before class, but you're welcome to if you like.
  • assignments (both homework assignments and project deadlines).

Please take a look at it and make sure it's clear.

Videos

Most of the asynchronous content of this course is presented in webpages like this one. I will also record videos where I have a demo of a procedure or result that really requires it or in other cases where I think it will be helpful.

Evaluation

Student work will consist of homework assignments, and a semester project. They are weighted as follows:

componentweight
quizzes5
homework30
project40
Prereq Exam5
CS 304 Midterm10
CS 304 Exam10

Most assignments will be pair assignments, where I will assign you a partner (randomly) and you'll work collaboratively on it. That means you'll work together on each line of code, not dividing up the work and working independently. That allows you to bounce ideas off each other, build rapport, and have a second pair of eyes to avoid and fix mistakes.

Homework Assignments

There will be about nine homework assignments. The assignments will usually all have the same weight; but I will give additional weight to those that are more time-consuming. The schedule lists the assignments and due dates as currently planned.

Coding Style

The bulk of the grade for each assignment will be for getting the code working, but coding style is still important. Assignments will link to the following page of relevant coding criteria.

For each coding assignment, 70% of the points are for functionality (does the code work?) and 30% are allocated to code quality (is the code readable, secure and efficient?). This meant that working code would earn a passing score, even if the coding style was awful (in practice, it rarely was).

Project

The project consists of phases which are not equally weighted:

The last two phases of the project are due at the end of the final exam period.

Note that, with homework assignments, I use a numeric grading rubric because I know exactly what I'm looking for. However, for the project phases, I'm looking for quality of work, and I prefer a letter grade scale: A, A-, B+, etc. These are recorded in Sakai as 95, 92, etc.

Exams

We will have three exams in CS 304 this semester.

  • An exam early in the course based on material from prereq courses: CS 111 and CS 230 or their equivalents. This is to help identify people who are weak on prerequisite knowledge, so that I can help them strengthen those skills.
    • This exam will be broken into two parts, each taken during the 50-minute Wednesday course meeting.
  • A midterm based on course material up to that point, taken during a regular 75-minute meeting (not a Wednesday).
  • A cumulative exam near the end of classes, again during a 75-minute class.
  • All exams will be in-class, with paper and pencil. No electronic devices will be allowed, including smart watches. Cell phones will be put aside.

How to Succeed

This is a programming-intensive course. While our educational goals are to understand concepts and issues related to full-stack web applications, what we will do is to build one. So, being able to build working programs is crucial. For both homework assignments and the project, we will work in pairs or groups, so collaboration is important as well.

A few suggestions for being successful in this course. If you have others that you are willing to share, please do so!

  • Expect to spend a lot of time. Coding always takes more time than expected. Bugs that could be squashed in five minutes sometimes take an hour. I've personally spent 30 unproductive minutes debugging the wrong program. More than once. You should expect to spend quite a few hours, outside class, on reading the lecture notes, reading the assignments, coding and debugging the programs, and the like. See the previous section.
  • Read the code. In the readings, there will be English paragraphs describing concepts and techniques, but there will also be snippets and samples of code. It's easy to let your eyes glaze over as you look at code; it's tempting just to skip to the next readable paragraph. Don't do that. Force yourself to read the code.
  • Practice! If you are stumbling over common, basic steps (creating a file, starting your app, etc), everything becomes painful and unpleasant. You will get better with practice, but that takes time and effort. I know you are not lazy, but you're human, and we all want to minimize time and effort. Me too.
  • Be patient with yourself. Expect to fail many times before succeeding. Expect to make mistakes. Computers are really good at making us feel stupid. You're not stupid.
  • Be resourceful and resilient. If my explanation doesn't make sense the first time, try re-reading. If that doesn't work, look for alternative presentations. There are tons of tutorials and references on the web. The Mozilla Developer's Network (MDN) is terrific. Google and Stack Overflow are useful tools. But beware that there's a lot of junk on Stack Overflow and on the web in general. Be skeptical as well.
  • Be willing to ask for help. I want to help you. That's not just my job, it's my pleasure. (As a friend of mine says, "I teach for free; they pay me to do the grading.") I don't think you're stupid because you have a question; I think you want to learn. Besides, you're paying a zillion dollars to go to Wellesley in part because of the low student-teacher ratio that gives you a larger slice of my time, compared to big universities. Take advantage of that.

Here's some additional advice that I stole borrowed from CS 230:

  • Programming is hard: Do not blame yourself for your mistakes; just give yourself more time!
  • Programming is a skill: The best programmer has made every mistake in the books!
  • Prepare to spend at least 5 hours outside class session for each hour in class
  • When working on course materials, turn off your social media.
  • Attend all lectures, quit all social media while in class.
  • Do the reading and complete the weekly quizzes.
  • Do the reading before attempting to do the homework.
  • Read the homework description immediately, start thinking about it ASAP, not 1-2 days before it is due!
  • Start homework early, be prepared to make mistakes. That's how you learn a skill!

Pair Programming

There is a lot of evidence that students learn more and produce better work when working in pairs. I am also a strong believer in pair-programming. My reasons include:

  1. two people can learn well from each other, even if one person is generally a better programmer than the other--I think my friend Mike learned a few things from me, even though he was a much better programmer than me,
  2. two people can find bugs quicker and more thoroughly than one person, and
  3. programming with two is more fun and social than solo work.

Nevertheless, I understand that sometimes a person would rather not pair-program for legitimate reasons. That can either be a general preference or a one-off scheduling difficulty. So, a student is allowed to opt-out of pair programming, either for the semester or on an occasional basis.

I will assume that students will pair-program. You may opt out every so often, if you have a week in which you think you will not be able to be a good partner. Just let me know as soon as possible, so that I can assign partners accordingly.

Furthermore, for those who opt for pair programming, I want to make my expectations clear about how pair-programming will work. Specifically, partners will

  1. make a good-faith effort to come to class and work in class with their partner in any time that is available,
  2. make a good-faith effort to schedule sufficient time outside of class to work meet with their partner (in person or virtually) and complete the assignment, and
  3. treat their partner with courtesy and respect, listening to their ideas and contributions, and allowing the work to be a true collaboration.

If you need a reminder about how pair programming works, see the CS 111 explanation of pair programming.

In terms of procedure, I am going to assign partners and I will assign a different partner for each homework assignment.

If, for whatever reason, you are unable to connect and work with your partner, you can and should work solo. Don't lose time trying to connect with your partner. Do let me know if that happens. In some cases, I will be able to connect two people who have been left solo by their partner, so do let me know ASAP.

If you are the person who is unable to work with your partner, please let me know. There may be good reasons that you are unable to do so; I will not punish someone who is unable to work with their partner. Just keep me informed.

Summary:

  • contact your partner early,
  • be responsive to your partner if they approach you
  • if it's not going to work out, for whatever reason, just politely decline
  • if your partner is not responding, please let me know

ChatGPT and other AI Tools

AI tools like ChatGPT have many well-known weaknesses, including hallucinations, where they make up stuff that fits their language model but is just not true. In programming, accuracy is really important, so that's a major weakness.

But there's another problem, which is what our goals are in this course. My goals are to teach the concepts and skills of full-stack web development, and I assume your goals are to learn those. One way to do that is to do some coding. Having AI write the code for you, or even just help you write it, doesn't help you learn the skills. In that way, it's like asking your cousin who is a full-stack developer write the program for you, particularly if your cousin is a practical joker who might write something completely wrong just for kicks (the hallucination problem).

On the other hand, if you use the tool as a way to help learn, I can see a role. Think of it as a tutor who has drop-in hours 24/7.

Gradescope

To ensure consistent and timely grading, I've used Gradescope. At the beginning of the term, you'll get an email inviting you to join (if you don't already have an account). When you are done with an assignment, you'll upload a short PDF to Gradescope for that assignment, saying who you worked with and any other pertinent facts. These will be described in the assignment.

If you work with a partner, only one partner uploads a PDF for the two of you, but that person must be sure to associate the partner with the submission. In other words, if Alice and Betty work together, and Alice uploads, Alice will click a few more buttons to associate Betty's gradescope account with the submission. (Gradescope doesn't read the PDF, so it won't see what you wrote there.)

Quizzes

We will be using the quiz feature of Sakai to administer online quizzes before most, maybe all, lecture classes. These will be a few (3-5) multiple-choice questions that are based solely on the readings for that lecture. The questions are not intended to be difficult; rather, we want to make your pre-class reading more effective and educational by making you a more engaged reader. These quiz questions will be accumulated over the semester into the equivalent of one test. (For example, if we had four questions per lecture for 25 lectures, each question would be worth 1 point.)

Note that each quiz usually takes students only a few minutes to complete. I allow 30 minutes just so that there's no time pressure. Nonetheless, there is not enough time to start the quiz and then start the reading. So, do the reading first, and then do the quiz.

Part of my inspiration for the idea of using quizzes is this NY Times article entitled To Really Learn, Quit Studying and Take a Test

Class Participation

Class attendance is essential for meeting the objectives of this course. Students are required to attend class meetings. Active participation in this course, through many forms such as class discussions, small group break-outs, and teamwork, is highly encouraged.

Towards that end, I will take attendance at each meeting. However, I understand that sometimes people get ill, have interviews or other inflexible appointments, or have other legitimate reasons to miss class.

Also, I find it distracting when students arrive late to class and I'm sure students do as well, so please arrive on time.

Lateness

All assignments are due at 11pm Eastern Time on the date indicated on the schedule.

However, these due dates are targets not deadlines. That means that they are intended to keep you on track, making progress, and not having work pile up. It does not mean that you must turn it in before that date. You can turn it in a day or two late, or even longer, without penalty. If it gets to be a week late, please talk to me about what your plan is to get caught up in the course.

In extenuating circumstances (e.g. sickness, personal crisis, family problems), you may request an extension without penalty. Please try to contact me before the due date.

In no case should you ever give up in this course. There's usually a way forward. Talk to me about it.

Time Commitment

I know that focussing on schoolwork is hard. At times, I drive from home to campus when I wanted to do some serious, focussed work, because I know that when I'm at home, there are so many distractions: good (my family), bad (TV) and ugly (laundry).

Nevertheless, you should expect this course to take a fair amount of time. Indeed, there is college legislation about it. In short, you should budget for 12 hours per week for this course.

Honor Code

I believe that collaboration fosters a healthy and enjoyable educational environment, and encourage you to talk with other students about the course and to form study groups.

Unless otherwise instructed, feel free to discuss problem sets with other students and exchange ideas about how to solve them. However, there is a thin line between collaboration and plagiarizing the work of others. Therefore, I require that you must compose your own solution to each assignment. In particular, while you may discuss problems with your classmates, you must always write up your own solutions from scratch. It is unacceptable for two students who are not partners to turn in copies (or near copies) of each other's solutions. I will interpret such a situation as a violation of the Honor Code, and will bring it before the General Judiciary. When in doubt about acceptable levels of collaboration, please ask me for clarification.

In keeping with the standards of the scientific community, you must give credit where credit is due. If you make use of an idea that was developed by (or jointly with) others, please reference them appropriately in your work. For example, if person X gets a key idea for solving a problem from person Y, person X's solution should begin with a note that says "I worked with Y on this problem" and should say "The main idea (due to Y) is ..." in the appropriate places. It is unacceptable for students to work together but not to acknowledge each other in their write-ups.

When working on homework problems, it is perfectly reasonable to consult public literature (books, articles, etc.) for hints, techniques, and even solutions. However, you must cite any sources that contribute to your solution. Assignments and solutions from previous terms of this course are not considered to be part of the "public" literature. You must refrain from looking at any solutions from previous terms of this course. It is my policy that consulting solutions from previous terms of this course constitutes a violation of the Honor Code.

Pair Programming means that the pair of you act as an individual would as described above, so one pair can discuss the problem with another pair but cannot look at the code of the other pair.

I often distribute a model or example of what I would like you to build. That model is some running code, and having it allows you to look at the scene from all angles and try different behaviors. You are not permitted to try to reverse engineer my code, instead of trying to solve the problem from scratch.

Accommodations

It is my goal that every student in this course succeed, regardless of whatever challenges they may face. That includes documented disabilities and conditions, as well as other challenges. COVID-19 has certainly presented all of us with new challenges. Some of you will overcome those challenges without my help, and kudos to you if you can, but you don't have to. I'm here to help, so let me know. Sometimes, I can't help, but I can at least be aware of the troubles you're facing. Feel free to let me know about those, too.

If you have a disability or condition, either long-term or temporary, and need reasonable academic adjustments in this course, please contact Disability Services to get a letter outlining your accommodation needs, and submit that letter to me. You should request accommodations as early as possible in the semester, or before the semester begins, since some situations can require significant time for review and accommodation design. If you need immediate accommodations, please arrange to meet with me as soon as possible. If you are unsure but suspect you may have an undocumented need for accommodations, you are encouraged to contact Disability Services. They can provide assistance including screening and referral for assessments. Reach them at accessibility@wellesley.edu, at 781-283-1300, by scheduling an appointment online at their website www.wellesley.edu/adr, or by visiting their offices on the 3rd floor of Clapp Library, rooms 316 and 315.

If you have special needs of any kind, please meet with me to discuss accommodations that may be helpful to you.

Ombuds Office

The Ombuds Office is a confidential and neutral resource for students who want to discuss various options for dealing with issues such as interpersonal conflict in their campus lives: ombuds@wellesley.edu; x3385.

Religious Observances

If you need accommodations for religious observances, I'm happy to support that. The college has set up a form so students can now alert professors of anticipated absences and accommodations through the Religious Observance Notification Form. You're welcome to email me as well. See the college Policy on National Holidays and Religious Days of Observance

Non-Discrimination

Wellesley College considers diversity essential to educational excellence, and we are committed to being a community in which each member thrives. The College does not allow discrimination or harassment based on race, color, sex, gender identity or expression, sexual orientation, ethnic or national origin or ancestry, physical or mental disability, pregnancy or any other protected status under applicable local, state or federal law.

If you or someone you know has experienced discrimination or harassment, support is available to you:

  • Confidential reporting: Students can report their experiences to Health Services (781.283.2810); Stone Center Counseling Service (781.283.2839); or Religious and Spiritual Life (781.283.2685). These offices are not required to report allegations of sexual misconduct to the College.
  • Non-confidential reporting:
    • You can let me know. As a faculty member, I am obligated to report allegations of sex-based discrimination to the Nondiscrimination/Title IX Office.
    • You can report directly to the Nondiscrimination/Title IX Office. (781.283.2451) to receive supports, and to learn more about your options for a response by the College or about reporting to a different institution.
    • You can report to the Wellesley College Police Department (Emergency: 781.283.5555, Non-emergency: 781.283.2121) if you believe a crime has been committed, or if there is an immediate safety risk.

Responsible Employee

Pursuant to Wellesley College policy, all employees, including faculty, are considered responsible employees. That means that any disclosure of discrimination, harassment, or sexual misconduct to a faculty member will need to be shared with the College's Director of Non-Discrimination Initiatives / Title IX and ADA / Section 504 Coordinator, DaQuana Carter (titleix@wellesley.edu). See non-discrimiation office. Students who do not wish to have these issues disclosed to the College should speak with confidential resources who are the only offices at the College that do not have this same reporting obligation. On campus, confidential resources include Health Services (781-283-2810 available 24/7), the Stone Center Counseling Services (781-283-2839 available 24/7) and the Office of Religious and Spiritual Life (781-283-2685). You should assume that any person employed on campus outside of these three confidential offices has an obligation to share information with Wellesley College through the Office of Non-Discrimination Initiatives.