Our students must complete seven contracts, three Independent Study Projects and a senior thesis project to graduate. Contracts consist of three to five academic activities — courses, tutorials, internships, independent reading projects, etc. — that will develop your personal educational goals during a semester.
Here’s a list of recent course offerings in Computational Science:
Great Ideas in Computer Science
This is a first course about computers, what they are, how they work, what they can and cannot do. The central idea is the algorithm - a procedure or recipe that can be given to a person or machine for doing a job. Other great ideas revolve around this central one: how to code algorithms into machine readable form (assembly language): how to translate from high level to low level languages; theoretical limits on the power of algorithms; and the possibility of programming human-like intelligence into machines (AI). This course is primarily about ideas. Programming experience will be useful, but is not required; the class will survey programming languages but is NOT a first course in programming; rather it is an overview of the whole field of Computer Science. Prerequisites: None.
Introduction to Artificial Intelligence
This course gives an overview of existing approaches to Artificial Intelligence (AI). We will discuss the major paradigms of AI (classical and symbolic algorithms, expert systems, neural nets, genetic algorithms). We will also look at the philosophical and ethical issues around AI, how AI shows up in the collective imagination (movies, literature, art), what the state of the art is in AI applied to arts, medicine, language translation etc., and speculate some about the future and potential of AI. There is no programming associated with this course. Prerequisites: None.
Introduction to Programming
This is an interdisciplinary introduction to programming in Java. The course introduces students to the most important programming concepts such as algorithms, sequences, selections, loops, functions, methods, passing by reference vs. by value, numeric and string types, arrays, vectors, classes and Object-Oriented programming. Towards the end of the course we will briefly introduce scientific programming package Matlab. This course serves as an informal prerequisite for many science classes which require programming. Prerequisites: None
Intro to Scientific Programming
This course is an interdisciplinary introduction to Algorithms and Programming for science students. It is a part of LAC curriculum. It emphasizes algorithms and programming tools relevant to such students. We start with Matlab - the programming package for the scientific problems and later move to compiled language C++. The course introduces students to the most important programming concepts such as algorithms, sequences, selections, loops, functions, procedures, passing by reference vs. by value, numeric and string types, arrays, vectors, pointers, structures, structure arrays, and classes. The beginning Matlab part of the course, in addition, introduces a number of Matlab-specific commands to solve linear systems, differential equations, find polynomial roots etc… This course serves as an informal prerequisite for many science classes which require programming. Prerequisites: Permission of Instructor
The evolving field of Natural Computing has three main branches:
1. Computational paradigms inspired by nature (Evolutionary Computing, Neuro Computing, Swarm Intelligence, and Immuno Computing),
2. The simulation of nature in computers (Artificial life, Factals), and
3. The use of natural materials in computing (DNA Computing, Quantum computing).
We will review the biological (and math/physics) background, and discuss in detail various schemes that have been proposed to create viable algorithms based on the inspiration from biology. This course is an introductory survey course. Prerequisites: Students should have a basic understanding of how algorithms can be implemented on a computer using a Programming language, but in-depth knowledge of a programming language is not required, and there will be no programming Assignments in this course. No enrollment limits.
Theory of Computation: Regular languages, context free languages and Turing machines
In this course we study the theory of computation, in three roughly equal parts:
Part 1: finite state automata and regular languages (used, e.g., in lexical analysis, or for the specification of string patterns).
Part 2: context-free languages (e.g. most programming languages), and their specification by means of formal grammars. Also an equivalent description by means of pushdown automata (finite state machines with an infinite memory stack), and the application of this theory to parsing.
Part 3: Turing machines (i.e. a very general mathematical model for any kind of computer) and the functions they can compute, as well as the equivalent notions of recursive functions and functions computable by way of a computer program. This lays the foundation for discussing the limits of computation, i.e. what problems can/cannot be solved by a computer, and what problems are solvable in principle, but too costly in terms of time or space requirements to be practically feasible. There are no technical mathematical requirements for the course other than the ability to use symbolic systems, logic, and to think slowly and carefully. Prior completion of a course in Discrete Math (or equivalent) is desirable (as we will discuss some proofs for the essentially mathematical contents of the course and students will be required to find valid arguments for the correctness of their homework solutions). Programming experience is also desirable, but not absolutely necessary, as the homework will not include programming problems. The course should be of interest to computer scientists, mathematicians, logicians, linguists etc. We will stress the ideas, and their application to problems in computer science; students will work in the computer lab with “JFLAP” (Java Formal Language and Automata Package), an interactive visualization and teaching tool for formal languages.
This course might also be called Advanced Programming in C++. We discuss pointers and how to implement basic structures such as stacks, queues, lists, and trees. We also discuss recursion as a programming tool, and the efficiency of various sorting and searching algorithms. Principles of good programming style (including decomposition, stepwise refinement and data encapsulation) are emphasized. C++ is the principal programming language used. The final project will be a game playing program. Prerequisite: C++ or consent of instructor. Some programming experience in C, Pascal, Fortran, etc. should be sufficient; C++ will be reviewed.
Tutorials in Computational Science
The faculty offer regular tutorials on a number of topics including programming languages, topics in evolutionary computing, AI, neural networks, data structures and applied scientific computing. Prerequisites: Permission of instructor.
For detailed requirements, check out our General Catalog.
For a complete list of courses, click here.