Have you ever wondered why C programs seem to run faster than Python programs? Have you ever been confused by an error message and wondered why Java couldn’t understand your program? In CSCI 1260, we’ll learn how compilers read in code in one language and produce code in another; in particular, we’ll learn how to translate high-level languages to code that your computer’s processor can understand. We will get hands-on practice developing compilers for a series of increasingly complex languages. Along the way, we’ll learn some general best practices for developing and testing complex software systems.

High-level information

Time and location
TTh 2:30-3:50, on Zoom
Doug Woos (
Course website
CSCI 0220, or CSCI 0320, or CSCI 0300, or CSCI 0330, or CSCI 1310, or CSCI 1330.

Some of the content in this document is adapted with permission from materials developed by Kathi Fisler and Shriram Krishnamurthi.

Learning objectives

After completing this course, students will be able to:

  • Develop programs to translate between different programming languages
  • Understand the distinctions and relationships between compilers and interpreters
  • Reason about compiler correctness
  • Read and write assembly language

Course culture

Students taking CSCI 1260 come from a wide range of backgrounds. We hope to foster an inclusive and safe learning environment based on curiosity rather than competition. All members of the course community–students, TAs, and the instructor–are expected to treat each other with courtesy and respect. Some of the responsibility for that lies with the staff, but a lot of it ultimately rests with you, the students.

Be aware of your actions

Sometimes, the little things add up to creating an unwelcoming culture to some students. For example, you and a friend may think you are sharing in a private joke about other races, genders, cultures, etc, but if you do this in a public space and a classmate overhears it, it can have adverse effects. There is a fair bit of research on something called “stereotype threat”, in which simply reminding someone that they belong to an particular culture or identity (on whatever dimension) can interfere with their class performance.

Stereotype threat works both ways: you can assume that a student will struggle based on who they appear to be, or you can assume that a student is doing great based on who they appear to be. Both are potentially harmful.

Bear in mind that diversity has many facets, some of which are not visible. Your classmates may have medical conditions (physical or mental), personal situations (financial, family, etc), or interests that aren’t common to most students in the course. Another aspect of professionalism is avoiding comments that (likely unintentionally) put down colleagues for situations they cannot control. Bragging in open space that an assignment is easy or “crazy”, for example, can send subtle cues that discourage classmates who are dealing with issues that you can’t see. Please take care, so we can create a class in which all students feel supported and respected.

Be an adult

Beyond the slips that many of us make unintentionally are a host of explicit behaviors that the course staff, department, and university (and beyond) do not tolerate. These are generally classified under the term harrassment, with sexual-based harrassment a specific form that is governed by federal laws known as Title IX.

Brown’s Title IX Web site provides many resources for understanding the terms, procedures, and policies around harrassment. Make sure you are aware enough of these issues to avoid crossing a line in your interactions with other students (for example, repeatedly asking another student out on a date after they have said no can cross this line).

Your reaction to this topic might be to laugh it off, or to make (or think) snide remarks about “political correctness” or jokes about consent or other things. You might think people just need to grow a thicker skin or learn to take a joke. This isn’t your decision to make. Research shows the consequences (emotional as well as physical) on people who experience harrassment. When your behavior forces another student to focus on something other than their education, you have crossed a line. You have no right to take someone else’s education away from them.

In light of recent reports about such issues on campus, Brown is taking additional steps to reduce this form of harm. Therefore, if we cannot appeal to your decency and collegiality, let us at least appeal to your self-interest. Do not mess around on this matter. It will not go well for you.

Issues with Course Staff

Professionalism and respect for diversity are not just matters between students; they also apply to how the course staff treat the students. The staff of this course will treat you in a way that respects our differences. However, despite our best efforts, we might slip up, hopefully inadvertently. If you are concerned about classroom environment issues created by the staff or overall class dynamic, please feel free to talk to us about it. The instructor and the HTA in particular welcome any comments or concerns regarding conduct of the course and the staff.

Sometimes, you may not be comfortable bringing this up directly to us. If so, you are welcome to talk to Laura Dobler (the CS dept diversity coordinator) or to the Department Chair, Ugur Cetintemel. You may also reach out to Rene Davis in the Title IX office.

As a department, we will take all complaints about unprofessional or discriminatory behavior seriously.


The remote classroom

Our time in the classroom will be a mix of traditional lecture and discussion-based activities. Please come to class ready to engage with the material and ask questions about things you don’t understand. The pre-class drills (discussed below) should help you with this!

Time expectations

In addition to 3 hours a week in lecture and 2 hours a week in lab, students will be expected to spend 6-8 hours a week outside of class on homework and drills, plus an average of 2 hours per week studying for the midterm and the final exam.

Required materials

There is no textbook for the course; all readings will be provided digitally.

You will need access to a computer in order to complete the assignments. If you do not have access to a computer, please contact Brown IT services about getting access to a loaner laptop.

Assignments, exams, and grading

All assignments will be posted and handed in online. Approximate grading weights for each type of assignment are listed below.

Homeworks will be due on Tuesdays at 9pm. Homeworks will be due either a week or two weeks after they are released, and there will never be more than one homework out at a time. Online drills will be due at noon (12pm) on Tuesdays (so if you’re a late sleeper, please plan on doing them the day before!).

Drills (10%)

Drills are short online quizzes that will be due shortly before class every Tuesday. These should take around 30 minutes to complete, and are designed to help us–and you!–understand which subjects you’ve internalized and which subjects we might need to spend more time on.

Drills will be graded for completion; you will get credit as long as you appear to be taking them seriously. You can miss one drill and still get full credit for this part of the class.

Labs (10%)

You will have a two-hour synchronous lab session every week. Labs are hands-on programming projects where you’ll practice writing code and integrating concepts learned in class in order to solve new problems. You’ll write programs in small groups guided by our course TAs. Labs are graded based on attendance and completion. They are designed to be completed during the lab session and checked off by a TA; if you do not complete a lab during the session, you should complete it on your own and get it checked off at TA hours to get credit. Students can miss two lab sessions without penalty as long as they complete those lab projects and get them checked off. Students who have confirmed conflicts for all available lab sections can make arrangements to complete labs independently and discuss them with the TAs in office hours.

Homework assignments (50%)

Homeworks, due every week or two, are designed to help you understand the course material and put it into practice. Programming assignments will be graded for correctness and test quality. Some of your homeworks will include short, written reflections on readings related to the course material. These will be graded lightly–we’re asking you to think seriously and carefully, but not to write full formal papers. Homework assignments should be completed and handed in individually (but see the collaboration policy below–you are free to discuss the homeworks with your classmates)

Oral examinations (30%)

There will be two oral examinations. These will be 15-minute conversations with the instructor, conducted over Zoom–once during the middle of the semester and once during finals week. During these exams, Doug will ask two types of questions:

  • Explain a particular aspect of your solution to a given homework problem
  • Explain the answer to a particular drill question

These questions aren’t designed to trip you up or to require quick thinking; they are designed to assess your understanding of problems and questions that you have already worked through.

The oral examinations will be weighted so that whichever you do better on counts for more of your overall course grade (20% for the exam you do better on, 10% for the other exam).

Late assignments

Each student will have five “late days” that can be used throughout the semester on homeworks. Each late day allows the student to hand in a homework one day late. No more than three can be used on an individual assignment.

If your assignment is handed in late, you are out of late days, and you have not been granted an extension (see below), your assignment will not be graded.


Please contact the instructor directly regarding extensions. Requests for routine issues such as work in other courses or interviews should normally come out of your allotment of 5 late days. Extensions for more substantial illnesses and personal issues will be granted on a case-by-case basis. The instructor will generally require a note from the Deans to grant an extension for a non-medical reason. If you think you need an extension on an assignment, please reach out as early as possible.

Anonymous grading

All homeworks will be graded anonymously. Please do not include identifying information with your homework submission.

Regrade requests

You are encouraged to look over your assignments after they have been graded. If you find a possible error or believe that you lost too many points, please submit a regrade request through the course hand-in software. You must initiate such inquiries within one week of receiving your grade. The grading will be freshest in your TA’s mind during this time, and this prevents a backlog of requests from arising towards the end of the semester.

One-time Lab Switches

If you discover that you cannot make your lab section during a particular week, you can email the TAs to temporarily switch into another lab section. You should send this email at least 24 hours in advance of your scheduled lab. That way, the TAs will have sufficient time to read your email, help you find an open slot in another lab, and confirm the change. If you email the TAs with less notice, say only 2 hours in advance of your scheduled lab, and no TA is able to help you before your usual lab time, you are expected to go to your assigned lab.


If you feel you have physical, psychological, or learning disabilities that could affect your performance in the course, we urge you to contact SAS (formerly SEAS). We will do whatever we can to support accommodations recommended by SAS.

Religious Observance

If you require accommodation for religious observance, please contact Doug at least a week before the deadline in question to make arrangements.

Personal Emergency

In the event of a medical or family emergency, contact Doug to work out accommodations.

Getting help

Our goal, as a course staff, is for every student to do well in the class. As such, we encourage you to ask questions about anything you don’t understand. Whether you are confused by something from lecture or are having trouble with an assignment, please reach out to us!


Our course uses Piazza for online discussions. You can use it to ask questions about course concepts, assignments, and logistics. Posts can be either public or private; public posts are visible to everyone, while private posts are visible only to course staff. Any questions having to do with your particular solution to an assignment should be private; all other posts should be public (if you have a question about something, it’s very likely that other students do, too!). The course staff reserves the right to make private posts public if the answer is of general interest.

Piazza is a discussion forum, so please feel free to respond to questions and comments–it’s great when students can learn from each other! When doing so, keep in mind the Course culture guidelines.

Posts made on Piazza after 10pm are unlikely to get a response until the next day.


Please post questions about the course to Piazza rather than emailing the course staff–it’s very useful to have all course questions in one place where any of us can answer them. If you are unable to log in to Piazza, you can contact the whole course staff at

If you have concerns of a personal nature (a problem with another student, for instance), please email the HTA or the instructor

Office hours

Each TA will hold walk-in office hours per week. Doug will have open office hours, and is also available for appointments. Each week’s schedule is available on the course website.

Please come to office hours! Coming to office hours does not send a signal that you are behind or need “extra help”; on the contrary, the most successful students are usually those who come to office hours early and often.

Feel free to come to Doug’s office hours even if you don’t have a specific question about an assignment; Doug is happy to chat about the course material, computer science in general, careers in computer science, etc.

Collaboration Policy

Drills should be done alone and without collaboration, as they are designed to help you and us assess whether you understand the concepts needed for the next lecture.

Labs should be completed with your assigned partner. There are no restrictions on collaboration between lab groups.

Homeworks are completed individually. We encourage students to talk about the assignments at a high level and to assist each other with debugging–for instance, talking about why code doesn’t compile or why a test is failing. Students should not, however, directly share code or try to find solutions on the internet.

The following examples of collaboration are allowed:

  • Discussing how to solve a problem with a classmate without writing any code
  • Showing your code to a classmate along with an error message or confusing output
  • Googling the text of an error message
  • Copying small snippets of code from answers on Stack Overflow

The following examples are not allowed:

  • Copying a large chunk of code from a classmate’s solution into yours
  • Talking another student through your solution as they type
  • Googling for complete problem solutions
  • Posting your solution in a publicly-accessible location

The oral examinations are intended in part to ensure that you are completing the homework assignments on your own–if you submit code, you are expected to understand what it’s doing!

Examinations are completed individually. Different students may get different questions; that said, do not discuss the questions from your oral examination until the examination period is complete, as there may be some overlaps.

If you have questions about the boundaries of the policy, please ask. There is never a penalty for asking.

Course announcements

Course announcements will be made via Piazza. Time-sensitive announcements will also go out via email.

The course staff may issue clarifications to assignments up to 48 hours before the due date.