Mark Sheldon


Mark A. Sheldon, Associate Teaching Professor
Department of Computer Science
Tufts University
Joyce Cummings Center, Room 440C
177 College Avenue
Medford, MA  02155 USA

Email:
Web page:   http://www.cs.tufts.edu/~msheldon/
Phone: 617-627-2491
Fax: 617-627-2227

Office hours for Fall 2022: Tu 2–4, We 3–4:15
Note: We have moved to the Joyce Cummings Center and are no longer in Halligan Hall. My office is Room 440C in the Joyce Cummings Center, and that is where you will find me!




Should I take CS 11 or CS 15?

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

CS 11 and CS 15 currently both use C++. CS 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 to apply to problems 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.

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

CS 15 starts from there. Another name for CS 15 could be “Data abstractions every working programmer must know: their applications, interfaces, implementation, and costs.” 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. CS 15 also includes two substantial programming projects that are more complex than those in CS 11 and that involve making choices about data structures and their implementations.

Students with a strong programming background would be bored in CS 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 CS 11, then, if you don't know about pointers, memory allocation/deallocation, and Unix, then you'll have to learn those skills in CS 15. It's doable, and we support students during the transition, but it will be substantially more work for the first 3 – 5 weeks 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 CS 11 (but don't complain that you already know the material for the first part of the course).

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

Finally, as a rough guide:

You may choose to give CS 15 a try for a week and then switch to CS 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.


Auditing

Students often ask about auditing a course, like CS 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 staff@eecs.tufts.edu

Teaching

2022 Spring: CS 11: Intro. to Computer Science
CS 21: Concurrent Programming
2021 Fall: CS 11: Intro. to Computer Science
DHP-D292/Comp 13: How Systems Work
(part of the Fletcher program in Cyber Security and Policy)
2021 Spring: Comp 11: Intro. to Computer Science
Comp 15: Data Structures
2020 Fall: Comp 15: Data Structures
DHP-D292/Comp 13: How Systems Work
(part of the Fletcher program in Cyber Security and Policy)
2020 Spring: Comp 15: Intro. to Computer Science
2019 Spring: Comp 11: Intro. to Computer Science
Comp 40: Machine Structure and Assembly Language Programming
2019 Fall: Comp 15: Intro. to Computer Science
Comp 50CP: Concurrent Programming
2019 Spring: Comp 11: Intro. to Computer Science
Comp 40: Machine Structure and Assembly Language Programming
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