|Instructor||Dr. Acacia Ackles|
|Time||MWF 1:50 PM - 3:00 PM|
|Reading Portal||Persuall||via Canvas||Reading|
|Textbook||Open Data Structures by Pat Morin||Link||Free to read; tracked on Perusall|
You will also need a personal laptop to bring to class each day. If this is a barrier for you, please let me know ASAP.
Student Drop-In Hours
|Steitz 131 (NOT Briggs)||9:00 AM - 11:00 AM||Tuesday & Friday|
Also by Appointment.
These are the times when my schedule is blocked off for nothing but to talk to you. So please do come by!
If you are busy during these times, you can always schedule an appointment with me instead by sending me an email. Or you can swing by Steitz and see if my door is open; if it is, you are completely welcome to stop by.
Description: A study of advanced programming and an introduction to data structures. Topics focus on programming skills needed for the design and implementation of standard data structures such as lists, trees, and graphs and their associated algorithms. Additional topics include recursion, analysis of algorithms, and advanced aspects of object-oriented programming in the C++ language.
So, what does that mean?
In this course we are moving from asking and answering questions like “how do I do this?” to “why would I do this?” or “is it possible to do this?”, or even, “what is the best way to do this?”
In our case, “this” refers to any complicated programming task that relates to data: accessing elements of a large database, adding yourself to a waiting list, designing a structure that can easily find and return the minimal element. Computers can hold a lot of information: it is our job in this class to learn how to effectively and efficiently work with our computers to access that information and solve the problems in front of us.
By the end of this course, you should be able to do the following:
- L1: Design and Implementation of Basic Data Structures. Be able to design in theory and implement in C++ a variety of basic data structures, including:
- Arrays, Vectors, Lists, Linked Lists
- Queues and Stacks
- Binary Trees
- Red-Black Trees
- Hashes and Hash Maps
- L2: Applications of Basic Data Structures. Be able to analyze the strengths and weakensses of a data structure for a particular use case. Identify which data structure is appropriate for a possible use cases, including pros and cons. Topics related to this learning objective include:
- Time and Space Complexity Analysis
- Searching Algorithms
- Sorting Algorithms
- L3: Reading and Writing Computationally. Be able to read written text (documentation, textbooks, online answers) about the course content and apply the lessons learned in your programming work; be able write your own plain language explanation of your own programming work; be able to understand and implement pseudocode in a language of your choice.
- L4: Failure. Take risks and push the boundaries of your understanding to the point where you are not always succeeding at a given problem. Stray out of your comfort zone and be able to evaluate your failures and your mistakes in a holistic way. Be able to reroute back-on-track when failure happens through a variety of means (troubleshooting, asking for help, taking a different approach, scaling back, scaling up).
- L5: Reflection and Metacognition. Be able to self-evaluate and self-reflect on your work, your learning, and your understanding or lack thereof. Identify where you struggle, where you excel, and how you know what you know.
Grades and Evaluation
This class is based on an ungrading model. In this course, I want you to focus on what you are learning and how you are learning it, and not on how many points your work is worth.
Therefore, none of your reading, homework, quizzes, or projects will be assigned a numerical score. You will instead receive feedback from me along with check-in meetings and be encouraged to revise any work if either you or I feel you could gain additional understanding through revision.
At the end of the term you will complete a self-evaluation portfolio to assign yourself a grade with evidence from the course. In brief, grades roughly work as follows:
|Base Grade||Looks like…|
|A||Consistently achieves and often excels at all learning outcomes for the course|
|B||Consistently achieves all learning outcomes for the course|
|C||Often, but not always, achieves all learning outcomes for the course, or consistently achieves the basic standards for most learning outcomes and shows progress towards other outcomes|
|D||Shows progress towards all learning outcomes for the course|
|F||Does not provide sufficient evidence of progress towards learning objectives to gain credit for the course|
Further details about grades, check-ins, feedback, and the format of your final portfolio can be found in the Self-Evaluation tab.
Collaboration and Plagiarism Policy
None of us want to have to go through the honor council process, so I want to lay out clearly what is and isn’t considered acceptable collaboration for this course.
It is important to note that my primary concern is that you are learning. I allow you to revise and resubmit work to try to alleviate some of the pressure of strict, points-based grading that, in my experience, encourages gaming the system over learning.
If there is ever a situation where you’re unsure if something is acceptable collaboration or not, please just ask, even if you have already turned in the assignment. I will never hold it against you if YOU are the one pointing out the issue. At worst I will ask you to resubmit.
The following are always allowed on homeworks, labs, and projects.
- Attending student hours and asking questions about the approach you are taking, then incorporating that approach into your code.
- Discussing the concepts in the class with your classmates on a general level, e.g. in words or with pseudocode
- Having someone else read your code with you and provide suggestions which you then implement yourself
- Reading someone else’s code to provide them with suggestions
- Looking online for help to your general problem, or a component of your problem with proper citation. Example: Your homework question is “Implement a program that will randomly generate four dice rolls and drop the lowest value.” It is fine to look up how to randomly generate numbers in python, how to find the minimum value, and how to return those numbers, and then paste the links as comments in your code. It is not fine to look up “python 4d6 drop lowest” and copy the code whole.
The following are never allowed.
- Copying any code that another student has written
- Copying code from online without attribution
- Posting solutions to the course materials to online aggregation sites (e.g. Chegg) or using solutions from such sites
- Having a friend debug your code for you and then turning in the revised code
- Looking at a friend’s code (or code on the internet for a similar purpose) and then using what you see to write your own code.*
- Looking at code from someone in class and then reproducing it verbatim in your own files
- Directly copying code out of the book, or relying heavily on book code and not citing your use of it in the comments when the assignment does not specifically state that you may do so.
- Using any AI-generated code (e.g. chatGPT, GPT-3, other OpenAI tools) as a solution or part of a solution to a problem.
* This one is tricky. Sometimes seeing what other people are doing right or wrong can be helpful for understanding our own code, but often when we’re just starting out, it’s hard to find the line between learning something new and implementing something without really understanding how it works. If you are ever unsure, ask first.
The reason for a full ban on AI-generated code is because this code is currently unattributable and unregulated, not to mention that the tools abstract away for you the critical component of this course, which is sense-making and not solution-finding. This policy may change as the AI code landscape evolves, but for now, these tools are not appropriate for use as learning tools in a classroom setting.
Late Work Policy
Work turned in late without an extension won’t receive feedback; however, work can receive unlimited rounds of feedback upon request up until the last day of the term. Therefore, it’s always best to turn in something rather than nothing, since then you can continue to work at your understanding if something doesn’t quite make sense.
If you need an extension on an assignment for any reason, leave a comment on Canvas for the appropriate assignment and give yourself a new due date. Work turned in by your self-selected due date will be considered “on time”.
Attendance is tracked in this course; there is no “magic number” of attendances required, but for most students, regular attendance has a large impact on your final understanding of the material in the course.
First Week Policy: Per LU policy, attendance is required for the first week of class. If you do not attend the first day AND do not let me know why, I will reach out to you to check if you are still attending; if you do not respond and do not attend the first week, the registrar will drop you from the course.
I make every effort to incorporate universal design and inclusive learning into my course materials, but individualization is an important part of learning.
I will follow the guidance of any academic accomodations you request through the Center for Academic Success.
I will also make a good-faith effort to follow other academic accomodations you may need, regardless of whether or not you have documentation from CAS, a doctor, or otherwise. If there is something I can do that you know will allow you to engage fully with the course, please do not hesitate to ask. (If you need help figuring out what that ‘something’ is, we can chat about that too.)
Please do not come to class if you are sick. Please do not come to class if you think you might be sick. Please do not come to class if you were exposed to any sort of highly contagious airborne disease. You do not need a doctor’s note and I do not need an excuse for you to miss class.
Here are some other assorted course policies that may be added to over the term.
- Food and drink are always okay to have in class, but I’m not responsible if your laptop gets drenched.
- If you are experiencing a childcare or dependent care emergency, you are welcome to bring your child/dependent to class if you choose to attend.
- Your health and wellbeing as a human are more important than any university course, including mine.
This section exists because I’m a big believer in transparency. For one, I think many students learn better when they understand their professors’ teaching choices. For another, you’re dedicating quite a lot of your time and money to be in this classroom; it seems only fair that you get insight into how it works. If you aren’t interested in the pedagogy behind this course, feel free not to read this. But it is here for you if you want it.
Metacognition and Student Reflection
Metacognition has been repeatedly shown to enhance student independence and success (1, 2). Metacognition is literally “thinking about thinking”; what leads you to the conclusions you reach when you’re learning a new topic? What assumptions are you making when approaching a new topic that might be helping or hurting your understanding?
Ten weeks is a pretty short time frame to try to get really deep into metacognitive practices, so I really just try to incorporate reflection and revision into the course as much as possible. That’s why all assessments can be revised and resubmitted at any time.
My goal is for students to focus more on what they have learned than how many points they have received for learning it. To encourage such focus, I myself prioritize feedback over scoring. This has led me to the mastery-based “grade” scheme that I use.
Ungrading is also a more equitable form of student feedback. In computer science classrooms, ungrading typically enhances recruitment and retention of historically excluded students and reduces student stress, while maintaining a high standard of student work (3, 4).
For more on ungrading, see (5).
Parts of this syllabus is based heavily on one by Dr. Anya E. Vostinar. Thanks!