CS163 Syllabus - Part 1 Expectations
CS163 Syllabus - Part 1 Expectations
Syllabus - Expectations
Summer 2024
Computer Science Prerequisites:
CS162 or consent of instructor
This means you should have experience writing complete
programs in C++ and be proficient creating classes and
building linear linked lists
Welcome to CS163 – Data Structures. This is a great course and moves us into learning how
to apply the syntax covered in CS162. I am dedicated to the Computer Science field. Success
isn’t just about what we do today or tomorrow, but success is about preparing for your future.
CS163 is an important step along your journey into upper division and industry. I pare my
teaching with my industry background. I incorporate feedback from graduates and local
industries to ensure that you are receiving the best possible education. The material that is
covered in this class is vital to building a solid foundation for any Computer Scientist and I am
excited for you to start!
Our goal is to acquaint you with the structures used in C++ for the storage and manipulation
of data. The concept of data abstraction and the problem of building implementations of
abstract data types are emphasized. Both static and dynamic implementations of major
structures are presented and the advantages and disadvantages of each are discussed.
Structures include lists of several types, stacks, queues, trees, binary trees, B-trees and
graphs. Recursion and key transformation (hashing) are examined. We encourage you to
stretch the boundaries of your programming skills. Start examining algorithms in terms of
their efficiency and effectiveness.
You do not need to be an expert in C++, but we do need 10 weeks of C++ background with
experience programming pointers and dynamic memory to meet these goals. Prior
experience building, traversing and manipulating linear linked lists is important. The key is to
keep up with the course materials and program regularly.
Getting Started
Please be patient as you get started! It will take time to adjust to a different approach than
CS162. In CS162, we learned the fundamentals of Computer Science building the base-layer
of C++ concepts with a heavy focus on syntax. Now, we want to apply those programming
skills to thinking about how to use memory to solve problem. This class is not about learning
more C++ syntax. Instead, we want to fine tune our programming skills and make sure the
foundation layer skills are firmly established. By doing so, we shift our focus to building
“abstractions”. This may be uncomfortable for you at first – so make sure to be patient and
give yourself the time to get acquainted with abstractions. Your job will be to stay current
with the material and make sure to read the textbook! All of our plans to guide you will be
useless if you elect not to use them. This is a big risk! That means use care to not fall behind.
After the first week, this course runs in 2-week cycles with deliverables that repeat every two
weeks. Each week you will have reading assignments, lectures to attend, weekly prelabs to
perform prior to attending lab and linux & vim exercises. The programming assignments have
progress submission to help incrementally guide to towards successfully completing each
assignment within that 2-week period.
Setting Expectations
The name of our course is “Data structures”. This is not “Introduction to Programming”. It is
not “Introduction (or advanced) C++”. This course is the only Data Structures course in our
curriculum and establishes how to best use memory to solve problems. This material will be
heavily used in the upper division and ultimately in industry.
This class focusses on learning how to create, traverse and modify data structures. IIn CS162
we learned about arrays and linear linked lists. These are examples of two data structures.
Success in this course is very achievable. But it does require your active involvement. Every
week, you will need to keep up with the course materials, attend lectures, complete the
weekly linux & vim exercises, participate with lab, program frequently, and communicate
when you need assistance. Learning is an active process that truly requires deep, personal
engagement with the material. A checklist is provided so you can make sure to stay on top of
what is due each week!
Prior Knowledge expected: CS163 is designed for students who have already have
programmed in C++ previously. In this class we use C++ to learn about data structures
applying the syntax previously learned. You should already be able to program using C++:
(a) classes, pointers and dynamic memory (new, delete)
(b) functions with pass by reference
(c) linear linked lists (traversal, creation, removal)
(d) understand recursion at a conceptual level
During the first week we will have a knowledge check quiz on pointers, dynamic memory and
linear linked lists in C++. This is an in-person quiz (~15 minutes) If you receive a score below
70%, you are required to attend a Code Party or attend office hours (or set up an appointment
with your teacher) to build the necessary foundational knowledge to be successful in CS163.
Please contact [email protected] ahead of time if you require DRC accommodations.
You may already have the linux & vim manual from CS162. In this course we will be working
on the level 2 exercises.
• When you registered for this class, you also registered for a lab.
• Labs begin the first week of the term!
• If you don’t complete a lab and want to continue working on the lab material – please check
in with your lab facilitator to see what options are available!
• Starting Week #3, there are prelabs in the printed lab manual which must be completed to
attend lab!
Before attending lab, a weekly prelab must be completed; these can be found in your lab
manual. These are required in order to attend lab. If you can’t complete the prelab, make
sure to seek additional help right away!
Purpose of Labs
The weekly lab sessions reinforce the content learned in the lecture materials. It is where
concepts are practiced in small groups prior to applying them to your larger individual
programming assignments. Labs are designed to bridge the gap between the lecture and
programming assignments and to provide a vehicle for you to ask questions that aren’t
possible when watching videos.
For in-person labs, the lab manuals are graded. They are graded in terms of completeness,
readability, and relevance. Make sure we can read what you are writing and to answer the
questions in the lab manual as you progress through the lab.
Examinations
We have two midterms and one final exam. These graded examinations will take place in-person in
our classroom, during class time, unless COVID-19 restrictions require us to perform these in an
alternate manner. If you are sick or not feeling well, make sure to contact your instructor to schedule
a makeup. Examinations are to be performed individually and are not group activities. There are
quizzes prior to the exams to help you make sure you are prepared!
If you have a DRC accommodation for testing, please contact [email protected] 24 hours in advance as
a reminder. If you need services that cannot be provided by your Instructor, please contact
[email protected] to schedule your midterms and final exam immediately! Do not wait as they
may not have space available. If space is not available with testing services, reach out to your
instructor for assistance in scheduling your exams. At a minimum, you should plan ahead at least 7
business days to schedule an exam with either testing services or with Karla Fant.
Fant – Summer 2024 CS163 in-person Syllabus: Expectations Page 5 of 9
Assignments use 2-week Cycles
After the first week, this course runs in 2-week cycles with deliverables that repeat every two
weeks. Each week you will have reading assignments, lectures to attend, weekly prelabs to
perform prior to attending lab and linux & vim exercises. The prelabs can be found in the
CS162 lab manual that is purchased from the PSU Bookstore. A checklist is provided so you
can make sure to stay on top of what is due each week!
There are five programming assignments that are to be implemented individually and turned
in during the term. Every two weeks a new assignment cycle begins focusing on the current
topics that we are covering. The first cycle begins the second week of the term. All due times
are by 7pm. Late work is only accepted with 24 hour prior authorization.
Be cautious about receiving too much help, plagiarizing code from the web, copying a friends
work, or having someone else program for you. All of these violate the integrity expected and
it won’t help you become proficient. To truly become proficient at programming requires that
you, yourself, program from scratch. The more you solve problems and apply syntax, the
more confident and fluent you will become with the material from this course.
Week #1 of a Cycle:
Each assignment’s cycle begins with critical thinking. By collaborating with your Virtual Group,
you can consider issues of user friendliness, how to separate the application program from
the class that manages the assigned data structure, and prepares for programming. When
developing software, you should always consider these and other questions. Then, we can
begin drafting our software, using incremental implementation techniques. This is what a
Computer Scientist does. This can be an incredible experience if everyone participates!
The first week of a cycle is about getting started. You will be establishing the framework for
the programming assignment – setting up the draft header file and beginning to
incrementally build the ADT member function.
Week #2 of a Cycle:
In the second week of a cycle, you will be submitting a more formal progress submission of
your code and then ultimately the completed code along with an efficiency writeup
(minimum 600 words). Our goal through this process is to gain success each step of the way.
• By Monday: Discuss how to test your software with your virtual group
• By Tuesday: Upload your progress submission
• By Thursday: Respond to your peers in your virtual group
• By Friday: Upload completed programming assignment as a tar or zip file. An efficiency
writeup is submitted with this completed assignment
Proficiency Demonstrations
Becoming proficient with the material for this term means that you will need hands on time
implementing the constructs yourself in a complete program. We find that implementing just
a portion of a program or using someone else’s code does not build that proficiency. It is like
playing the violin. If you just look at someone else playing, your playing doesn’t improve! If
you just practice once a week right before your lesson, you won’t improve. It will take daily
practice to achieve results. This is the same for learning how to apply computer science
concepts. It will take daily practice!
To measure your progress, we will be holding two proficiency demonstrations during the
term. The first is at the middle of the term (typically week #5) and the second during finals
week. A proficiency demo is a live programming demonstration performed, remotely, by
appointment. Calendar sign-ups will be available at the beginning of the term. By signing up
early in the term, you can better control your schedule. Please communicate any specific
requirements with your Instructor.
Students are required to have a webcam (USB or internal), a microphone, and internet access
for these events. It is recommended to plan in advance to ensure you have a space that is
private or semi-private and that the recordings that will be made do not invade any third-
party privacy rights. Special arrangements may be made by contacting [email protected].
When using text-based communication, such as Zoom’s chat feature, it is important to realize
that we miss body language cues and immediate feedback; therefore, it is very important to
be aware of online etiquette.
Academic Integrity
Academic integrity is a vital part of the educational experience at PSU. Please see the PSU
Student Code of Conduct for the university’s policy on academic dishonesty. A confirmed
violation of that Code in this course may result in failure of the course. Assignments submitted
must be of your own individual creation and may not include someone else’s work. This
means the use of ChatGPT or other such tools is strictly prohibited. Examinations are to be
performed individually and are not group activities.
All code and written material must be your own work and may not be copied from the web
or other students. Be careful to not plagiarize. Doing so will result in a zero on an assignment
and a failure in the class. Receiving “to much help” is not a valid reason to receive a passing
score. Refer to the Syllabus: Guidelines and Grades for the details.
On the other hand, it is important to not “get too much help”. By this I mean if you sit and
code with someone coaching you line by line, it is not helpful. If the code in the end is not
your own or not understandable to you, then you have received too much help. Never let
someone just write the code for you. It will decrease your learning and impact your long term
success. Instead, ask for help by having them teach you what you need to know to write the
code yourself. That is how to get help! Here are some ways to get help:
• Work with the CS tutors ([email protected])
• Attend our Code Parties in person
• Use the discord channel to communicate with peers who are taking this class
• Visit in-person or remotely with your Instructor
Be careful when seeking help from others that do not work for PSU. Use caution otherwise.
Do not to share your code with others! Never accept code that was written by someone else!
This means, NEVER accept code from someone else, even if it is a tutor!
• Never post your code in the Canvas Discussions, discord, the web, or social networking sites.
• Never give your assignments to other PSU students, regardless of their situation.
• Never email your code to anyone except your instructor.
• I recommend NEVER having someone write code for you when asking for help. Ask them to teach
you what you need to know rather than do it for you!!!