Link Search Menu Expand Document

Welcome to CSE 143

Table of contents

  1. Overview
  2. Values
  3. Deliberate practice
  4. How to succeed
  5. Grading
  6. Academic honesty
  7. Data types


Computer science is the study of how our ideas can be automated and amplified with computers. Computation is distinctly sociological: computation is defined by humans for humans, so in turn computation defines how we experience life.

In CSE 143, we will learn how to write apps that use data to support everyday life, to answer questions about the world around us, and to make decisions that affect (and oftentimes reinforce) social hierarchies and power structures. By the end of the course, you will be able to:

  1. Define externally correct and internally correct programs within larger software systems.
  2. Select and apply abstract data types to solve specified problems by managing program state.
  3. Compare tradeoffs to select the appropriate implementation for a program or abstract data type.
  4. Design and modify data structures capable of insertion, deletion, search, and related operations.
  5. Trace through and predict the behavior of programs involving reference data types and recursion.
  6. Apply functional decomposition and recursion to break down problems into subproblems.

CSE 143 is organized around 7 applications of computing, a group project of your own choosing that applies programming with data structures, and a video problem solving portfolio where you teach these programming skills to others.


CSE 143 advances one particular set of values about computing. In CSE 143:

Algorithms are more important than data.
Compare to CSE 163: Intermediate Data Programming.
Technical questions are more important than creative questions.
Compare to CSE 154: Web Programming.
Programming solutions are more important than the problems they solve.
Compare to CSE 180: Introduction to Data Science.

But this course is about more than just programming ideas. We are a community of learners, defined by how we conduct ourselves, how we communicate with each other, and how we care about each other. I believe everyone can succeed and grow as a whole human being together in this course. But to realize this vision, we’ll need to work together to act compassionately and treat all others as we wish to be treated ourselves: to think first of others, their benefit, their well-being, and their learning. We are only as good as we are to each other.

The following behaviors serve as first steps towards creating a compassionate community.

  • Listen with intention to understand first and forming an opinion only after you fully understand.
  • Take responsibility for the intended and unintended effects of your words and actions on others.
  • Mindfully respond to others’ ideas by acknowledging the unique value of each contribution.

Deliberate practice

Learning computer programming requires deliberate practice.

  1. Sustained motivation.
  2. Tasks that build on prior knowledge.
  3. Immediate, personalized feedback on tasks.
  4. Repetition of all of the above.

Deliberate practice is about taking on the right challenge with the right support. We’ll learn new programming concepts each week in the following manner.

  1. Prepare for learning before class by completing the pre-class preparation.
  2. Collaborate and communicate with others in class through guided practice.
  3. Master the checkpoint assessment (and optional challenge assessment).
  4. Solve a real problem by mastering the take-home assessment.

During the last couple weeks, you’ll also work on a final project of your team’s choosing and produce a video problem-solving portfolio that teaches other students how to solve programming problems.

Learning cooperatively

Collaboration improves the effectiveness of deliberate practice. With the exception of assessments, we encourage you to discuss course activities with your friends and classmates as you are working on them. You will definitely learn more in this class if you work with others than if you do not. If you are helping another student, don’t just tell them the answer; they will learn very little and run into trouble on assessments. Instead, try to guide them toward discovering the solution on their own. Practice is most effective when it builds on what we already know; feedback is most helpful when it addresses specific areas for improvement.

In addition to collaborating with other students, the course staff are here to personalized feedback. Your teaching assistant (TA) is your mentor and guide to the course. Your TA can help you get the most out of the class and achieve the highest possible understanding of course concepts.

How to succeed

We want everyone to succeed in this class and learn as much as we can, not only about “course content” but also about ourselves and how we can help the world around us. We’ve already introduced several meta-learning concepts highlighting the importance of deliberate practice, learning cooperatively, and atomic habits.

Some of these concepts have very practical tips that we can apply to help us in any course.1

Create a study schedule
Like eating breakfast or working out at the same time, students who create a study routine and have the discipline to stick to it are able to study information over a longer amount of time instead of staying up late the night before.
Connect with other focused students
No matter the facet of life, focused and successful people inspire those they’re around. Find a study buddy whose work ethic you admire and set up an online review session with them.
Design your study space
While it may seem counterintuitive to take extra time to clean your room or office before settling down to study, a study by Princeton University found that people who keep their spaces clean are able to process information and focus better.
Ask for help
If you’re studying and realize you don’t understand a concept or theory, reach out to your professor or classmates as soon as possible for clarification rather than trying to go it on your own.
Stay mentally and physically healthy
Online students are likely to spend more time at their computers than traditional learners, making it imperative to take breaks, go on walks, get the recommended amount of sleep, and eat foods that nourish their bodies.

Communication is a key part of our lives now more so than ever, so we ask that you follow these guidelines to ensure everyone has the best experience.

Be especially kind and intentional
In the online world, our feelings are hard to convey over text and it can be exhausting when we prioritize efficiency. Taking an extra moment to turn on your camera before you speak, personalize your chat messages, and state your intentions out loud goes a long way.
Take space, make space
Some of us might feel more comfortable sharing our experiences than others. Recognize when we’ve been taking space in the conversation and turn the stage over to someone who hasn’t had a chance to shine yet.
Different situations require different communication
How we engage in an environment depends on the situation. In group meetings, attention should be paid to the speaker. In brainstorming or coworking sessions, we can be more flexible in how we communicate.


Checkpoints, challenges, the final project, and the video problem solving portfolio are all graded on a Satisfactory (S) or Not yet (N) grading scale. Take-home assessments are graded on the ESNU scale.

Exemplary (E)
Meets all external correctness criteria and all internal correctness criteria.
Satisfactory (S)
Meets all external correctness criteria but could improve on internal correctness.
Not yet (N)
Does not meet all external correctness criteria but nonetheless shows some understanding.
Unassessable (U)
Not enough information to determine whether there is understanding of the concepts.

An important part of learning is revising your work. All take-home assessments can be revised and resubmitted to demonstrate mastery of the learning objectives. While there are no limits on the number of revisions allowed per assessment, each revision counts towards a weekly resubmission limit so it’s best to revise and resubmit assessments sooner rather than later.

Take-home assessment submissions
A best-effort initial submission for each take-home assessment must be made by its Thursday 11:59pm due date Anywhere on Earth. Up to one (1) additional assessment may be resubmitted each week. Each take-home assessment undergoes code review, which takes one or two weeks to return.

Your final grade in the course is determined by the quality and quantity of work submitted.

S or better on all 7 take-home assessments, including at least 6 E’s.
S on all 6 checkpoints and all 6 challenges.
S on a challenge-level problem solving portfolio.
S on the final project.
S or better on all 7 take-home assessments, including at least 2 E’s.
S on all 6 checkpoints and at least 2 challenges.
S on a checkpoint-level problem solving portfolio.
S on the final project.
S or better on at least 6 take-home assessments. (No E’s required.)
S on all 6 checkpoints. (No challenges required.)
S on a checkpoint-level problem solving portfolio.
Final project not required.
S or better on at least 2 take-home assessments.
S on at least 3 checkpoints.
Problem solving portfolio not required.
Final project not required.

All criteria for a grade must be met in order to earn that grade. These grade criteria capture the learning objectives in the course, so falling short in any area may result in a lower grade determined at the instructor’s discretion.

Academic honesty

Learning cooperatively is different from sharing answers.

You are encouraged to discuss and collaborate on the lessons with other students. Working with a study group and discussing your problem solving approach is a particularly effective way to learn. The purpose of each lesson is for you to learn the course material, not to prove that you already know it. Therefore, you can expect to receive substantial assistance from the course staff.

Collaboration is not allowed on assessments. You may discuss general ideas of how to approach an assessment, but never specific details about the code to write. Any help you receive from or provide to classmates should be limited and should never involve details of how to code a solution.

Discussing examples from the lessons. Each lesson is designed to prepare students for assessments.
Talking to a TA to learn how to solve specific bugs and improve your understanding of the problem.
Posting questions about problem specifications to the course forum.
Looking at someone else’s assessment solution in any form for any reason at any time, ever.
Giving or receiving a walkthrough or completed solution for an assessment from anyone else.
Posting solution code to any assessment in a public place, even after the course is over.

If you are unsure if you are following the policy, ask. There are many resources for helping students learn in this course. Reach out to the course staff for assistance on assessments. Since learning takes time, all assessments can be resubmitted to demonstrate improved mastery. Instead of turning to forbidden resources, it’s a much better idea to submit something not yet complete and revise your work later.

Regret clause
If you submit work that is in violation of the academic honesty policy but bring it to the attention of the instructor within 72 hours, you may resubmit your own work without further consequence except in cases of repeated misconduct or abuse.

If you are retaking the course, you may resubmit a previous solution unless that program was involved in an academic misconduct case. If misconduct was found, you must write a new version of that program.

Data types

All Java programs consist of data and algorithms. Throughout most of CSE 142, we wrote Java programs by defining static methods, focusing primarily on algorithms. In CSE 143, we’ll focus on writing Java programs by defining data types. Data types represent units of information in a program, including primitive data types that represent the smallest unit of information (such as numbers) and composite data types that combine other data types (such as arrays of numbers). In this course, we’ll examine the complexities of the relationship between data and algorithms by defining our own data types that combine human information with computational algorithms.

Our first case study is on Autocomplete, a feature of many modern applications that helps the user complete an input query. Our goal in this module is to define the behavior for a Term class, where each Term object represents a single autocompletion option. It might not seem like much, but defining this basic data type is the first small but important step towards developing an app like Autocomplete.


Sep 30
Welcome to CSE 143
Oct 1
Oct 2
BJP 9.5, 10.2
  1. Describe the relationships between client vs. implementer and interface vs. class.
  2. Define methods that accept instances of the same class as parameters.
  3. Define classes that implement public interfaces such as Comparable.