Course Meeting Times

Lectures: 3 sessions / week; 2 hrs / session

Open Labs: 1 session / week; 2 hrs / session

Course Description

Do you want to learn how create blazing fast programs, be organized about developing a software project, write C/C++ code that will keep the people who maintain it very happy, learn how to ace an interview in either of these languages since you'll know them so well, and understand how to properly debug your code when you inevitably run into problems? Then this might be the crash course for you.

This course is a fast-paced introduction to the C and C++ programming languages, both of which are useful for classes, research, and jobs. Focus will be placed on practical knowledge, especially best practices, the powerful advantages C/C++ can offer, and modern features of C++. Students will come away with an understanding of when and why you might want to use C/C++ over another language, how both "low-level" and more abstracted programming can help you, and how to best develop your own software projects in these languages. This course assumes no C/C++ knowledge, but is intended for programmers with some background and experience in other languages.

Because this course is offered during IAP , lectures are given on Mondays, Wednesdays, and Fridays. There are open lab hours offered on Wednesday evenings for those who seek assistance, though attendance during this time is not required.

Should I Take 6.S096?

What is this course?

An introduction to the languages of C and C++, and topics you need to know in order to be an effective programmer in them. These include the syntax, compilers, debugging, working on C/C++ projects, object-oriented programming in C++, the power of generic programming, writing a compiled library, memory management, modern best practices, and other powerful tools available (such as threading / parallelism, new features of C++11, and optimization techniques).

What is this course not?

This course is not an introductory programming class. You should have at least one other language such as Python, Java, Scheme, C#, Ruby, or JavaScript well under your belt already. Some experience in working with the Linux command line (as you would find on Athena) is certainly useful, but not necessary; we will cover the important parts about using the tools and setting up your own development environment in the first class.

The following scenarios may also be helpful:

  • I've just taken 6.01 Introduction to Electrical Engineering and Computer Science I or 1.00 Introduction to Computers and Engineering Problem Solving. Yes, take the course!
  • I've taken 6.004 Computation Structures and 6.005 Elements of Software Construction, and I've been programming in Java for a while. Yes, take the course! The more programming experience you start with, the more you are likely to take away.
  • I've only done web programming and I want to learn something new. It depends on the sort of web programming you've done.
  • I've never taken a Course 6 subject or completed equivalent programming coursework before. Probably not advisable.
  • I've been doing high school programming competitions for years and working in C/C++, but haven't really used the object-oriented features of C++ or worked on large programming projects. Maybe. In fact, probably yes, take the course. About 50% of the course will involve features you most likely haven't been using much, and programming competitions don't always encourage the best coding practices (which this course will help you to correct).
  • I'm working in a lab doing research in a computational science. I'd like to find out how to improve our legacy software. Yes, this is a course for you.
  • I've worked on several large C++ projects at companies during summer internships. Don't take the course—but you might make a good TA for this course.


This course is offered on a pass/fail grading system. In order to pass, students must obtain at least 50% of the available coding assignment points, and must submit both code reviews.

Each of the three coding assignments is given at the end of the first three weeks, followed by the release of the problem statement for the last assignment (final project). Students will be asked to complete two reviews of code that is written by peer students.

Assignment 1 20
Assignment 2 20
Assignment 3 10
Assignment 4 (final project) 50

For more information on the coding assignments and the requirements of the code reviews, refer to the Assignments.