Location: | Classroom: King 243 |
Lab: King 248 | |
Meeting Time: | Section 1, MWF 9:10-10:00AM |
Section 2, MWF 10:20-11:10AM | |
Prerequisites: | Fully admitted Computer Science majors or minors only and grades of “C-” or better in CS 159, CS 227/MATH 227 or MATH 245, and MATH 231 or equivalent. |
Required Textbook: | We will be using an interactive electronic textbook developed by the OpenDSA project. The book will be made available through Canvas. |
Name: | Dr. Nathan Sprague |
Office: | King 226 |
Office Phone: | 568-3312 |
Email: | spragunr@jmu.edu |
Office Hours: | Available Online |
You are encouraged to use Piazza to ask questions related to course content. The advantage of Piazza is that I can address common questions in one location, rather than answering the same question multiple times via email. I also encourage you to respond to each other’s questions on Piazza; this provides everyone with more timely responses and crafting an answer can help you to understand the material better. You are not required to use Piazza to participate in this course. Piazza is a third party tool with no formal contract with JMU to legally ensure FERPA compliance. That said, it provides a convenient way to ask and answer course questions that don’t involve sensitive information. Please use email if you need to contact me directly.
You are welcome to stop by my office any time, with the understanding that I may or may not be available outside of my posted office hours. If you need to meet with me outside of my posted hours, email me to make an appointment.
Note that I typically do not respond to email or Piazza posts in the evenings or on the weekends.
If you contact me and don’t hear back within a day or two, don’t give up! I try to respond to email in a timely manner, but sometimes one falls through the cracks. I won’t be offended if you send a follow up message.
My office hours this semester will use a hybrid online/in-person format. You are free to attend in-person or online via Zoom. The Zoom link will be made available on the course Canvas page. Appointments are available through MyMadison connect, but no appointment is necessary.
The focus of this course is on solving computational problems that involve collections of data. We will study a core set of data abstractions, data structures, and algorithms that provide a foundation for writing efficient programs.
At the conclusion of this course students will be able to:
A schedule overview will be made available on the course web page. Readings and assignments will be posted in Canvas. Posted readings should be completed before the start of class.
Most assigned readings and videos will include embedded exercises or a short reading quiz. These will usually allow as many attempts as necessary for you to complete all questions correctly. These exercises will be due before the start of class.
It is important that you keep up with the readings in this course. You should not expect that every important point from the reading will be discussed in class.
Peer Instruction combines short lectures with multiple-choice questions that target common misconceptions.
Other in-class activities will involve breaking up into small groups to answer questions or to work on programming exercises.
Most weeks will include one or more in-class lab activities. Labs are intended to facilitate in-class discussion of concepts and coding strategies. Therefore, attendance is required in order to receive full credit. Some non-coding activities will be graded entirely on the basis of attendance. You are encouraged to read the lab descriptions beforehand, but you should not complete the labs in advance.
I will occasionally ask you to submit a “muddiest point” reflection highlighting concepts that were unclear from the reading or lecture.
There will be occasional homework assignments over the course of the semester. Submitted code will be graded on correctness, efficiency, documentation, and overall quality. All submissions must conform to the CS240 Style Guide.
In lieu of midterm examinations, this class will have 5-7 short mastery quizzes scheduled approximately every two weeks.
The final course grade will be calculated according to the following distribution:
Online Reading/Video Quizzes, Muddiest Points, OpenDSA Readings | 5% |
Labs and In-Class Activities | 10% |
Homework/Programming Assignments | 10% |
Mastery Quizzes | 55% |
Final Exam | 20% |
Letter grades will be assigned on the scale A=90-100, B=80-89, C=70-79, D=60-69, F=0-59, with potential minor adjustments after considering the overall performance of the class and actual distribution of numeric scores. I will use “+” and “-” grades at my discretion. I do not assign WP or WF grades except under extraordinary circumstances.
Your work in this course must comply with the provisions of the JMU honor code: http://www.jmu.edu/honor/code.shtml. It is not a violation of the honor code to discuss assignments with other students at a conceptual level. However, all of the work that you submit must be developed by you, based on your own understanding of the material. Representing someone else’s work as your own, in any form, constitutes an honor code violation. It is also a violation of the honor code to “render unauthorized assistance to another student by knowingly permitting him or her to see or copy all or a portion of an examination or any work to be submitted for academic credit.” In the context of this course, this portion of the Honor Code means:
Copying and/or sharing code is expressly forbidden. This includes copying code from previous semesters’ solutions (including your own or other students’) or other external sources. It also includes posting your code publicly, such as on Github.
Note that “copying” may refer to any mechanism of transferring solutions from one individual to another. If you “talk through” your solution with another student to the point that their code is clearly a line-for-line duplicate of yours, this is effectively copying even if you never explicitly provided access to your own file.
It is acceptable to consult other resources (e.g., Stack Overflow) for clarifying examples but not wholesale copying of significant pieces of code. All such references must be documented explicitly within code comments.
Unless the assignment states otherwise, you are free to use ChatGPT, Copilot and other AI-enabled tools for your work in this course. Keep in mind that over-reliance on these tools is likely to negatively impact your learning.
You are explicitly forbidden from collaborating with others or using any resource when taking the weekly mastery quizzes or the final exam.
A key component of academic integrity is giving credit where credit is due. If you receive assistance, either from another student, from an AI-tool, or from some other source, you must provide a clear and explicit acknowledgment of that assistance at the time of your submission. Submitting AI generated code without acknowledgment will be considered an honor code violation.
I will prosecute honor code violations if they come to my attention. If in doubt about what is allowed, ask me.
I expect, and encourage, you to use AI tools as you complete your work in this course. I suggest the following guidelines for getting the most out of these tools:
DON’T use AI to generate work that you are submitting. Disable AI plugins in your editor. Never use it to write code. Never use it to generate answers to written questions.
DO: Use AI as a learning tool and virtual tutor. If there is something you don’t understand, ask AI for an explanation. If you have already completed an assignment, ask AI to evaluate your work. Don’t ask it to improve your work: otherwise you’ll end up submitting code written by AI, in violation of the DON’T section above. Consider prompts like the following:
“Here is the linked list class I just completed as a class project. I don’t want you to show me any improvements to the code: this is a graded assignment and I want the submission to be my own work. I would like you to highlight any problems you see and provide general suggestions for improvement.”
Consider using AI tools specifically designed to support learning, such as ChatGPT’s “study mode”.
Focus on learning outcomes. The purpose of the homework and lab assignments in this course is to deepen your understanding of particular approaches to data structure design and analysis. The goal is not to produce the most efficient or practical solution to the problem at hand. We may explicitly ask you to make sub-optimal design choices, either as a stepping stone toward some other concept, or as an exercise to draw comparisons with other approaches. AI tools don’t have this context. For example, they might propose using a hash table for an assignment that is intended to explore the use of binary search trees. Stay focused on the learning outcomes, even if it means deliberately avoiding “better” solutions.
These are suggestions, not requirements. I will not be policing your use of AI in this class, except on quizzes and tests. As long as you provide appropriate attribution, you are free to use these tools as you see fit. Appropriate use of AI will enhance your learning in this course. Inappropriate use will hinder your learning and will likely result in a lower course grade.
In general, attendance will be required in order to receive full credit for in-class work, including labs. In the case of an unavoidable absence, send me an email in advance with a brief explanation of why you can’t attend. I may not respond immediately, but your email will provide a record of the circumstances.
If you aren’t feeling well, use your best judgement about attending class. If you have a minor cold, and are feeling up to it, it might be appropriate to attend while wearing a mask to protect your fellow students. If you have a significant illness, please stay home.
You will not receive full credit for in-class work if no prior notice is provided. Labs with online submissions will be worth 50% if you are absent without providing advance notice. Some activities may be graded purely on the basis of attendance. I will do my best to accommodate occasional absences, but I reserve the right to withhold credit in the case of chronic absences.
If you have an unavoidable conflict for a mastery quiz, contact me at least one week beforehand to make alternate arrangements. Failure to make prior arrangements for a missed quiz will result in a grade of zero.
If possible, please bring a laptop for in-class coding exercises. You should also bring scratch paper and a writing utensil.
Except under extraordinary circumstances, I will not provide extensions for illnesses, extracurricular obligations, etc. Instead, you will have three “late days” which may be applied to any lab or homework assignments (with possible exceptions for assignments due at the end of the semester). The use of a late day allows you to extend the deadline for an assignment by 24 hours. You may apply at most two late days to a single assignment.
The ACM (https://www.acm.org) is the main professional organization for computer scientists. It is expected that your work in this course will conform to the ACM Code of Ethics (https://www.acm.org/code-of-ethics), which forbids discrimination and harassment of all types. If you believe someone is violating these principles (e.g., by making inappropriate or demeaning remarks), it is your responsibility to take action by informing me or, if you feel comfortable doing so, addressing the individual directly. I will do my best to preserve your confidentiality when addressing the issue.
Phones should be silenced and put away during class unless they are being used for a course-related activity. If you violate this policy, I reserve the right to give you a long pointless lecture about the failings of your generation and the probable downfall of civilization. This will be embarrassing for both of us.
Fifty minutes is a short period of time. Please be ready to begin work at the scheduled start of class and refrain from packing up to leave until the class period is over. In exchange, I will commit to ending class promptly at the scheduled time.
Students are responsible for adding and dropping courses via MyMadison. Please consult the registrar’s page of dates and deadlines for exact deadlines.
If you need an accommodation based on the impact of a disability, you should contact the Office of Disability Services (Student Success Center, Room 1202, www.jmu.edu/ods, 540-568-6705) if you have not previously done so. Disability Services will provide you with an Access Plan Letter that will verify your need for services and make recommendations for accommodations to be used in the classroom. You are encouraged to meet with me to review the course requirements and your requested accommodations to develop an individualized plan appropriate for this course.
This class will operate in accord with JMU’s inclement weather policy available at http://www.jmu.edu/JMUpolicy/1309.shtml
I will give reasonable and appropriate accommodations to students requesting them on grounds of religious observation. If you require such accommodations you must notify me at least two weeks in advance.
Students learn to implement and analyze elementary data structures and the basic complexity classes of algorithms that use strategies such as greedy algorithms, divide-and-conquer algorithms, and backtracking algorithms. This analysis is especially applied to problems in searching, sorting, and parsing.