 |
Member of the Division of Science
Henry Walker, Chair, Marge Coahran, Janet Davis, Samuel Rebelsky, John Stone, Jerod Weinman
People use computers because they can provide services and help in the solving of problems. Thus, many courses and much research throughout the College utilize various aspects of computing.
The discipline of computer science includes all aspects of the effective use of computers. Core areas within the undergraduate curriculum include multiple views of problem-solving, hardware design, operating systems, data organization
(structure) and processing (algorithms), software design, concepts of programming languages, and the theory of computation. Some topics, such as networks and compilers, explore elements of computer systems in more detail, while other areas, such as artificial
intelligence, computational linguistics, bioinformatics, human-computer interactions, and computer vision, integrate computer science with interdisciplinary studies.
Formal coursework is concentrated within the Department of Computer Science. Introductory courses emphasize multiple views of problem-solving, each with a different supporting computer programming language. The curriculum emphasizes basic
concepts and fundamental techniques; and courses make extensive use of MathLAN, the local-area network we share with the Department of Mathematics and Statistics, which includes about 170 workstations and six servers. Our outstanding facilities include several
computer-equipped classrooms, an open lab, and convenient study and tutoring areas.
The computer science major prepares students who plan careers in computer science, in the use of computing in other disciplines, in teaching, or in other professions. The curriculum is strongly influenced by national recommendations of
such professional bodies as the Association for Computer Machinery, the Computer Society of the Institute of Electrical and Electronics Engineers, and the Liberal Arts Computer Science Consortium. Students regularly supplement this formal coursework with independent
projects, internships, and student-faculty research. In addition, students often work with faculty throughout the College on a variety of special projects that involve computing.
The Major
A minimum of 32 credits in the department, including
- Computer Science 301
- Computer Science 341
- one of Computer Science 211 or 213
- one of Computer Science 302 or 362
- one of Computer Science 323 or 325
In addition, computer science majors are required to take Mathematics 218.
Computer Science courses numbered below 151 do not satisfy major requirements.
To prepare for these courses, most majors will take the standard introductory sequence (Computer Science 151, 161, and 207). Students with significant background in computer science, such as Advanced Placement coursework, can often take
Computer Science 153 in lieu of 151 and 161.
Most majors will prepare by taking the standard prerequisites for Mathematics 218 (Mathematics 131, 133, and 215), but students with significant background in mathematics can often bypass one or more of them.
All majors are encouraged to take statistics (Mathematics 209 or 335-336), Physics 220, and a course in technology and society (such as a foundation course in Technology Studies). Students considering graduate school in computer science
should take both Computer Science 211 and 213. Students planning to work in industry should take Computer Science 323 or 325 together with coursework in another discipline that uses computing in a significant way. Student considering a career in computing
are encouraged to participate in an independent project, internship, or research experience.
To be considered for honors in computer science, graduating seniors, in addition to meeting the College' s general requirements for honors, must demonstrate excellence in the major. The department applies the following criteria:
- Core Courses of study.
- Completion of Computer Science 211 or Physics 220, and
- Completion of Computer Science 213
- Additional coursework that is not used to fulfill another requirement.
- Completion of a 200- or 300-level course in computer science, or
- Completion of a statistics course at the 200 level or higher (Math 209, 309, 335, or 336), or
- Completion of Math 220 Differential Equations, Math 306 Mathematical
Modeling, Math 314 Topics in Applied Mathematics, or Math 321
Foundations of Abstract Algebra, or
- Completion of Physics 220 Electronics, or
- Completion of Psychology 222 Industrial Psychology or 260 Cognitive
Psychology.
- Participation in local activities related to computer science, judged to be
excellent by department faculty. Such activities might include:
- Giving talks at Extras sessions, or
- Doing independent projects (totaling four credits or more) in computer
science, or
- Carrying out research under the direction of a member of the department, or
- Developing a successful software package with positive assessment by
department faculty.
- Participation in the study or use of computer science outside of the
department, judged to be excellent by department faculty. Such activities
might include:
- Achieving a score at or above the 75th percentile on the Graduate Record Examination in Computer Science, or
- Receiving an award in the Mathematical Competition in Modeling, or
- Achieving a strong performance in the ACM Programming Competition, or
- Having a paper accepted by a refereed computer science journal or
conference, or
- Developing a successful software package with positive assessment by
outside referees or evaluators, or
- Contributing to an open source software package or resource, or
- Carrying out supervised research elsewhere.
105 The Digital Age (Spring) 4 credits
A study of core topics and great ideas in the field of computer science, focusing on underlying algorithmic principles and social implications. Topics may include multimedia and hypermedia, networks, architecture, programming languages,
software design, artificial intelligence, databases, cryptography, and the theory of computing. Incudes formal laboratory work. Prerequisite: none. COAHRAN, WEINMAN.
151 Functional Problem-Solving (Fall or Spring) 4 credits
A lab-based introduction to basic ideas of computer science, including recursion, abstraction, scope and binding, modularity, the design and analysis of algorithms, and the fundamentals of programming in a high-level, functional language.
Includes formal laboratory work. Prerequisite: none. STAFF.
153 Computer Science Fundamentals (Fall) 4 credits
Study of basic concepts of computer science, with an emphasis on problem-solving techniques from functional and imperative perspectives. Functional elements include data types, procedures as first-class objects, recursion, and binding.
Control structures, linked data structures, memory management, macro processing, compilation and linking, and data representation provide basic elements of imperative problem-solving. Additional topics include an introduction to GNU/Linux operating system.
Includes formal laboratory work. A student who receives credit for Computer Science 153 cannot receive credit for Computer Science 151 or 161. Prerequisite: three semesters of high school computer science or departmental placement. WALKER.
161 Imperative Problem-Solving and Data Structures (Fall and Spring) 4 credits
A continuation of Computer Science 151, bringing in some concepts more closely tied to the architecture of computers, compilers, and operating systems, such as macro processing, compilation and linking, pointers and memory management,
data representation, and software development tools. Additional topics include assertions and invariants, data abstraction, linked data structures, an introduction to the use of the GNU/Linux operating system, and programming in a low-level, imperative language.
Includes formal laboratory work. Prerequisites: Computer Science 151; not open to students who have already taken Computer Science 201. STAFF.
205 Computational Linguistics* (Fall) 4 credits+
An examination of computational techniques for producing and processing text in natural languages and an introduction to the theoretical basis for those techniques, both in linguistics and in computer science. Topics include generative
grammars, parsing, algorithms for automatic indexing, information retrieval, and natural-language interfaces. Prerequisite: Introduction to General Linguistics 114 and Computer Science 151 or 153. J. STONE.
207 Algorithms and Object-Oriented Design (Spring) 4 credits
An introduction to the ideas and practices of computation: message passing, information hiding, classes and interfaces, inheritance, polymorphism, and reflection. The course also includes data structures and the associated algorithms,
packages and libraries, exceptions, and the use of an integrated software-development environment. Includes formal laboratory work. Prerequisites: Computer Science 161; not open to students who have already taken Computer Science 152.
211 Computer Organization and Architecture* (Fall) 4 credits+
Study of both traditional and alternative computer architectures. Introduction to digital logic, microcode, Von Neumann architectures, data representations, fetch/execute model, RISC/CISC, instruction formats and addressing, machine and
assembly language, memory architecture and algorithms, I/O architecture, and elements of distributed systems. Includes formal laboratory work. Prerequisite: Computer Science 161. COAHRAN, WALKER.
213 Operating Systems and Parallel Algorithms* (Fall) 4 credits+
Study of the principal components of typical operating systems and an introduction to parallel algorithms. Topics from operating systems: storage management, scheduling, concurrent processing, synchronization, data protection, and security.
Discussion of models of parallelism and algorithms for problems in such areas as lists, trees, searching, sorting, graphs, geometry, and strings. Includes formal laboratory work. Prerequisite: Computer Science 161. DAVIS, WEINMAN.
232 Human-Computer Interaction* (Spring) 4 credits+
Study of methods and principles for user-centered design through laboratory exercises and a significant team design and evaluation project. Consideration of human capabilities, emerging technologies, social impacts, and alternative views
of the design process. Prerequisites: Computer Science 161. DAVIS.
261 Artificial Intelligence* (Fall) 4 credits+
An introduction to current principles, approaches, and applications of artificial intelligence, with an emphasis on problem-solving methods, knowledge representation, reasoning with uncertainty, and heuristic search. Study of a range
of AI approaches, such as rule-based systems, neural networks, and systems for machine learning. Review of several applications areas such as game playing, natural language processing, robotics, theorem proving, and perception. Prerequisite: Computer Science
161. WEINMAN.
301 Analysis of Algorithms (Fall) 4 credits+
Study of structures used to organize data and of the algorithms used to manipulate these structures. Assignments to implement data structures and to use them in computer science and other applications programs. Emphasis on mathematical
principles behind the data structures. Prerequisite: Computer Science 207 and Mathematics 218. STAFF.
302 Programming Language Concepts* (Spring) 4 credits+
Description and analysis of key issues in the design, syntax, semantics, and implementation of programming languages, with examples from several high-level languages, illustrating important paradigms (functional, object-oriented, imperative,
declarative). Additional topics may include denotational semantics, type-inference algorithms, program verification, and the lambda calculus. Prerequisite: Computer Science 207. J. STONE.
323 Software Design* (Spring) 4 credits+
Study of software life cycle and its consequences. Consideration of various algorithms with an emphasis on strategies that can be applied. Emphasis on design, coding, testing, and documenting of large software packages through work on
a large project. Prerequisite: Computer Science 207. Not open to students who have already taken Computer Science 223. STAFF.
325 Databases and Web Application Design * (Fall) 4 credits+
Study of database theory and design along with software development methodology. Emphasis on design principles and methods, project management, and the use of appropriate tools. A large project provides motivation and practical experience.
Prerequisites: Computer Science 207. DAVIS, WALKER.
341 Automata, Formal Languages, and Computational Complexity (Spring) 4 credits+
A formal study of computational devices, their related languages, and the possibility and difficulty of computations. Examples are pushdown automata and Turing machines, context-free languages and recursively enumerable sets, and the
halting problem and NP-completeness. Prerequisite: Computer Science 361 and Mathematics 218. J. STONE, WALKER.
362 Compilers* (Spring) 4 credits+
Study of traditional and modern techniques for implementation of high-level languages, through either interpretation or translation to low-level languages. Topics include formalisms for describing syntax and semantics of languages, theory
of parsing, regular expressions, intermediate languages, and optimization. Students construct interpreters or compilers for high-level languages. Includes formal laboratory work. Prerequisite: Computer Science 161. REBELSKY, J. STONE.
364 Computer Networks* (Spring) 4 credits+
This course focuses on the communications protocols used in computer networks - their functionality, specification, verification, implementation, and performance. The course also considers the use of network architectures and protocol
hierarchies to provide more complex services. Existing protocols and architectures are used as the basis of discussion and study. Includes formal laboratory work. Prerequisite: CSC 211 or 213. DAVIS.
|
 |