Computer Science
Chair: Michael B. Gousie
Department home page: http://www.wheatoncollege.edu/Acad/ComputerScience/
It is an exciting time to study computing. From science to the humanities, computing is at the center of interdisciplinary scholarship and research. Computer science at Wheaton falls into three categories: (1) a major, (2) a minor or (3) an interdisciplinary major (see Mathematics and Computer Science). A complete look at our computer science faculty, students and program can be found at: http://www.wheatoncollege.edu/Acad/ComputerScience.
Studies in computer science provide students with the necessary background and skills to design and write software for tomorrow's computing tools. The major prepares students for graduate programs in computer science and/or careers in the computing industry. The minor addresses the changing needs of a liberally educated person in a technological society.
Facilities
Wheaton provides an impressive array of computational work environments for students in computer science courses. In addition to fully networked dorm rooms, wireless access, campus classrooms and labs, a dedicated computer science lab features 20 dual-boot Windows/Linux servers. A networked classroom provides experience in Mac OS X. Working in a blend of these different operating systems and providing a broad range of experience, students use a number of development environments as they gain experience in an array of different programming languages, including C/C++, Java, Python, Perl and LISP.
Connections
The department embraces Wheaton's commitment to connections, especially in linking computing to the liberal arts. New entry-level offerings include Computing and Texts, connecting Computing for Poets with the English department's Anglo-Saxon Literature or J.R.R. Tolkien. Another new connection is Graphic Design and Web Programming, connecting Graphic Design I in the Art department with Web Programming, Graphics and Design. These courses join Computer Architecture, Genes in Context, Logic and Programming and Visualizing Information in computer science's growing list of connections.
Major
Print a major planning worksheet
The major in computer science consists of a minimum of 12 courses: seven core computer science courses, plus two mathematics courses, a senior seminar and two electives at or above the 200 level. For those students who place out of the introductory course(s), the additional course(s) needed to meet the minimum requirement will be determined in consultation with the department. Courses used to fulfill the major requirements may not be taken on a pass/fail basis. To major in computer science, the department strongly recommends that students achieve at least a C+ average in the first two computer science courses and that the first two math courses be completed by the second year.
Required courses
Comp 111 Foundations of Computing Theory
Comp 115 Robots, Games and Problem Solving
Comp 116 Data Structures
(strongly recommend at least a combined 2.67 GPA in these courses to continue)
Four computer science core courses:
Comp 215 Algorithms
Comp 220 Computer Organization and Assembly Language
Select two of the following:
Comp 335 Principles of Programming Languages
Comp 345 Operating Systems
Comp 375 Theory of Computation
Two math courses
Math 211 Discrete Mathematics
And at least one more from:
Math 202 Cryptography
Math 216 Computational Molecular Biology
Math 221 Linear Algebra
Math 101 Calculus I
or Math 102 Calculus I with Economic Applications
Electives
Two additional computer science (or mathematics with permission) at or above the 200-level:
Comp 242 DNA
Comp 255 Artificial Intelligence
Comp 325 Database Systems
Comp 365 Computer Graphics
Comp 399 Independent Study
Comp 499 Independent Research
Capstone
Comp 401 Senior Seminar
Minor
Print a minor planning worksheet
The minor in computer science requires completion of five (5) courses:
Required courses
Comp 115 Robots, Games and Problem Solving
Comp 116 Data Structures
Two other computer science courses, at least one at the 200-level or above.
One 300-level computer science course or with permission, a 300-level non-computer science course that contains significant work in computer science.
Courses
106. Basics of Computing
Computers may be one of the most ubiquitous tools in today's technology-saturated life, but the task-oriented view many users have may be a limited one. Although the computer is an excellent vehicle for word processing or online communication with friends and family, its strength lies in the ways it can be applied as a universal tool toward a broad range of real-world problems. This course explores the true nature of computers from the inside out, beginning with the physical nature of the machine within the box and journeying through the layers of how it functions and the underlying mathematical concepts. Along the way, computer programming becomes both accessible and fun through "Alice," an animation-rich 3D environment in which the programmer designs worlds and instructs virtual actors to animate scenes, perform tasks and play games using a precise vocabulary that reflects real programming techniques.
111. Foundations of Computing Theory
Discrete mathematics represents the core mathematical and problem-solving principles in computer science education. It is not possible to make creative and effective use of computers without involving oneself in mathematical considerations. This course introduces many of the mathematical concepts that appear later in the computer science major. Everyday scenarios are related to discrete topics including algorithms, networks and data communication, parity and error, finite state machines, regular expressions, matrices, propositional logic, Boolean algebra, sets and relations in databases, graphs and trees. Students use these techniques to solve real-world problems, such as forming SQL queries, designing shortest-path communications between cell towers and pattern matching across entire genomes and volumes of English text.
(Tom Armstrong, Mark D. LeBlanc)
115. Robots, Games and Problem Solving
Problem-solving techniques and algorithm development with emphasis on program design, introductory numerical methods and object-oriented programming from the client perspective. This course is intended for those seeking a thorough and rigorous exposure to programming; an ideal course for those considering graduate school in any field. Topics covered include programming language syntax (e.g., C++, Python), coding, debugging, testing and good documentation style. Concepts include arithmetic and logical operations; simple input and output; functions and the introductory data structures of arrays, records and classes. Three hours of lecture and a two-hour laboratory per week. (Previously Programming Fundamentals)
(Tom Armstrong)
Connections:
Conx 20016 Logic and Programming
116. Data Structures
An introduction to the theoretical and practical aspects of data structures. Emphasis is on abstract data types and the use of the C++ class mechanism to support their implementations. Examples include stacks, queues, linked lists, binary search trees and general trees and their applications. Pointers and recursion are used in some implementations. Three hours of lecture and a two-hour laboratory per week.
(Michael B. Gousie, Mark D. LeBlanc)
131. Computing for Poets
The use of computers to manage the storage and retrieval of written texts creates new opportunities for scholars of ancient and other written works. Recent advances in computer software, hypertext and database methodologies have made it possible to ask novel questions about a story, a trilogy, an anthology or corpus. This course teaches computer programming as a vehicle to explore the formal symbol systems currently used to define our digital libraries of text. Programming facilitates top-down thinking and practice with real-world problem-solving skills such as problem decomposition and writing algorithms.
(Mark D. LeBlanc)
Connections:
Conx 20056 Computing and Texts
161. Web Programming, Graphics and Design
As Web pages proliferate on the Internet, it is becoming increasingly important to understand today's technology. This course covers basic Web page design and creation using current software tools. Web pages are brought to life by adding custom graphics. Students create their own animated mini-movies using Flash. The course covers basic programming, using Flash ActionScript or similar, to allow students to create more sophisticated pages that include user interaction and real-world applications. Students practice many concepts while in the classroom, and design and program their own Web pages as a major component of the course.
(Michael B. Gousie)
Connections:
Conx 20042 Graphic Design and Web Programming
198. Experimental Courses
Intelligent Systems
"I propose to consider the question, 'Can machines think?'"-- the thought experiment Alan Turing posed nearly sixty years ago--remains still unanswered. In the present day, our conception of Turing's machine, a "robot," is no longer a term unique to science fiction. This course provides the scientific and technical background to begin considering Turing's question. First, we explore the fundamentals of vehicle locomotion through constructing robots and programming simple behaviors.
Next, we answer the following questions: Computer Vision--How do photo applications find faces in pictures? Audio/Speech Processing--How can your computer read a book to you? Language Processing--How can Google translate a French-language newspaper into Arabic automatically? Sensors and Effectors--How can a robot perceive the world and interact with it? Then, can robots ever be sentient, conscious and self-aware? Finally, we explore ethical issues raised by artificial intelligence and artificial life.
215. Algorithms
An introduction to the mathematical foundations, design, implementation and computational analysis of fundamental algorithms. Problems include heuristic searching, sorting, several graph theory problems, tree balancing algorithms, and the theoretical expression of their orders of growth. Out-of-class assignments and in-class labs emphasize the balance between theoretical hypotheses and experimental verification. C/C++, Java, Perl or Maple are applied to various solutions.
(Michael B. Gousie, Mark D. LeBlanc)
Connections:
Conx 20015 Genes in Context
220. Computer Organization and Assembly Language
A detailed look at the internal organization and logic of computers.
The programming portion of the course considers a common assembly language and how such instructions are translated to the binary instructions of a traditional 32-bit machine language. Addressing modes and stack behavior related to subroutine calls are discussed in detail.
The computer organization portion of the course discusses gates, storage circuits, the arithmetic and logic unit, fetch/execute cycles and data paths. Microcoding is discussed in detail. The question of performance, in relation to a computer's architecture and the choices made by programmers, is a major theme throughout the course.
(Michael B. Gousie)
Connections:
Conx 20022 Computer Architecture
242. DNA
An amazing blend of biology, chemistry, computing and mathematics emerges when considering the molecule "deoxyribonucleic acid" (DNA). DNA is the blueprint of life for all organisms on Earth and throughout evolutionary time. This course explores DNA from the following four points of view: molecular biology, applied mathematics, evolutionary biology and computer science. Students will analyze DNA sequences by learning to write computer programs (software) in the language Perl. Learning to write programs is a pure, distilled form of problem solving, a vital skill for many careers and graduate studies. Historical and ethical aspects of DNA are discussed. Counts as a related course in the biology major and as a 200-level elective in the computer science major.
(Betsey Dexter Dyer, Mark D. LeBlanc)
Connections:
Conx 20015 Genes in Context
255. Artificial Intelligence
The idea of a thinking machine captivates us as a culture and our long struggle toward an approximation of that goal has pushed us to examine what underlies our own thought processes and how we may create problem-solving models based on different definitions of what constitutes "intelligence." This course examines the fundamentals of artificial intelligence, including searching for problem solutions, game playing, logical reasoning, task planning and robotics. We also explore the advanced topics of natural language communication between man and machine and the challenge of designing a machine that learns from experience. (Previously Comp 355)
(Mark D. LeBlanc)
298. Experimental Courses
Intelligent Systems
"I propose to consider the question, 'Can machines think?'"-- the thought experiment Alan Turing posed nearly sixty years ago--remains still unanswered. In the present day, our conception of Turing's machine, a "robot," is no longer a term unique to science fiction. This course provides the scientific and technical background to begin considering Turing's question. First, we explore the fundamentals of vehicle locomotion through constructing robots and programming simple behaviors.
Next, we answer the following questions: Computer Vision--How do photo applications find faces in pictures? Audio/Speech Processing--How can your computer read a book to you? Language Processing--How can Google translate a French-language newspaper into Arabic automatically? Sensors and Effectors--How can a robot perceive the world and interact with it? Then, can robots ever be sentient, conscious and self-aware? Finally, we explore ethical issues raised by artificial intelligence and artificial life.
325. Database Systems
In an age of information, it is crucial to understand how to design systems to manage and organize potentially large collections of data. This course involves an in-depth study of the issues involved in today's database management systems (DBMS). Topics include the theories behind database architecture, database design (including the relational model) and DBMS implementation, as well as the collection, organization and retrieval of data through query languages such as SQL.
(Tom Armstrong)
335. Principles of Programming Languages
A theoretical study of the principles that govern the design and implementation of contemporary programming languages. This includes language syntax (lexical properties, BNF notation and parsing); language representations (data structures, control structures and runtime environments); and practical experience with language styles (procedural, functional, logical and object-oriented). Particular focus is on object-oriented languages. Labs, homework and programming assignments include selections from languages that are object-oriented (Java, C++, C#), functional (LISP), declarative (PROLOG) and used for data-interface (PERL), building system tools (C) and object-based applications (Visual Basic).
(Mark D. LeBlanc)
345. Operating Systems
Operating systems are the software core of computers. This most fundamental of all system programs controls all of the computer's resources and provides the base upon which all application programs are written. The course introduces the theoretical structure of current computer operating systems, including batch, multiprogramming and multiprocessor systems. Specific strategies for input-output, interrupt handling, file management and concurrency are discussed. Practical experience is gained by writing module simulations, implementing concurrency by using threads, and altering actual operating system software.
(Michael B. Gousie)
365. Computer Graphics
A look at many of the mathematical tools, data structures, algorithms and hardware associated with the creation of imagery on the computer. The course covers aspects such as animation, 3D geometric transformations, projections, shading, texture mapping, viewing and visible surface determination. Modeling techniques, including fractals, surfaces of rotation and L-systems, are discussed. Advanced topics such as ray tracing, radiosity, shadows and other effects are covered as time permits. Major programming projects put theory into practice, using OpenGL or other computer graphics application programmer interfaces.
(Michael B. Gousie)
Connections:
Conx 23012 Visualizing Information
375. Theory of Computation
Many complex problems can be solved using a finite state machine approach. This course is a look at various kinds of such theoretical machines and how understanding them can lead to practical solutions to programming problems. Topics include regular languages, context-free languages, finite automata, pushdown automata, nondeterminism and Turing machines. The halting problem and the problem of computability versus undecidability are investigated. The topics are shown to have applications to compiler design; portions of a compiler are implemented in a major project.
(Tom Armstrong, Michael B. Gousie)
398. Experimental Courses
Parallel Computing
This course provides a comprehensive introduction to the design of parallel algorithms and the organization of parallel computing systems. First, we explore the fundamentals of software design in multicore and multiprocessor environments. Next, we investigate the challenges and benefits of building and using cluster and grid computing systems. Then, we evaluate the performance of our own local distributed systems against a commercially available cloud computing system (Amazon's EC2, Microsoft's Windows Azure). Finally, we discuss the broader social and environmental impacts of data centers and other high-performance computing systems.
399. Independent Study
An individual or small-group study in computer science under the direction of an approved advisor. An individual or small group works on the conception, design and implementation of a significant computer science project. Interdisciplinary projects are strongly encouraged. Students are also expected to assume a greater responsibility in the form of leading discussions and working examples.
401. Senior Seminar
A seminar featuring historical and/or contemporary topics in computer science. Roundtable discussions, student-led presentations, writing, and a major group programming project are featured.
499. Independent Research
An individual research project in computer science under the direction of an approved advisor. Typically, this involves a review of the primary literature that leads to the design and implementation of a computational experiment or the development of a large software system.
500. Individual Research
Research under the direction of individual computer science faculty for two semester course credits. A thesis is required of each student enrolled in this course.