Amherst CollegeWebsiteAcademic Catalog
Computer Science DepartmentDepartment Website
BS Degree in Computer Sciencesource 1source 2source 3
CS Courses
- Introduction to Computer Science ICOSC-111 (1)introCOSC-111: Introduction to Computer Science I
This course introduces ideas and techniques that are fundamental to computer science. The course emphasizes procedural abstraction, algorithmic methods, and structured design techniques. Students will gain a working knowledge of a block-structured programming language and will use the language to solve a variety of problems illustrating ideas in computer science. A selection of other elementary topics will be presented. A laboratory section will meet once a week to give students practice with programming constructs. Two class hours and one one-hour laboratory per week.
- Introduction to Computer Science IICOSC-112 (1)introCOSC-112: Introduction to Computer Science II
A continuation of COSC 111. This course will emphasize more complicated problems and their algorithmic solutions. The object-oriented programming paradigm will be discussed in detail, including data abstraction, inheritance, and polymorphism. Other topics will include stacks, queues, linked lists, programming for graphical user interfaces, and basic topics in probability. A laboratory section will meet once a week to give students practice with programming constructs.
- Systems I: Computer Organization and DesignCOSC-175 (1)sysCOSC-175: Systems I: Computer Organization and Design
This course will cover building blocks and design principles of computer systems, including how user programs are translated and executed on hardware. Beginning with Boolean logic and the design of combinational and sequential circuits, the course discusses the design of computer hardware components, microprocessing, pipelining, basic machine architecture, and the interpretation of machine instructions and assembly languages. The course will also introduce operating systems topics, basic memory management, and parallel processing. Projects will include the design of digital circuits and the simulated hardware execution of code. Two lectures and one lab each week. Fall semester. Professor Pentecost.
- Data StructuresCOSC-211 (1)introCOSC-211: Data Structures
A fundamental problem in computer science is that of organizing data so that it can be used effectively. This course introduces basic data structures and their applications. Major themes are the importance of abstraction in program design and the separation of specification and implementation. Program correctness and algorithm complexity are also considered. Data structures for lists, stacks, queues, dictionaries, sets, and graphs are discussed. This course will provide advanced programming experience.
- Systems II: Operating SystemsCOSC-275 (1)sysCOSC-275: Systems II: Operating Systems
This course will cover the crucial responsibilities and mechanisms of operating system kernels, focusing on the themes of abstraction, virtualization, concurrency, caching, and persistence. Topics will include processes, memory management and virtual memory, multi-processing and threads, file systems, and virtual machines.
- 3 × CS elective
- Senior Comprehensive Exercise(0)capstoneSenior Comprehensive Exercise
As the Comprehensive Exercise in Computer Science, seniors are asked to prepare a BRIEF presentation about a data structure that is new to them. The data structure is assigned by the department. The presentation will be in the form of a video, but other than that, the exact structure is up to the student. The completed video is reviewed by a faculty member.
Other Courses
- Open Curriculum23 × Free Elective
Learning Goals
We expect computer science majors to graduate with the following knowledge and skills:
- To be able to apply abstraction and algorithmic reasoning to the task of solving problems and to communicate those solutions clearly and effectively.
- To be able to design, implement, and evaluate computer programs that solve significant computational problems.
- To recognize, and know when to apply, a standard body of algorithms, data structures, and algorithm paradigms. To be able to reason about problem complexity and design new algorithmic solutions when faced with new problems.
- To understand how modern hardware and software systems are organized and why they are built that way. To be able to work through the implications of specific design decisions regarding computer architecture, operating systems, and memory structures, and to evaluate those decisions.
- To work with a variety of approaches to computational problem-solving via our elective courses. This experience may include: developing deeper understanding of theoretical aspects of computation; working with a variety of languages and language paradigms; understanding concurrency and network-based models of computation; and mastering techniques of specific problem areas such as artificial intelligence, graphics, optimization, and language and compiler design.
History of the Major
2024 | Replace 171 (Computer Systems) + CS Elective → 175 (Systems I: Computer Organization and Design) + 275 (Systems II: Operating Systems). |
2023 | |
2022 | |
2021 | Replace Comprehensive Exam → Video Presentation. old new |
2020 | |
2019 | |
2018 | |
2017 | Replace 161 (Computer Systems I) + 261 (Computer Systems II) → 171 (Computer Systems) + CS Elective. Replace 201 (Data Structures and Algorithms I) + 301 (Data Structures and Algorithms II) → 211 (Data Structures) + 311 (Algorithms). |
2016 |