Required Text: Course notes: From Vision to Execution: Computer Science and the Creative Process by David Wonnacott. Available at the Haverford College book store for less than the price (including shipping) of ordering directly from lulu.com.
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.
Experience with programming or Python is not required; we will discuss, in the lecture and lab, all of the programming techniques and language features that we expect you to know and use. This course is designed to serve all interested students.
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). Frosh may wish to take Discrete Math concurrently or wait for their Sophomore year.
Description: A general introduction to the study of computer science.
Computer science investigates the fundamental laws governing computational processes and objects. The basic elements of a computation are algorithms and data structures. Computer scientists study the construction and properties of these elements, their composition into larger scale software programs or computer hardware, and their interactions with human beings and effects on society. (By analogy, biology investigates fundamental questions about life, exploring scales both small (molecular biology) and large (ecosystems), and physics investigates fundemental questions about matter, energy, space and time.)
CMSC 105 begins the study of computer science with a brief overview of algorithms, data structures, and software, followed by an in-depth introduction to the intellectual tools used by computer scientists to create and investigate algorithms, including:
- Producing and understanding formal and informal descriptions of problems to be solved.
- Developing an appropriate test suite for a given problem.
Developing an algorithm to solve a given problem, using techniques such as
- deriving an algorithm from a precise problem statement,
- breaking a problem into cases,
- reducting a problem to a previously solved problem,
- top-down design,
- and enumerate-and-test.
- Expressing an algorithm as a collection of Python functions using either recursion or iteration.
- Distinguishing an abstract statement of what an algorithm does from a concrete statement of how it does it.
- Documenting the important algorithm design decisions with Python comments.
- Understanding the execution of an algorithm in terms of both a process of mathematical substitution or a process of step-by-step instruction following.
- Understanding and explaining why a correct algorithm is correct.
- Comparing different algorithms to solve a given problem.
- Separating the computational core of a program from its user interface.
- Constructing algorithms to simulate natural phenomena ("scientific simulations").
A detailed introduction to data structures is given in CMSC 106.
- CS 110 Introduction to Computing ( at Bryn Mawr) differs from CMSC 105 in that it covers topics from both CMSC 100 (see below) and from CMSC 105. Both CMSC 105 and CS 110 can be used as a prerequisite for CMSC 106 and a basis for a Computer Science Major, Minor, etc.
- CMSC/Bio 187 Scientific Computing: Discrete Systems and CMSC/Math 222 Scientific Computing: Continuous Systems are designed to serve as introductions to the Concentration in Scientific Computing, though CMSC 105 can play this role as well.
- CMSC 100 The World of Computing surveys the basic concepts of computer science with an emphasis on breadth instead of depth. CMSC 100 does not count as a prerequisite for other CS courses, and is primarily intended for students who who wish to enrich their understanding of computing and gain experience with information technology with a single semester's study of computer science.
- CMSC 101 Fluency with Information Technology does involving some programming and other topics from CMSC 105, but focuses more on the implications associated with the effective usage of computing and IT; this course also serves students looking to enrich their understanding of computing (like CMSC 100) with a single semester's study.
- CMSC 147 A History of Mechanized Thought, explores the history of computer and information systems, and is also designed to serve students seeking a single semester of CS.
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.)
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.