Front Matter

Title Introduction to Computer Science
Instructor Dr. Acacia Ackles
Code CMSC 150
Units 6
Room Briggs 419
Time MWF 9:50 AM - 11:00 AM (Lecture); Tu 8:30 AM - 10:15 AM (Lab)

Course Materials

Material Name Link Notes
Gradebook Canvas Link Learning Hub
Autograder Gradescope Link Homeworks & Labs
Reading Portal Persuall via Canvas Reading
Textbook Think Java, 2nd Edition 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

Office Time Days
Steitz 131 (NOT Briggs) 11:00 AM - 12:00 PM M/Tu/W/Th/F

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. Or you can swing by Steitz and see if my door is open; if it is, you are completely welcome to stop by.


You may also find that working with a tutor one-on-one is helpful for your learning. Tutors are available through the CAS (Center for Academic Success) and work with you individually and on your own schedule, including (at their discretion) outside regular class hours.

Make sure that even if you are meeting with a tutor, you are following the Collaboration Policy outlined below.

You can reach out to tutors for the course individually via email.

Here are the available tutors for the course.

Name Email
Hung Nguyen
Maddie Guest
Amir Zarandi

Here is a suggested email template. (You do not have to follow this exactly; this is just in case you aren’t sure where to start or how to reach out.)

Subj: CMSC 150 Tutoring

Hi < Tutor Name >,

My name is < Your Name >. I’m currently enrolled in CMSC 150: Intro to Computer Science and I am looking for a tutor, especially to go over < a particular assignment/some topic >. Do you have space for tutoring, and if so what are your available tutoring hours?

Thanks, < Your Name >


This course is intended as the first course for a major or minor in Computer Science. But it’s also, at its heart, a course on problem-solving. After all, programming a computer involves understanding what problem we are trying to solve, identifying one or more ways we can approach solving that problem, and coming up with a step-by-step process for solving the problem. This step-by-step solution, translated into a computer language (Java in this case) is what ultimately becomes our computer program. This whole procedure is called algorithmic thinking, and is a big part of what this class is all about.

You might be surprised that this class is actually not intended to teach you Java. This class is actually intended to teach you the basics of computer science and computer programming, and we use Java as a tool to get there. The material you learn in this class is transferable to other object-oriented programming languages. My goal is to get you “thinking like a computer scientist”, moreso than it is to make you an excellent Java programmer.

If that sounds like fun to you, then good! Let’s go. If you’re looking for something else–and in particular, if you are looking for only a single course in CMSC–you maybe looking for CMSC 140.

Learning Goals

By the end of this course, you should be able to do the following:

  • L1: Algorithmic Thinking & Programming Basics: Take a problem, break it down into a series of steps (an algorithm), and identify the programming components most appropriate to use in Java to tell the computer how to solve the problem. Those components include:
    • variables
    • loops (for and while)
    • conditionals
    • functions
    • lists
    • dictionaries
    • classes
    • methods
  • L2: Debugging: Debug syntactic and logical errors in a program in a systematic fashion, and know how to ask good questions when new problems arise
  • L3: Style: Write code that is easy for others to understand because it uses effective variable names and comments, and is well-organized using functions and objects as appropriate
  • L4: Code Review: Read and explain code written by others and approach that process in a systematic way
  • L5: Collaboration: Use Git and GitHub to handle versioning of projects and sharing of projects with collaborators
  • L6: Reading: Be able to carefully read and interpret written instructional material related to Java programming and computer science
  • L7: Reflection: Be able to reflect on your work and identify areas of strength and areas for improvement


This class will probably be graded very differently than you’re used to. We’ll take time at the beginning of class to discuss the structure and assessment for the class. Please read everything below, but here are the main bullet points:

  • Every assessment (homework, labs, exams, and final project) will be graded on a mastery scale
  • Every learning objective will have associated assessments; demonstrating mastery of those assessments will demonstrate mastery of the learning objective
  • The more learning objectives you demonstrate mastery of, the higher grade I can give you
  • All assessments may be revised however much you wish

For more on why I’m doing this (if you’re interested), see the Pedagogy section.


On some days you will have assigned reading before class. This to introduce you to the material once before class, so that in class we can work together on improving your understanding.

I also assign reading because I want you to get used to reading instructional materials on programming languages. One day, there will be a widely popular programming language that you want to make use of that you didn’t learn in school; I want you to be able to teach that to yourself on a basic level once the time comes.

All reading for this course will be tracked on Perusall. You will earn credit for the reading if it is marked as “complete” by Persuall before class.

You can access Persuall via Canvas on the sidebar.


Every Friday for the last 10 minutes of class, you will have a quiz to check your progress in the course.

These are closed-book paper quizzes that will test your understanding of algorithmic concepts and basic Java syntax without assistance.

The purpose of these quizzes is to track your progress in the course and make sure you’re on track for our different learning objectives. Like attendance, they are tracked, but are not factored into your grade.

Homework, Labs, and Final Project

You will have three different kinds of outside-of-class assessments:

  • Homework. These are assessments completed outside of class. They will typically be due one week after they are assigned.
  • Labs. These are assessments completed in class, during our longer Thursday section. They are designed to be started and completed within our lab section, but there is no penalty to you (besides your time) if it takes longer than that.
  • Final Project. This is your sort of “capstone” to the course; it is a single project designed as an example of everything you have learned. For details on this final project, see the Final Project tab.


There will be two exams in the course; one in Week 4 and one in Week 8.

These are proctored, individual, in-person, computer-based exams. You will have access to your code editor of choice, and the documentation for the Java language.

The purpose of these exams is to test your ability to apply your understanding of Java to unfamiliar scenarios. Each exam will consist of a difficult problem which you will need to break down into component pieces to solve. More information about the exams will be available a week before they are scheduled.

Mastery-Based Grading Scheme

My goal for you this semester is that you come away as both a stronger programmer and a stronger learner. This course uses a version of ungrading or mastery-based grading. Rather than assigning point values to homework, quizzes, or projects, all assessments will be graded on a mastery scale:

Assessment Scale

M Mastery Demonstrates clear understanding of the learning objective; could explain the concept to others accurately; can implement without scaffolding
P Proficient Demonstrates some understanding of the learning objective; can sometimes implement but not yet consistently; needs scaffolding to implement properly
N Novice Does not yet have sufficient understanding of the learning objective; is beginning to build understanding but cannot implement consistently even with scaffolding
IC Incomplete Nothing written or turned in

Learning Objectives

Each assessment you complete (homework, labs, projects) will have associated learning objectives (see HW1 for an example). You’ll have at least 4 chances to demonstrate mastery of each learning objective.

For each learning objective, you’ll receive a grade on the same mastery scale as each individual assessment.

Learning Objective Scale

M Mastery Demonstrates mastery on all of the associated assessments
P Proficient Demonstrates mastery on 75% or more of all associated assignments, and proficiency in remaining
N Novice Demonstrates mastery on 50% or more of all associated assessments OR has “Novice” work on ANY assignment
IC Incomplete Has not demonstrated mastery on at least 50% of assignments for that objective

Below is an outline of which assessments match to which learning objectives. Don’t worry; as the semester goes on, I’ll keep a tally for you of how you’re doing on each (and you can always ask).

guide to grades

You can also keep your own tally; here is a link to a google drive version of this guide. You can make your own editable version by going to File > Make a Copy and selecting the folder you want to save it to. You can also save it to your computer as-is by going to File > Download.


This will translate to the gradebook as follows:

LU Grade CMSC 140 Requirements
A Demonstrate mastery (M) for all 7 learning objectives.
B Demonstrate mastery (M) for 4-6 learning objectives and proficiency (P) in remaining objectives.
C Demonstrate proficiency (P) or better in all learning objectives.
D Demonstrate proficiency (P) in 4-6 learning objectives and novice work (N) in remaining objectives. NOTE: Must demonstrate Novice (N) of L1: Basics.
F Demonstrates proficiency in fewer than 4 learning objectives OR is not at least novice in L1: Basics.

Your final project grade is a modifier on these grades.

Modifier Final Project Requirements
+ Demonstrates Mastery on Final Project
0 Demonstrates Proficiency on Final Project
- Demonstrates Novice Work on Final Project

If you fail to turn in a final project, your grade will drop one letter grade (e.g. if you would have gotten a B based on your learning objectives, you will now get a C).

Example: You have demonstrated Mastery of L1-L4 and L7, but earned proficiency in L5 and L6. This maps to a B. You do a good job on your final project and earn Mastery on that. This maps to a + modifier. Therefore, your final score in the class is B+.

I will post your final grades without the final project modifier to Canvas by the end of Week 9 so that you can 1. decide whether you want to try to earn any additional mastery points and 2. let me know of any possible discrepancies.

Assignments and Revisions

How to Turn In Work

Homework and Labs will be turned in to Gradescope.

Resubmissions and Exams will be turned in to Canvas.

Your final project will be uploaded to your GitHub as a repository, and the link submitted to Canvas. We will set up your github in the first week of class.


Homework and Labs

For that reason, any and all homeworks and labs in this class can be revised up until the end of the term. This is to give you the ability to control your own time management and offer flexibility; however, to protect my own time and flexibility, there are some guidelines.

Revisions must be turned in to their corresponding assignments on Canvas, not Gradescope.

If you are revising within one week of the original feedback, I will guarantee feedback within a week of your revised submission.

If you are revising after one week from the original feedback, I cannot guarantee how quickly you will receive new feedback; however, it will be taken into account by the end of the term.

Example 1: Homework 3 is due October 6th. You receive your feedback and a mastery score of Proficient on October 9th. You resubmit the assignment on October 16th. You are guaranteed to receive new feedback and an updated mastery score by October 23rd.

Example 2: Lab 2 takes place on September 22nd. You receive your feedback and a mastery score of Novice on September 24th. A while later, you decide to redo the lab and resubmit on October 24th. You may not receive feedback or an updated score until the end of the term. You could also receive it more quickly than that, depending on how busy I might be with other revisions.


You may optionally take a final exam as one final chance to earn mastery. You have the option to let this replace one or both of your midterm exam grades. You must choose before you take the exam whether you want it to replace one or both.

If you wish to do this, you must let me know in advance.

Late Work & Extensions

All late work for homeworks and labs falls under the revision policy and is considered work turned in as Incomplete. “Revise” (i.e. submit) within one week of the original deadline for guaranteed feedback.

Final Project components (proposal, rough draft, peer feedback, and final draft) may not be turned in late. These deadlines are firm so that you stay on track and can provide your peers with feedback. Any of these components may still be revised under the revision policy.

You may notice this means there is no late penalty for homework and labs. This is true, but the term moves quickly. If you are consistently submitting late work, it will impact your ability to succeed in class, and I will ask you to meet with me to figure out how to help you best succeed in the course.

Collaboration and Plagiarism

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 on a mastery-based scale specifically 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.

Acceptable Collaboration

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.

Unacceptable Collaboration/Plagiarism

The following are never allowed.

  • Posting actual code on Piazza where other students can see it (posting it privately so I can read it is okay)
  • 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.

* 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.

Course Policies


Attendance is recorded, but is not part of your final grade in the course. However, historically, regular attendance has a large impact on your final understanding of the material in the course.

I will ask you to meet with me if you miss more than one class in a row without notifying me. When we meet, we will talk about your performance in the class and if there are any barriers to your attendance or success. If you have attendance-related accomodations, we can work out a better system for keeping up with your class engagement.

I will post lecture notes and live coding demos to the course website under Materials so that if you do miss class, you can catch up. As always, you are responsible for learning any material that you miss, and as always, my student hours are available to discuss any material you might need guidance on.

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.)

Illness Policy

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.

Other Policies

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).

This syllabus is based heavily on one by Dr. Anya E. Vostinar. Thanks!