Beginning with the Class of 2013, a concentration in computer science consists of 11 courses: 110, 111, 123, 210, 220, 240, 410, and four 300-level courses numbered 310 and above. Furthermore, two of the 300-level courses must be designated programming intensive, and two of the 300-level courses must be designated theory intensive.
Concentrators fulfill the Senior Program requirement by taking 410. Students may earn departmental honors by maintaining a grade point average of 3.5 or higher in courses counting toward the concentration and distinguished achievement in 500.
Students contemplating a concentration in computer science should begin with 110. Students looking for a computer-related course but not necessarily contemplating a concentration in the subject should consider any course numbered less than 111.
A minor in computer science consists of 110, 111, two courses numbered 210 or higher, and one course numbered 310 or higher.
Investigation of the manner in which technological innovations arise to meet social needs and often later create unforeseen needs, with emphasis on digital technology. Topics will include the nature and history of digital computation, the development of the Internet, the storage and manipulation of digital information and the economic, social, and legal consequences of these technologies. May not be counted toward the concentration or the minor.
Secrets, Lies and Digital Threats.
Introduction to digital threats, computer security technology and strategies for combating digital threats. Through case study, students investigate the nature of digital threats, the limits of technology, and roles humans must play in protecting and securing digital creations. Topics include viruses, Trojan horses, worms, cryptography, threat modeling and risk assessment. Includes a service-learning component. No knowledge of computer programming required. Not open to students who have completed 110. May not be counted toward the concentration or the minor. Maximum enrollment, 24.
Explorations in Computer Science.
Investigation, through hands-on experience, of a modern application of computer science. Applications may include robotics, virtual reality, games, manipulation of digital media, and human-computer interaction. Topics for individual sections will be printed in the preregistration materials. No prior computer experience is expected. Not open to students who have completed 110. May not be counted toward the concentration or the minor. (Quantitative and Symbolic Reasoning.) Maximum enrollment, 20.
110F,S Introduction to Computer Science.
The first course in computer science is an introduction to algorithmic problem-solving using the Python programming language. Topics include primitive data types, mathematical operations, structured programming with conditional and iterative idioms, functional abstraction, objects, classes and aggregate data types. Students apply these skills in writing programs to solve problems in a variety of application areas. No previous programming experience necessary. (Quantitative and Symbolic Reasoning.) Maximum enrollment, 26. Hirshfield, Campbell, and Decker.
111F,S Data Structures.
A second course in programming, concentrating on the implementation of dynamic structures for data representation. Students will write programs in the C++ programming language which implement the following classic data structures, among others: stacks, lists, queues, hash tables, and trees. Course discussion will emphasize recursion, efficient implementations in terms of memory space and running time, computational complexity of algorithms, and introduction to two important fields of study: searching and sorting. (Quantitative and Symbolic Reasoning.) Prerequisite, 110, or placement by the department. A Campbell.
123S Discrete Mathematics.
Study of mathematical models and techniques commonly used in computer science. Emphasis on analytical and logical skills, including an introduction to proof techniques and formal symbolic manipulation. Topics include set theory, number theory, permutations and combinations, mathematical induction and graph theory. Topics will be reinforced with hands-on experiences using the ML programming language. Appropriate for students with strong pre-calculus backgrounds. No previous programming experience necessary. (Quantitative and Symbolic Reasoning.) Not open to seniors; open to juniors by consent of instructor. Decker.
Topics in Computer Science I.
Study of an area in computer science. Content, differing from year to year, has included computer organization, neural networks, genetic algorithms and parallel computation. Prerequisite, any computer science course and consent of the instructor. May be taken more than once. Maximum enrollment, 26.
210F Applied Theory.
An investigation of the nature of computation through development of several models of computation. Topics include finite state machines, pushdown automata and Turing machines, the Chomsky language hierarchy, discussion of computational complexity, and illustration of how these abstract models of computation may be applied to language recognition problems such as lexical analysis and parsing. (Quantitative and Symbolic Reasoning.) Prerequisite, 123; or, senior standing and permission of instructor. Decker.
220S Principles of Programming Languages.
Investigation into the nature, features, design and implementation of programming languages. Students will gain experience with a wide variety of programming languages through programming exercises. Topics will include, among others, object-oriented programming, functional programming, higher-order functions, type systems and polymorphism. Prerequisite, 111; or, senior standing and permission of instructor. Hirshfield.
240F Computer Organization and Assembly Language.
A study of the connection between high-level programs and the machines on which they run by means of extensive programming experience using assembly language. Topics will include translation of high-level language idioms into assembly language, number systems and representation schemes, exceptions, interrupts, polling, and an introduction to the structure of the underlying hardware. In the final project, students develop an assembler. Prerequisite, 111; or, senior standing and permission of instructor. Maximum enrollment, 26. Campbell.
290F,S Programming Challenges.
Study of classic programming problems from regional and national programming competitions. Students are required to participate in a regional programming contest. Prerequisite, CPSCI 111, and consent of instructor. One-quarter course credit. Offered credit/no credit. May be repeated. Students may count up to one credit from courses numbered 290-298 toward graduation. Maximum enrollment, 20. Decker and Campbell.
The Programming Language Lisp.
Development of expertise in the programming language Lisp. Emphasis on learning technique and solving problems naturally suited to Lisp. One-quarter course credit. Students may count up to one credit from courses numbered 290-298 toward graduation.
The Programming Language C++.
Development of expertise in the programming language C++. Emphasis on learning technique and solving problems naturally suited to C++. One-quarter course credit. Students may count up to one credit from courses numbered 290-298 toward graduation.
The Programming Language Fortran.
Development of expertise in the programming language Fortran. Emphasis on learning technique and solving problems naturally suited to Fortran. One-quarter course credit. Offered credit/no credit. May be repeated once. Students may count up to one credit from courses numbered 290-298 toward graduation. Maximum enrollment, 20.
Topics in Computer Science II.
In this course we will explore the state-of-the-art in natural language processing, that is, algorithms for extracting useful information from written text, and tools that employ these algorithms in various ways. Topics include NL parsing, morphological analysis, part-of-speech tagging, semantic mapping of terms, knowledge representation, and ontologies. A particular domain of interest, though not an exclusive one, will be the extraction of knowledge from abstracts of scientific papers in bio-medicine. Prerequisite, CPSCI 110. Maximum enrollment, 10.
Study of the translation of high-level languages into assembly language. Topics will include tokenizing, parsing, type checking, code generation and optimization. Each student will implement a significant portion of a compiler. Programming intensive. Prerequisite, 210, 220 and 240. Maximum enrollment, 26. Campbell.
Study of how computers are built. Starting with fundamental logic gates, students will learn how to construct fundamental computational, memory and control components using digital logic. Students study the implementation of arithmetic logic units, processor control and datapath design. Topics will include performance analysis, pipelining, cache design, virtual memory, disk storage, and multicore design. Theory intensive. Prerequisite, 240. Some programming required. Maximum enrollment, 26.
Discussion of the canon of standard algorithms, with analysis of time and space complexity. Topics will include, among others: sorting, searching and selection; numerical algorithms; string matching; graph algorithms; parallel algorithms; non-determinism and NP-completeness. Theory intensive. Prerequisite, 111 and 123. .
Study of the design and implementation of computer operating systems. Students will develop at least four significant projects related to the topics of process scheduling, interprocess communication, memory management, file systems, access control, device drivers and security. Programming intensive. Prerequisite, 240. Maximum enrollment, 26.
Database Theory and Practice.
A study of modern database systems. Topics include data models, query languages, topics in database design, efficiency issues in query processing and database system architecture. Typical activities will consist of design and analysis of parts of a relational database, implementing queries in the SQL language, and time and space analysis of possible database architectures. Theory intensive. Prerequisite, 111. Maximum enrollment, 26.
375S Artificial Intelligence.
Exploration of AI theory and philosophy, as well as a variety of algorithms and data structures, such as heuristic strategies, logic unification, probabilistic reasoning, semantic networks and knowledge representation. Topics include application areas such as natural language understanding, computer vision, game playing, theorem proving and autonomous agents. Programming intensive. Prerequisite, 220. (Same as Neuroscience 375.) Hirshfield.
410F Senior Seminar.
Practicum in which teams of students provide computer expertise and support for faculty research projects. Topics include software engineering analysis, design, coding, testing, maintenance, and documentation. Prerequisite, 210, 220 and 240. Open to senior concentrators only. Maximum enrollment, 26. Decker.
Readings in Computer Science.
Reading in a field of computer science. The class will read several papers assigned weekly from research conference proceedings and journals. Classes will consist of discussions of the day's paper(s). Students will develop a comprehensive annotated bibliography and lead the daily discussions. Does not count toward the concentration or minor. Prerequisite, Consent of instructor. May be repeated for credit with permission of the department. Maximum enrollment, 6.
500S Honors Thesis.
A semester-length research project. Open to qualified senior concentrators. Prerequisite, Three 300-level courses numbered 310 and above, 410 and consent of the department. Maximum enrollment, 26. Campbell.
(from the Hamilton Course Catalogue)