This syllabus is a living document; please be aware that many elements on this page will change throughout the semester, including the course schedule. It is the student's responsibility to review this page periodically for updates.
- The final exam study guide is posted
- Lab 12 is posted, due Wednesday, December 7 at 11:59pm.
- Reminder: the final exam will be given December 15 from 7pm-10pm in 101
TR 1:15–2:30pm, Science Center 240
Professor: Ameet Soni
2:30-3:30pm Fridays, and by appointment, Room 253
Welcome to CS21. This course will introduce fundamental ideas in computer
science while also teaching you how to write computer programs. We will
study algorithms for solving problems and implement solutions in the
Python programming language. Python is an
interpreted language that is known for its ease of use. We also introduce
object-oriented programming and data structures. A deeper coverage of these
topics will be presented in CS 35.
This course is appropriate for all students who want to learn how to write
computer programs and think like computer scientists. It is the usual first
course for computer science majors and minors. Students with advanced placement
credit or extensive programming experience should place out of this course and
instead begin with CS 33 or CS 35.
Goals for the course:
By the end of the course, we hope that you will have developed the
- Given a program, be able to simulate on paper how a computer would
execute the program, and show the results that would be produced.
- Given a problem, be able to design a clear, concise, and
correct pseudocode algorithm to solve it.
- Given a pseudocode algorithm, be able to successfully implement it in
- Be able to use top-down design to sub-divide a large problem into
reasonably-sized modular sub-problems.
- Given several algorithms for solving the same problem, be able
to analyze which algorithm would be more efficient in terms of running
- Develop debugging and unit testing skills. Consistently use
these skills while implementing programs.
- Learn to work as part of a team to solve problems starting from
design and continuing through to implementation.