Mark Sheldon

Mark A. Sheldon
Department of Computer Science
Tufts University
Halligan Hall, Room 224
161 College Avenue
Medford, MA  02155 USA

Web page:
Phone: 617-627-2491
Fax: 617-627-2227

Office hours for Spring 2019: T/Th 1400 – 16:30 and by appointment

Signing up for Comp 11 2018 Fall

For Fall 2018, we are doing a new version of Comp 11, Introduction to Computer Science. There will be two sections, and both sections meet Tu, Thu 3:00 – 4:15 pm. We will divide the sections up at the start of the term based on previous programming experience.

You can sign up for either section now, and we'll sort you into sections when the term starts. Since both sections meet at the same time, we can do this.

If you are unable take Comp 11 at that time, then you will not be able to take Comp 11 in the fall — there will not be a meeting at another time.

Should I take Comp 11 or Comp 15?

Many incoming students or others with some programming experience are curious about whether they should take Comp 11 (Introduction to Computer Science) or Comp 15 (Data Structures). There is no single right answer. I've written the following guide to thinking about the choice.

Comp 11 and Comp 15 currently both use C++. Comp 11 covers problem solving and basic programming skills from scratch — no experience necessary. You'll learn about how to break a problem down and solve it in a well-structured program, which means encoding your solution in a way that a computer can execute. This means that you'll learn something about how computers work, too. The programming tools you'll learn include values, variables, expressions, conditional execution (if statements), functions, recursion, loops, arrays, structs, and classes. All of these tools are pretty common in introductory courses students might take elsewhere (though recursion is often skipped).

Unlike most courses students have elsewhere, students also learn about computer memory organization, pointers, and manual allocation and deallocation of memory (dynamic arrays and linked lists). All of this is done on our department computers, which run the GNU/Linux operating system.

Comp 11 also includes two substantial programming projects, the second of which requires the student to manage memory in an application with 2 – 3 classes

Comp 15 starts from there. I sometimes call Comp 15 “Tools every working programmer must know”: it covers a variety of data abstractions that can be employed in many practical applications, their implementations and performance tradeoffs. Students solve larger problems and write larger programs, all of which require multiple source files. We also learn more about memory management, too, and use recursion a lot more. Comp 15 also includes two substantial programming projects that are more complex than those in Comp 11 and that involve making choices about data structures and their implementations.

Students with a strong programming background would be bored in Comp 11 for the first two thirds of the course. In the final month or so of the term, you work on larger projects (and use pointers), so most students with a high school background are challenged by the end of the course.

If you skip Comp 11, then, if you don't know about pointers, memory allocation/deallocation, and Unix, then you'll have to learn those skills in Comp 15. It's doable, and we support students during the transition, but it will be substantially more work for the first 3 – 5 weeks or so while you catch up on those topics.

If you have a busy schedule and are settling in to college, then it might make sense to take the easier course, reinforce the skills you have and acquire a few more — take Comp 11 (but don't complain that you already know the material for the first part of the course). This fall, we'll have a section for those with prior experience, and I'm hoping to do some other things, but we will still review and make sure the basics are strong.

If you are up for a challenge and are willing to do extra work, or if you already know about pointers, then take Comp 15.

Finally, as a rough guide: If you have a background in programming using C++ and know about classes, pointers, new, and delete, then you'll probably be ok in Comp 15. If your background is in C, and you are comfortable with pointers, then you'll have to work to come up to speed on data abstraction with classes, but Comp 15 should be in reach. If your background is in Java, then it will be substantially more work, even though you probably understand how to use classes better than is necessary. While the languages are syntactically similar, their memory models are different. As I said above, many students succeed with this background, but it's substantially more work for the first month or two. If you're background is in Python, then you have a larger gap to make up (static typing plus different syntax and the way we build programs).

You may choose to give Comp 15 a try for a week and then switch to Comp 11 if there is space. Going the other way is not recommended: coming in after others are well along in the transition will put you way too far behind.


Students often ask about auditing a course, like Comp 11, 15, 40, etc. Generally, I'm not a fan of auditing a programming course. If you don't actually do the work, you won't get any benefit at all: lectures are ok, but you won't build programming skills without programming (just like watching videos of people riding a bike won't enable you to ride a bike). On the other hand, if you are doing the work, then you may as well take the class.

If you're not in the class, but using staff resources to answer questions and grade your work, then you are competing with people who are paying for the course.

So, my position is, assuming there is room: You are welcome to attend lectures and do the work on your own, but you should not submit work for evaluation. For lab courses, you may join a lab only if there is space in that lab, but you can't displace a registered student. For 11 and 15, there are usually a few labs with small enrollments: See on SIS which ones those are.

Come to class on the first day, and, if there is room and you understand the restrictions above, I'll sign an audit form.

Also, you will need an EECS login to participate in class. Please see the EECS IT help desk folks to get an account. Their offices are in the very back of the second floor of Halligan, and their email is


2018 Fall: Comp 11: Intro. to Computer Science
Comp 50CP: Concurrent Programming
2018 Spring: Comp 11: Intro. to Computer Science
Comp 40: Machine Structure and Assembly Language Programming
2017 Fall: Comp 15: Data Structures
Comp 50CP: Concurrent Programming
2017 Spring: Comp 15: Data Structures
Comp 40: Machine Structure and Assembly Language Programming
2016 Fall: Comp 15: Data Structures
Comp 50CP: Concurrent Programming
2016 Spring: Comp 15: Data Structures
Comp 40: Machine Structure and Assembly Language Programming
2015 Fall: Comp 15: Data Structures
Comp 50CP: Concurrent Programming
2015 Spring: Comp 11: Intro. to Computer Science
Comp 40: Machine Structure and Assembly Language Programming
2014 Fall: Comp 11: Intro. to Computer Science
Comp 50CP: Concurrent Programming