Syllabus

Description

This course is an introduction to data structures and algorithms using an object-oriented approach. Topics include software-engineering principles, object-oriented programming, recursion, basic data structures, algorithm analysis, and team programming.

Learning Outcomes

  • Students will be able to explain and use abstract data types, fundamental data structures, and programming techniques.
  • Students will be able to explain and use introductory algorithm analysis techniques.
  • Students will be able to design, implement, and test programs using algorithms and data structures.

Class Resources

All assignments, announcements and other resources for the class, including this syllabus, can be found on this class web page.  You are responsible for checking the class schedule page daily for reading and other assignments.

Textbook

A First Course on Data Structures in Python by Donald R. Sheehy

This book is freely available online. I encourage you to download a copy to your computer so that you always have access to it for reference.

Piazza

Class discussion and Q & A for this class will take place on our class page on Piazza.  Piazza is designed specifically as a question and answer platform.  When you have questions about work in the course, please post them on Piazza rather than sending me an email.  I will not answer questions about coursework via email unless they are of a personal nature.  I will receive an email alerting me the moment something is posted on Piazza, and I will do my best to answer questions there in a timely manner.  Piazza is designed to also allow students to collectively edit a student answer to any question, and I strongly encourage you to do so!  This may be especially beneficial at odd hours when you are awake, and I am not!

You should have received an email invitation to enable your Piazza account and join the class.  After you log in, please read the “Welcome to Piazza!” post to familiarize yourself with the platform.

Replit

We will be using Replit as our Python programming environment this semester. Replit is an online, web-based programming environment. In-class exercises, homework assignments, and projects will all be posted there under the “Team” representing our class. You will also use Replit to submit your work.

Click on this link now to join our class Team and create a Replit account if you don’t already have one.

Academic Engagement and Attendance

Your active participation is absolutely essential to your success in this class.  I cannot emphasize this enough!  By simply attending class and doing a minimal amount of work, you will both learn very little and earn a very poor grade.

It is very important that you keep up with the coursework on a daily basis; consistency is the key. When reading is assigned, actually do the examples on a computer. We will usually use the reading as a starting point for each class discussion rather than rehash everything that you read the night before.  

Courses at Bucknell that receive one unit of academic credit have a minimum expectation of 12 hours per week of student academic engagement. Student academic engagement includes both the hours of direct faculty instruction (or its equivalent) and the hours spent on out of class work.

The paragraph above applies to courses without labs. For this class, which meets for 5 hours/week, there’s a reasonable expectation that students will work additional hours/week outside of class. If you make sure to account for this time in your weekly schedule, you will certainly learn a lot in this class and the grades you earn will reflect that.

Attendance

Your attendance is expected at each class meeting.  Your grade will almost certainly suffer indirectly if you choose not to attend. In addition, I may consider attendance when assigning grades, especially in borderline situations. Of course, previously arranged and unavoidable absences (sickness, family emergencies, varsity athletic participation) will not be held against you. To the extent possible, absences should be communicated to me in advance. You are responsible for the content of reading assignments, lectures and handouts, as well as announcements and schedule changes made in class whether or not you are present. If you must miss a class, be sure to check with me or another student to get what you missed. Quizzes and exams will be given in class on the day scheduled and may not be made up unless arrangements have been made with me in advance.

Health-related Absences

Oftentimes, with the best of intentions, students attempt to report to class despite feeling ill. If your symptoms resemble monkeypox, COVID-19, or another serious transmissible illness, it is best to stay home as your health and well-being as well as that of our whole community must be our priority. Students who have symptoms or test positive for either disease or will be absent for three days or more due to illness should follow the guidelines set by Student Health and reach out to their academic dean who will notify their professor of a prolonged absence.

Homework Policies

There will be a number of programming assignments given during the semester which will be due in class on the date specified.  No late homework assignments will be accepted, unless arrangements have been made with me well in advance.  

Please note that if I assign a homework or project n days before it is due, that is because I expect it will take n days, more or less, to complete well.  Therefore, get started on, or at least familiarize yourself with, assignments right away.  To reinforce this, I will not answer substantive questions about an assignment on the day that it is due.  Those last few hours should only be spent putting the finishing touches on your work.

If you receive a grade of 80% or below on an assignment, you will have an opportunity to revise and resubmit it.  The second version will be due 3 days after I hand back the first version.  Your final grade for the assignment will then be the average of the two scores.

Labs

There are 11 lab assignments over the semester, each built to take 3-4 hours and graded from 0-10 points. They will be released by Thursday morning and are due the following Wednesday at 11:00 PM. The default expectation is that you will attend your lab section and start a lab there. If you will miss the lab for any reason (e.g., please don’t attend if you’re not feeling well), just let your lab instructor know.

Many labs may be done with a partner. This partner must be in your lab section and you must both attend the lab. You may discuss the assignment with anyone in CSCI 204, but cannot copy code.

Your lowest lab assignment grade will be dropped, provided you earn at least a 50% on all labs. 

Tips for Success

  1. Consistent, daily work is the key.  If you spend an hour or two every day, this course is quite manageable, and you will learn more effectively.  Do not try to do all the work for this class in one or two long sessions each week.  Keep up with the reading and complete assigned reading before class.  Start thinking about homework assignments and projects the day they are assigned.  Aim to be done at least a day early so you have time to polish your program and hand in your best work.
  2. Practice active reading. Read the book in front of a computer and type in all of the code to see what it does.  Be curious.  If you’re wondering “What would happen if…”, try it!  The beauty of programming is that it is easy to test ideas and get instant feedback.  It is perfectly normal to have to read a section two or three times before you understand it.  Many students find it very useful to read a section again after we have talked about the topic in class.
  3. Ask questions. If you are having trouble understanding something, ask questions right away – before class, in class, after class, in my office, during help sessions.  There is plenty of help available, but it is up to you to seek it out.  Everything in this class is cumulative; the further you get behind, the harder it becomes to catch up.
  4. Test yourself often. On quizzes and exams, you will be expected to write code on paper for problems that are similar to homework exercises.  So it is important to practice this on your own.  Choose some previous exercises, or some new ones from the book, and work out the answers on paper without looking at the solution.  When you are done, you can check your answers by trying out your solution on the computer.  Testing yourself often has also been shown scientifically to improve learning!
  5. Be patient but persistent.  Some of the concepts in this class take a while to sink in.  Try not to get frustrated if it doesn’t make sense right away.  Keep doing examples and ask a lot of questions.  Don’t give up!  With sufficient effort, it will eventually click.
  6. Use pair programming. You will be working with a partner on some projects.  Listen to each other and hash out a plan (including meeting times) for how you are going to complete the project together.  You and your partner should work together on all aspects of the project, from beginning to end.  Do not practice “divide and conquer.”  Instead, I strongly encourage you to practice “pair programming,” a well-established practice where one partner (the “driver”) types and the other (the “navigator”) watches for errors and focuses on the overall design.  The “driver” and “navigator” roles should switch often so that both partners are contributing equally.  See this (rather dorky) video for a tutorial.

Grade Determination

Course ComponentPercent
Labs25%
Homework Assignments15%
Projects20%
Quizzes (7)25%non-decreasing %’s: 2, 2, 3, 4, 4, 5, 5
Final Exam15%Fri, Dec 9 at 11:45

Notice that the percentages assigned to the quizzes and final exam increase over the course of the semester. The first two quizzes are each worth only 2% of your grade but the last two quizzes are each worth 5% and the final exam is worth 15%. In this way, greater weight is attached to your understanding of concepts later in the course. This ideally gives everyone a chance to get accustomed to the course work at the beginning and recognizes the scientifically proven fact that different people learn at different rates.

Values and Commitments

Bucknell University steadfastly affirms our commitment to our students, staff, and faculty. Regardless of race, ethnicity, or nationality, gender, gender expression or sexual orientation, religion or belief system, economic status, or ability, you are a valued, respected, and essential member of our community. By virtue of joining this community, all members commit to welcome others in the same manner. We will not tolerate mistreatment or disrespect of persons for any reason by members of our community. The College of Engineering strives to offer a safe environment for learning, growth, inquiry, and the respectful sharing of ideas for all.

We have a moral and professional obligation to share the responsibility of always treating each other with respect and dignity, even when we disagree. However, we will not question or leave room for disagreement about the value of different human beings. We investigate and solve problems, sometimes very challenging ones. An important method for such investigations and solutions is through the exploration of ideas in conjunction with the unquestioned support and value of individuals. We can all engage in such processes when we feel comfortable and safe as members of a community.

Your suggestions to help the University meet this commitment are encouraged and appreciated. If something occurs in class that makes you feel uncomfortable, please talk to me about it. Other resources for you include your instructors, department chairs, and Associate Deans Terri Norton (trn005@bucknell.edu) and Erin Jablonski (erin.jablonski@bucknell.edu). Instead or additionally, you may file a bias incident report using this link. This report may be filed anonymously if you so choose. The College of Engineering commits to working alongside students expressing concerns and/or making reports to empower them in any follow-up actions and to ensure that they are protected from repercussions of any kind.

Professionally, we adhere to ACM’s Code of Ethics. Computer science has a checkered history with respect to inclusion — in corporate environments, in our classrooms, and in the products we create. We strive to promote characteristics of transparency and inclusivity that reflect what we hope our field becomes (and not necessarily what it has been or is now).

We reject behavior that strays into racism or harassment. Such behavior (whether verbal, written, or actions) may relate to others’ race, gender, faith, or sexual orientation, among virtually innumerable professionally irrelevant characteristics (e.g., religion, [dis]ability, age, etc.); sexual images in public spaces; deliberate intimidation, stalking, following, harassing photography or recording, disruption of meetings, inappropriate physical contact, and unwelcome sexual attention.

If you believe someone is violating these principles (for example, with a joke that could be interpreted as sexist, racist, or exclusionary), please feel empowered to speak up. If the behavior persists, send a private email to your instructor to explain the situation. While we will preserve anonymity when possible, also be aware that we are required by law to report incidents of sexual misconduct or relationship violence.

We are here for you. Life can be full of uncertainties and hardships. You may find yourself in tough situations such as being sick, having to care for someone who is sick, having a hard time coping with a personal crisis, or even facing food insecurity. If you find yourself in a predicament that is weighing on you, please get in touch with us. We will work with you to make the accommodations necessary to help you out and we will try our best to help you. Please believe that we are invested in supporting you.

Mental Health and Wellness

I recognize that trying to balance your academic pursuits with your non-academic life and interests can sometimes be stressful. If you feel that things are getting overwhelming, please seek help. I am happy to talk to you and point you to a resource on campus for help.  Alternatively, I encourage you to contact your Associate Academic Dean or the Dean of Students at 570-577-1601 for support.  If immediate mental health assistance is needed, call the Counseling & Student Development Center (CSDC) at 570-577-1604 (24/7).  You can also visit the CSDC web site for additional information.

Basic Needs Security

Any student who has difficulty affording groceries or accessing sufficient and nutritious food to eat every day, or who lacks a safe and stable place to live, and believes it is affecting their learning, is urged to contact the Dean of Students for support. Furthermore, I encourage you to notify me of this as well – I will keep all such information confidential. This will enable me to provide any resources that I may possess and identify other resources in the University.

Academic Responsibility

We expect all students to read and abide by the principles clearly defined in Bucknell’s academic responsibility policy and, in particular, the Bucknell Honor Code:

Bucknell Honor Code

As a student and citizen of the Bucknell University community:

  • I will not lie, cheat or steal in my academic endeavors.
  • I will forthrightly oppose each and every instance of academic dishonesty.
  • I will let my conscience guide my decision to communicate directly with any person or persons I believe to have been dishonest in academic work.
  • I will let my conscience guide my decision on reporting breaches of academic integrity to the appropriate faculty or deans.

Appropriate Internet Use and Collaboration

In this class, and Computer Science classes in general, this means that:

  • You are allowed to use online resources to help you understand a topic in this course (but I’d prefer if you come to my office hours instead). 
  • Any online sources that you use must be cited as a comment in your code. 
  • You are not allowed to search for specific code or solutions to specific problems you’re assigned.
  • You are allowed to talk to students about approaches to a problem and resources they used to help them solve problems. In fact, you probably should — that’s one of the advantages of being at a school like Bucknell. 
  • On individual assignments, you are not allowed to show another student your code on an individual project or assignment.  (In group assignments, don’t show another group!)  This means that you should not let another student “borrow” the code. This is the most common case that we (regretfully) bring to the Board of Review. 
  • If you have read this far, click here now to let me know!
  • You also are not allowed to publicly post your code for assignments in this class — either on Github or in a publicly accessible cloud storage folder (like Drive or Dropbox). 

Special Accommodations

If you have a disability and think you may need an accommodation, I encourage you to contact the Office of Accessibility Resources (OAR) at 570-577-1188 or OAR@bucknell.edu. The OAR is here to help and will work with you to determine appropriate accommodations. If accommodations are needed, the OAR will communicate those to me through a Letter of Accommodation. I will not be given information about the nature of your disability, only the accommodations you need. I will treat any information I receive as private and confidential. Please visit the Accessibility Resources page for more information about the OAR.

Acknowledgement

This syllabus has benefitted from the ideas and practices of previous CSCI 204 instructors.

Have a great semester!  If you need anything, please let me know.