112: An introduction to computer programming that provides the tools necessary for students to use computers effectively in scientific work, including in the natural and physical sciences, biological sciences, medicine, mathematics, psychology and economics. Students learn to write software to solve problems, visualize and analyze data, perform computer simulations, and implement and test computational models that arise in a wide range of scientific disciplines. The course introduces MATLAB, an extensive and widely used technical computing environment with advanced graphics, visualization and analysis tools, and a rich high-level programming language.
115: In this intensive course, students are introduced to engineering principles as they design and assemble robots out of LEGO parts, sensors, motors, and tiny computers. Fundamental robotics skills are learned in the context of studying and modifying a simple robot known as SciBorg. Then, working in small teams, students design and build their own robots for display at a Robot Exhibition. These projects tie together aspects of a surprisingly wide range of disciplines, including cs, physics, math, biology, psychology, engineering, and art.
111: An introduction to problem solving through computer programming. Using the Java programming language, students learn how to read, modify, design, debug, and test algorithms that solve problems. Programming concepts include control structures,
data structures, abstraction, recursion, modularity, and object-oriented design.
Students explore these concepts in the context of interactive programs involving graphics
and user interfaces.
231: An introduction to the design and analysis of fundamental algorithms. General techniques covered: divide-and-conquer algorithms, dynamic programming, greediness, probabilistic algorithms. Topics include: sorting, searching, graph algorithms, compression, cryptography, computational geometry, and NP-completeness.
235: An introduction to the concepts of languages and automata. Topics include languages, regular expressions, finite automata, grammars, pushdown automata, and Turing machines. The first half of the semester covers the Chomsky hierarchy of languages and their associated computational models. The second half of the semester focuses on decidability issues and unsolvable problems. The course closes with a brief introduction to complexity theory. The course includes a programming component investigating the application of automata theory to the scanning and parsing of programming languages.
242: A systems-oriented approach to data networks, including a theoretical discussion of common networking problems and an examination of modern networks and protocols. Topics include point-to-point links, packet switching, internetworking, end-to-end protocols, congestion control, and security. Projects may include client-server applications and network measurement tools.
303: A multidisciplinary course exploring the origins, present and future applications, and challenges of the intersection of biological and computer sciences. The field of bioinformatics generated in response to the era of genomics, encompasses all aspects of biological data acquisition, storage, processing, analysis and interpretation with a view to generating in silico models of cellular function.
349: Topic for 2008-09: Web Search and Mining. Locating information on the web seems very easy, while determining the quality of information can be tricky. This course is for students who want to know why search engines can answer your queries fast and (mostly) accurately, why other times they seem to be missing the point and provide untrustworthy information, and how one can design a website that acquires high visibility on the web. We will cover traditional information retrieval methods and web search algorithms such as crawlers, with a focus on methods that can detect web spam. We will also cover some basic understanding of text mining and data clustering. We will examine other relevant issues of the information explosion era, such as the shape and structure of the web, epistemology of information.
310: When is a cryptographic system secure and how will we ever know? This course introduces the computational models and theory computer scientists use to address these issues. Topics include one-way functions, trapdoor functions, probabilistic complexity classes, pseudorandom generators, interactive proof systems, zero-knowledge proofs, and the application of these theories to modern cryptology.
332: An introduction to algorithms for deriving symbolic information about the three-dimensional environment from visual images. Aspects of models for computer vision systems will be related to perceptual and physiological observations on biological vision systems. Assignments will use computer vision software written in Java. Topics include: edge detection, stereopsis, motion analysis, shape from shading, color, visual reasoning, and object recognition.
251: An introduction to the dimensions of modern programming languages. Covers major programming paradigms: function-oriented, imperative, object-oriented, and logic-oriented. Dimensions include syntax, naming, state, data, control, concurrency, non-determinism, and types. These dimensions are explored via mini-language interpreters written in OCaml, Scheme, and Haskell that students experiment with and extend.
307: A survey of topics in computer graphics with an emphasis on fundamental techniques. Topics include: graphics hardware, fundamentals of three-dimensional graphics including projection, coordinate transformation, synthetic camera specification, color, shading, hidden surface removal, animation, and texture-mapping. We also cover the mathematical representation and programming specification of lines, planes, curves, and surfaces.
304: A study of the design of file systems and databases, including file organization and access methods, concepts of database management, and database querying using SQL. We will look at the entity-relationship model as a way of structuring data, and we will use relational algebra and relational calculus as a formal system for operating on data. We will investigate how databases are represented, including B+ trees and and hash indexes. We will briefly discuss sorting methods for databases. Finally, we will create dynamic web documents driven by database entries.
342: An introduction to the broad area of computer security. Topics include ethics, privacy, authentication, access control, information flow, operating system security (with a focus on Linux), cryptography, security protocols, intrusion prevention and detection, firewalls, viruses, network security, web security, programming language security. Assignments include hands-on exercises with security exploits and tools in a Linux environment. Participants will independently research, present, and lead discussions on security-related topics.
343: This course explores advanced computer organization and design. The interaction of hardware and software at a variety of levels is studied to provide a framework on how to design a computer. These ideas will also be applied to understand how a computer system works and why it performs as it does. Examples and measurements based on commercial systems are used to create realistic design experiences. Integral to the course is a three-hour weekly laboratory. In the laboratory, students will engage in an intensive, semester-long project in which they design a simple RISC-style microprocessor. The lectures complement the labs. In addition, RISC architectures for current desktop, server and embedded computers will also be surveyed. Students required to attend one three-hour digital laboratory weekly.
232: An introduction to Artificial Intelligence (AI), the design of computer systems that possess and acquire knowledge and can reason with that knowledge. Topics include knowledge representation, problem solving and search, planning, vision, language comprehension and production, learning, common sense reasoning, and expert systems. To attain a realistic and concrete understanding of these problems, CommonLisp, an AI programming language, will be taught and used to implement the algorithms of the course.
230: An introduction to techniques and building blocks for organizing large programs. Topics include: modules, abstract data types, recursion, algorithmic efficiency, and the use and implementation of standard data structures and algorithms such as lists, trees, graphs, stacks, queues, priority queues, tables, sorting, and searching. Students become familiar with these concepts through weekly programming assignments using the Java programming language.
240: An introduction to machine organization and assembly language programming. Topics include an overview of computer organization, introduction to digital logic and microprogramming, the conventional machine level and assembly language programming, and introduction to operating systems.
ARTS 105: An introduction to the fundamentals of drawing with attention to the articulation of line, shape, form, gesture, perspective, and value. ARTS 108: An introductory course which explores photography as a means of visual communication by producing and analyzing photographic images. ARTS 109: This introductory studio course focuses on the issue of composition in two-dimensional imagery. It introduces the fundamental elements of design (e.g. line, shape, value, space, color) and their function in the process of composition.
110: This course explains the basics of how the Internet works and how to build a Web site. Topics include client-server architecture, structuring Web pages with HTML, the representation of colors, images, and sound on the computer, file compression, encryption, cookies, and copyright, intellectual property issues, and critical thinking in the context of the Internet. The required project also models most phases of the standard software lifecycle. Students are introduced to programming by building an interactive Web site using JavaScript.
215: The purpose of this course is to give students a broad foundation in issues related to creating multimedia and hypermedia applications. Topics to be covered include history and philosophy of hypermedia; principles of human-computer interaction; multimedia programming; optimizing for CD-ROMs and the WWW; digital representation and editing of media (audio, graphics, video); media compression and transmission; and delivery of multimedia applications.
MATH225: Combinatorics is the art of counting possibilities: for instance, how many different ways are there to distribute 20 apples to 10 kids? Graph theory is the study of connected networks of objects. Both have important applications to many areas of mathematics and computer science. The course will be taught emphasizing creative problem-solving, as well as methods of proof, such as proof by contradiction and induction. Topics include: selections and arrangements, generating functions, recurrence relations, graph coloring, Hamiltonian and Eulerian circuits, trees.
249: Topic for 2008-09: Human-Computer Interaction. Human-Computer Interaction is one of the areas that have transformed the way we use computers in the last 30 years. Topics include methodology for designing and testing user interfaces, interaction styles (command line, menus, graphical user interfaces, virtual reality, tangible user interfaces), interaction techniques (including use of voice, gesture, eye movements), design guidelines, and user interface software tools. Students will design a user interface, program a prototype, and test the result for usability.
 

CS Course Dependencies Diagram
Mouse over a course to see its description. Click on a course to go to its website.

Created by: Christina Pong'09 & Ewelina Oleszek'10 | Modified by: Rita Purcell x3147 | Date Created: 8/07 | Date Modified: 8/11 | Expires: 8/12