Instructor: Neena Thota;
David Wemhoener
Office: LGRC A353B;
Office Hours: TBA
Email: nthota@cs.umass.edu; wem@cs.umass.edu
COMPSCI 186 introduces foundational abstract data types and
algorithms. The main focus is on the use of data structures in designing and
developing programs to solve problems in a variety of domains. Specific topics
include lists, sets, maps, graphs, stacks, queues, searching, and sorting.
There will be weekly programming assignments, programming and written exercises
in discussion sections, regular quizzes, and a cumulative final exam.
COMPSCI 121 (or equivalent experience). This course is not a
substitute for COMPSCI 187. If unsure of whether this course or COMPSCI 187 is
more appropriate, contact instructor.
COMPSCI 186 is intended for
students who have completed COMPSCI 121. It focuses on appropriate use of,
rather than the implementation and analysis of, the data structures studied in
COMPSCI 187, along with additional structures (such as sets and maps) that are
useful for practical programming.
For some students, 186 can
serve as an alternative to 187. It will be recognized as one of the core
courses for the proposed Informatics major, and the practical programming with
data structures in 186 will be adequate preparation for some courses such as
COMPSCI 326.
Computer Science majors
(both BA and BS) must still take 187, which is a prerequisite for all the
200-level core courses. Many majors and applicants to the major will find 186
to be good additional advance preparation for 187.
COMPSCI 186 requires students to engage in extensive problem
solving and critical thinking. In particular, through a project-based
curriculum, students expand their ability to design, reason about, and
implement non-trivial algorithms and data structures in a general-purpose
programming language.
As the course progresses, project scope expands, and the amount
of explicit guidance that students are given is decreased. To succeed, students
must incrementally improve their programming ability. Thinking in abstractions,
planning large (multi-file) programs, and learning to understand why a program
does or does not work as expected are activities that require significant
critical thinking and problem solving.
In addition to programming projects, students complete both
in-class and take home exercises, about six half-hour quizzes and a final exam.
Among other things, these activities serve to evaluate other aspects of
critical thinking and problem solving that are better assessed in a written
format. For example, students might be asked to determine the asymptotic
running time of a snippet of code; to show (on paper) how a particular
algorithm would operate on a given data set (such as a graph traversal
algorithm); to identify logical errors in code; or to compare how operations
defined by set theory and by the set implementation of programming language
differ.
An iClicker2 (ISBN 9781319202989) is required for this course.
You will need to bring it to every course meeting, including the first one.
Most technical material will be presented in lecture or on the
course website in Moodle. We will use the OpenDSA eTextbook (which is free for students) for home work exercises. For students who want additional
references, there are several optional resources:
* The Java Tutorials are
guides to the Java language. Specific trails to follow are noted in the
schedule.
* Similarly,
the Java Platform API provides
a comprehensive description of all classes Java Platform; we will make
extensive use of some of them and they are fully documented by Oracle.
* Think Java: How to Think
Like a Computer Scientist, 6th edition, by Allen B. Downey
and Chris Mayfield. It primarily focuses on the craft and science of problem
solving with computers, with a secondary focus on Java. You may find this book
useful to review before the start of the semester or during the first few weeks
of this course.
* Learning Java, 4th
edition, by Patrick Niemeyer and Daniel Leuck. This
book is aimed at working programmers, not computer scientists, and focuses much
more on use of Java, tooling in the Java ecosystem, and practical
considerations than Think Java. You may find it useful when using some of the
tools we require in this course, and when completing some of the advanced (and
optional) parts of later programming assignments.
* Java Precisely, 3rd
edition, by Peter Sestoft. If you want to know
something about the Java language - syntax or semantics - this book is a great
reference. Note that it is not a textbook or a how-to manual, but a reference
book that explains what specific part of the language mean. It also provides
some explanation of important parts of the Java standard library (also known as
the class library or Java Platform API).
* Eclipse IDE Pocket Guide, by Ed
Burnette. You might find it helpful to have a guide to Eclipse, the Integrated
Development Environment (IDE) we will be using in this course. The Pocket Guide
is not comprehensive, but it is a valuable reference to the most commonly-used
parts of the IDE.
The relative value of the various course components is
approximately as follows:
35% programming assignments
20% homework and lab assignments
10% in-class exercises
20% quizzes
15% final exam
The numerical cutoff for final course letter grade assignment
will be made after all grading is completed. As a rough guide, expect to
require at least a 93 to get an A, a 90 to get an A-, an 87 to get a B+, an 83
to get a B, an 80 to get a B-, and so on.
There are no opportunities for extra credit in this course.
Attendance: Attendance
is required for lectures and discussions.
For all excused absences, you are offered
an opportunity to make up missed work. The excuses that will be accommodated
with written documentation are: Medical conditions, religious or funerary
events, university-related event (athletic event, field trip, or performance),
extenuating non-academic reasons (military obligation, family illness, jury
duty, automobile collision). Problems with computer or internet access, holiday
or family travel, are not valid excuses.
Incompletes: Incompletes
will be granted only in exceptional cases, and only if you have completed at
least half the course with a passing grade. Prior to that, withdrawal is the
recommended course of action.
Late
submissions: If you need an extension for an assignment, contact us a
reasonable amount of time - generally, at least a full business day- before the
assignment is due. If you are incapacitated for one or more days up to and
including the due date, you should submit written documentation explaining your
inability to work on course material in order to consider granting an
extension.
Academic
Honesty Statement: You may discuss material with
others, but when collaboration is forbidden (as it is on programming assignments),
your writing (code and prose) must be your own. Publicly or privately
redistributing solutions to exercises, homework, or assignments for this course
is considered an act of academic dishonesty. Please refer to the UMASS Academic
Honesty Policy and Procedures for guidelines on sanctions that may be imposed
on any student who has committed an act of academic dishonesty (http://www.umass.edu/honesty/).
Accommodation
Statement:
Any student who requires an accommodation due to a disability is directed to
contact the UMASS Disability Services:
http://www.umass.edu/disability/ to obtain the appropriate accommodation forms.
If you have a documented disability that requires an accommodation, please
notify us within the first week of the semester. Our goal is to provide every
student with a high-quality learning experience. Please contact us if you have
any questions or concerns about disabilities or any issue that may impact the
quality of your learning.