Given the importance of computational thinking in everyday life, the department encourages students from all majors to take courses in computer science. Each of the course offerings are open to all students provided the stated prerequisites are satisfied.
NOT FREQUENTLY OFFERED An overview of the structure and operation of the global Internet. Basic mechanisms: addressing, routing, caching, and the domain name system (DNS). Physical media: Ethernet, WiFi, and cell networks. Popular protocols: e-mail, web, chat, file transfer, and shells. Troubleshooting: ping, traceroute, and dig.
History of computer science and its relationship to other fields. The benefits of computational thinking in daily life. Numerous examples connecting computing and computing technology to human activities, such as sporting events, elections, politics, and health care. Coursework includes small-scale programming.
A puzzle-based introduction to some of the key ideas that have emerged from the study and practice of computation. Superset of topics: Alternate Dice and Map Coloring (brute-force search); Decanter Puzzles and Sun-Tzu's Puzzle (finite state machines); Clock Puzzle (discrete simulation); Birthday Paradox (randomized estimation); Making Change, Hidden-Word Puzzles, and Thief's Dilemma (dynamic programming); Egg Puzzle (sieves); How to Count on your Fingers (binary numbers); Multiplication without Tables (Computer Arithmetic); Towers of Hanoi (recursion); Eight Queens (backtracking); Anagrams (tries); Prisoners and Switches (semaphores); Love in Kleptopia (public-key cryptography); What’s the Best Move? (alpha-beta search); BattleBots (Mindstorms NXT programming); How to Detect a Cyborg (Turing test); Sudoku (proof by contradiction); The Game of Tag (undecidability); Traveling Salesman Puzzles (intractability); Dividing the Ham (fair division).
NOT FREQUENTLY OFFERED The application-level use of database management systems. Introductions to database design, the relational database model, document-oriented databases and other NoSQL systems, and query langauges. Manual and programmatic interfaces to databases.
NOT FREQUENTLY OFFERED A study of natural systems exhibiting computational processes, with examples from biology, finance, and astronomy. The fractal geometry of nature. Introduction to chaos and dynamic systems. Non-traditional computing devices, including DNA computers and Quantum computers.
A study of virtual worlds. Topics include both the intra- and interpersonal behaviors of avatars, and the technical basis for constructing and scripting these worlds.
Survey of the basic principles and methods of both classical and modern cryptology, and the historical context in which these systems have arisen. Secret key and public key encryption and decryption. Random number generation. Hashes. Digital Signatures. Cryptanalysis.
NOT FREQUENTLY OFFERED An overview of the syntactic and semantic models of natural languages and heuristics for language understanding and translation. Roles of syntax, semantics and pragmatics in human language processing by computers. Natural language generators and parsers, inference, conceptual analysis, and discourse processing. Special attention is paid to ambiguity, irony, metaphor, and idiomatic usage. Students will critique translation systems created since the 1940s. The role of statistical NLP will be explored in detail.
Creation and development of interdisciplinary new media projects integrating ideas from interactive narratives, drama management, artificial intelligence, storytelling, and graphics. Coordination among student teams from various backgrounds performing such tasks as usability analysis, detailed design, script writing, video and audio production, graphic art production, authoring, program engine development, media integration, packaging, marketing, and distribution.
The study of algorithm paradigms, such as divide-and-conquer, greedy methods, dynamic programming, and randomization, with an emphasis on combinatorial search. Modern heuristics, such as genetic programs and simulated annealing. String problems, including matching and longest common subsequence. Advanced sorts and order statistics. Algorithms for cake-cutting and fair division. Generating combinatorial objects (permutations, combinations, subsets, partitions). Graph algorithms. Computational geometry. Recurrences and the Master Theorem.
An introduction to the basic organization of computer systems. Digital representation of textual and numeric information. Machine instructions and instruction formats, assemblers and assembly languages, linking and loading, process execution, interrupt and device-handling, and file management. System-level programming in C and assembly language.
Issues and concepts of ethical responsibility in software design and production. Risk analysis. Cyberwarfare. Analysis of software failures.
Sophomore-level course arranged by agreement between the student and a supervising faculty member. See the university bulletin for requirements regarding independent studies courses.
NOT FREQUENTLY OFFERED The study of the logical and physical organization of data stores for efficient update and retrieval. Search engines and data warehouses. Key-value stores, column, document, and graph databases. Data modeling. String similarity and synonyms. Semantic retrieval. Dealing with unstructured content. Stop words, stemming, and lemmatization. Search engine optimization (SEO) and monetization.
A detailed study of the design and use of network and internet technologies in modern digital communication systems. Topics include physical networking components, packets and virtual circuits, routing and control protocols, signaling, multicasting, OSI 7-layer model sockets, IPv4, IPv6, UDP, TCP, ARP, ICMP, IGMP, Mobile IP, DNS, SMTP, FTP, VoIP, and HTTP.
The representation, storage, and transformation of biological data. Topics include the central dogma of molecular biology, the genetic code, the Human Genome Project, sequence databases, formats and conversion, searching and regular expressions, XML and relational databases in biology. Students build and potentially release an open source gene database for a new species at the end of the course.
NOT FREQUENTLY OFFERED The mathematical theory of language and its applications. Computer analysis of morphology, syntax, semantics (including logical representations and anaphora resolution), and discourse. Computer generation of text and speech. The course covers both classical and modern (probabilistic) approaches to analysis.
Introduction to interactive computer graphics. Topics include the design and use of three-dimensional graphics engines and APIs, animation, physics and computer games, modeling, computational geometry, shading, ray tracing, and fractal geometry.
Introduction to the classical theory of computation, including finite automata, Turing machines, and stack machines; formal grammars; intractability, and undecidability.
Concepts in the design of operating systems, including processes, process management, mutual exclusion, synchronization and message-passing, primary memory management, multiprogramming, paged allocation and paging policies, resource and I/O management, file systems, and security. Major emphasis is placed on Unix and Windows-based architectures and C-language system programming.
Credit awarded for (1) preparing supporting documentation for actual internships taken, or (2) participating in an individual or group directed research project resulting in a project or paper that is presented at a conference or university-sanctioned event.
The design, construction, and management of an online information system. Experience will be gained producing an in-use system with emphasis on stability and usability for the target audience.
Junior-level course arranged by agreement between the student and a supervising faculty member. See the university bulletin for requirements regarding independent studies courses.
Principles of the construction of large-scale distributed software systems, including languages and tools to facilitate and manage such products, and the human factors in their production. Students conceive, model, implement, deploy, document, and present a large project built using an agile development methodology. Clean code and architecture videos, guest speakers, and code jams enhance the course experience. The project is built in a public source code repository and students present to a large audience of faculty, administrators, alumni, friends, and family at the end of the course.
Authorship and presentation of a paper, backed by the conception, design, and construction of a software project demonstrating mastery of the computer science curriculum.
NO LONGER OFFERED Multimedia program development, including project concept, audience analysis, needs analysis, creative and visual treatments, interface design, media formats, authoring languages, and multimedia project management. A project requires that students design a multimedia program leading to a proof-of-concept prototype.
NO LONGER OFFERED Production of medium to large-scale multimedia programs including usability analysis, detailed design, script writing, media production, audio production, graphics production, authoring, program engine development, media integration, packaging, marketing, and duplication. A project requires that students produce a multimedia program leading to a web site or DVD distribution.
NOT FREQUENTLY OFFERED Introduction to the study of computational complexity, including efficient algorithms for matrix multiplication and fast Fourier transforms, the classes P and NP, approximation algorithms, randomized algorithms and RP, parallel algorithms and NC.
NOT FREQUENTLY OFFERED Theory and practice of the construction of software agents capable of proving theorems as well as discovering new ones. Case studies include Isabelle, ACL2, HOL, and Coq.
Introduction to the fundamental concepts behind the implementation of human-level intelligence in computer systems. Topics include agent architectures, problem-solving methods, heuristic search, game playing, knowledge representation, symbolic reasoning, computational models of virtual humans, and machine learning.
Theory and design of database systems, with emphasis on relational and document models. Topics include database system structure, semantic data modeling, relational databases and their object-oriented extensions, object relational modeling (ORM), document-store and key-value databases, formal query languages, integrity and security, physical database design, indexing and hashing, query processing, and optimization. Transaction processing, concurrency, and crash recovery are introduced.
Introduction to the theory and design of translators and interpreters for high-level computer programming languages. Topics include programming language specification, scanner construction, parser construction, intermediate representations, virtual machines, code generation, and optimization. Comparisons between computer and natural language translations are also covered.
Readings and discussion of classic papers, essays, and monographs.
Senior-level course arranged by agreement between the student and a supervising faculty member. See the university bulletin for requirements regarding independent studies courses.
Project-based seminar in which students will be required to select, research, document, and discuss some aspect of a broad area of current interest to computer scientists and electrical engineers (e.g., computer networks, digital communication).
Design and development issues of large-scale software systems which are reliable and easily maintainable. A course project covers each step of the development process from the initial needs analysis and requirements specification through design and implementation. Topics include tradeoffs between agile and traditional approaches, the impact of legacy systems, architectural representation issues, testing, project risk management, and emerging trends in software engineering such as model-driven engineering and aspect-oriented software development.
Study of model-driven engineering and its ability to alleviate platform complexity and effectively express domain concepts. Topics include techniques for designing, implementing, and maintaining robust software systems; the Unified Modeling Language (UML) and entity relationship modeling; automation of change evolution in models; and definition of standards that enable tools and models to work together.
Interaction design and human-computer interaction, with equal emphasis on learning how to design and evaluate interaction architectures and learning how to survey and analyze current literature to implement such architectures. Topics include interaction guidelines, principles, and theories; usability engineering; the model-view-controller (MVC) paradigm; and current research in the field.
Topics in computer graphics, including: architecture of raster display systems, interactive computer graphics, object modeling, transformations, synthetic image generation, animation, image processing, and shaders, with examples from OpenGL.
Study of paradigms and languages for concurrent and distributed computing. Topics include concurrent programming foundations; shared memory, locks, atoms, and software transactional memory; processes and threads, networks, peer-to-peer systems, remote procedure calls and method invocation, text and binary remoting protocols, real-time issues distributed systems, and third party authentication and authorization.
Topics include concepts and design issues in distributed operating systems and Unix implementation.
NOT FREQUENTLY OFFERED A survey of theoretical foundations and computer languages for functional and logic programming, with examples from LISP, Scheme, Haskell, ML, Clojure, F#, SQL, XSLT, Prolog, and Scala.
A survey of a number of scripting languages, with a focus on the differences between scripting languages and traditional programming languages. Topics include static versus dynamic language features, client and server-side scripting for the web, job control, plugins, shell scripting, and rapid development.
Introduction to the fundamental concepts behind the implementation of human-level intelligence in computer systems. Topics include agent architectures, problem-solving methods, heuristic search, game playing, knowledge representation, frames, inheritance and common-sense reasoning, neural networks, genetic algorithms, conceptual clustering and current research in the field.
Detailed study of design and implementation of knowledge-based systems. Topics include: logic and theorem proving; deduction systems; reaction systems; forward and backward chaining; knowledge acquisition; and explanatory interfaces.
Role of syntax, semantics and pragmatics in human language processing by computers. Topics include: natural language generators and parsers; inference, conceptual analysis; and discourse processing.
Fundamental concepts in the field of database technology. Topics include a review of database system structure, semantic data modeling, relational, document, key-value, object-oriented, and graph databases, formal query languages, integrity, normalization, security, physical database design, indexing and hashing, query processing and optimization, transaction processing, concurrency, crash recovery, and current research in the field.
Topics from: Computational complexity; theory of formal languages; program schemes, recursion schemes; discrete developmental systems. (May be repeated for credit.)
Study of object-oriented philosophy and its applications in software architecture and programming languages. Topics include: object-oriented design, abstraction, inheritance, polymorphism, component models and design patterns.
Concepts in and design of large-scale distributed networks and local area networks, including topologies, standards and protocols.
Experimental, trial, or one-off course offerings will be given the 698 designation.
Special study areas defined by a student in cooperation with a faculty member and approved by the Department Chairperson. A maximum of two such courses may be applied towards the Master’s degree. A student wishing to enroll during a given term must submit a proposal to the concerned faculty member at least one month prior to the beginning of that term.