For information about Web accessibility, please contact the Webmaster at

Haverford College

Computer Science

header image

CMSC 107: Introduction to Computer Science and Data Structures

Fall 2018, Prof. Kris Micinski

Instructor: Kris Micinski (

NOTE: This is a new course for the Fall of 2014. Content will be added to this page during the summer and fall of 2014; if you're interested in more information, for example the labs, consult the pages for both CMSC 105 and CMSC 106.

Additional Resources: Note that other information on this course will be available to registered students via the course Moodle page, and scheduling information can be found on the course Google Calendar.

Required Text:
Course notes: From Vision to Execution: Computer Science and the Creative Process by David Wonnacott. You are welcome to download this as a free PDF from Dave Wonnacott's web page. Paper copies will be available at the Haverford College book store for less than the price (including shipping) of ordering directly from Printed copies of the 2014 edition may not be available until the second week of classes, but the 2013 edition is almost identical and can be used in 2014.
Course textbook, for the second half of the semester: We will almost certainly refer to Liskov and Guttag's Program Development in Java: Abstraction, Specification, and Object-Oriented Design as a guide to conceptual material, especially in the second half of the course, though we will not be working with Java.

Other References: The course notes cover all the features of the Python language and all the mathematical techniques that will be needed in this cours; students who would like extra help learning the words of Python are invited to practices (especially in groups) with certain examples on the CodingBat web site. The tutorial on the Python web site explains a great deal about the Python language, but it mixes together things from many different weeks of our first year's curriculum. David Gries' The Science of Programming (Springer-Verlag 1989, ISBN 978-0-387-96480-5) goes into much more detail about the use of formal reasoning techniques to develop imperative programs (from the second half of CMSC 105.

Prerequisites: This course is open to students who place into it on the CS placement exam. It is intended for students who have prior experience with computer programming but have not worked significantly with the techniques for reasoning about computation in CMSC 105 and CMSC 106, such as those listed under "Description" below.

Majoring/Minoring in Computer Science: Sophomores planning to major or minor in computer science should take Math/CS 231 (Discrete Math) concurrently with CMSC105 or CMSC106 (in the spring) or CMSC 107. Frosh may wish to take Discrete Math concurrently or wait for their Sophomore year.

Description: This course provides an introduction to a variety of approaches to reasoning about computation, for students who already have some experience with programming. Topics include:

  • Use of multiple paradigms/approaches to programming: fundamentals of pure functional, imperative, and object-oriented programming
  • Techniques for algorithm design
  • Precise descriptions of the behavior of software components: function pre- and post-conditions; axiomatic definition of data types
  • Precise statements about the internal workings of software components: progress expressions, loop invariants, data type representation functions and representation invariants
  • Definition and use of test suites to evaluate software
  • Use of direct proof techniques to reason about software components
  • Code reviews and other peer-centric approaches to evaluating software

If you do not have prior programming experience, you should start with CMSC 105. If you are already familiar with many of the topics listed above, contact a faculty member about placing into the second-year curriculum (this is quite unusual but not impossible).

Evaluation: 1 midterm & 1 final exam, weekly labs, with the final grade determined by approximately 45% lab grades, 50% exam grades, and up to 5% class participation (including attendance and completion of "mini-homework" and in-class exercises/assesments.)

Late policy: No late work will be accepted - any work handed in late may be graded as a 0. Extensions must be requested at least 24 hours in advance.

Email: Expect 24 hours for an email response. You may get an email sooner, for example if it requires a simple yes or no response, but when a response is required before a deadline be sure to send the email at least 24 hours before the deadline.

Collaboration: You are encouraged to discuss the lecture material and the weekly labs and problems with other students, subject to the following restriction: except when otherwise noted, your memory should be the only "product" of any discussion of a lab --- you may not write up solutions together, or exchange written work or computer files pertaining to labs.

Collaboration is not allowed on exams.

Learning Accomodations: Students who think they may need accommodations in this course because of the impact of a disability are encouraged to meet with the instructor in private (e.g., during office hours) early in the semester. Students should also contact Rick Webb, Coordinator, Office of Disabilities Services (610-896-1290) to verify their eligibility for reasonable accommodations as soon as possible. Early contact will help to avoid unnecessary inconvenience and delays, and facilitate learning.