Course Catalog

CSCIGA.1133 Intensive Introduction to Graduate Study in Computer Science I (PAC I)
4 Points. Graduatelevel. Fall.
Prerequisites: None
An accelerated introduction to the fundamental concepts of computer science for students who lack a formal background in the field. Topics include algorithm design and program development; data types; control structures; subprograms and parameter passing; recursion; data structures; searching and sorting; dynamic storage allocation and pointers; abstract data types, such as stacks, queues, lists, and tree structures; generic packages; and an introduction to the principles of objectoriented programming. The primary programming language used in the course will be Java. Students should expect an average of 1216 hours of programming and related course work per week.

CSCIGA.1144 Intensive Introduction to Graduate Study in Computer Science II (PAC II)
4 Points. Graduatelevel. Spring.
Prerequisites: CSCIGA 1133 or departmental permission.
This course builds directly on the foundation developed in PAC I, covering the essentials of computer organization through the study of assembly language programming and C, as well as introducing the students to the analysis of algorithms. Topics include: (1) Assembly language programming for the Intel chip family, emphasizing computer organization, the Intel x86 instruction set, the logic of machine addressing, registers and the system stack. (2) Programming in the C language, a generalpurpose programming language which also has lowlevel features for systems programming. (3) An introduction to algorithms, including searching, sorting, graph algorithms and asymptotic complexity. Examples and assignments reinforce and refine those first seen in PAC I and often connect directly to topics in the core computer science graduate courses, such as Programming Languages, Fundamental Algorithms, and Operating Systems

CSCIGA.1170 Fundamental Algorithms
3 Points. Graduatelevel. Fall, Spring, Summer.
Prerequisites: At least one year of experience with a highlevel language such as Pascal, C, C++, or Java; and familiarity with recursive programming methods and with data structures (arrays, pointers, stacks, queues, linked lists, binary trees).
Reviews a number of important algorithms, with emphasis on correctness and efficiency. The topics covered include solution of recurrence equations, sorting algorithms, selection, binary search trees and balancedtree strategies, tree traversal, partitioning, graphs, spanning trees, shortest paths, connectivity, depthfirst and breadthfirst search, dynamic programming, and divideandconquer techniques.

CSCIGA.1180 Mathematical Techniques for Computer Science Applications
3 Points. Graduatelevel. Fall, Spring, Summer.
Prerequisites: None
An introduction to theory, computational techniques, and applications of linear algebra, probability and statistics. These three areas of continuous mathematics are critical in many parts of computer science, including machine learning, scientific computing, computer vision, computational biology, natural language processing, and computer graphics. The course teaches a specialized language for mathematical computation, such as Matlab, and discusses how the language can be used for computation and for graphical output. No prior knowledge of linear algebra, probability, or statistics is assumed.

CSCIGA.2110 Programming Languages
3 Points. Graduatelevel. Fall, Spring, Summer.
Prerequisites: Students taking this class should already have substantial programming experience.
Discusses the design, use, and implementation of imperative, objectoriented, and functional programming languages. The topics covered include scoping, type systems, control structures, functions, modules, object orientation, exception handling, and concurrency. A variety of languages are studied, including C++, Java, Ada, Lisp, and ML, and concepts are reinforced by programming exercises.

CSCIGA.2112 Scientific Computing
3 Points. Graduatelevel. Fall.
Prerequisites: Multivariate calculus and linear algebra. Some programming experience recommended.
Methods for numerical applications in the physical and biological sciences, engineering, and finance. Basic principles and algorithms; specific problems from various application areas; use of standard software packages. 
CSCIGA.2130 Compiler Construction
3 Points. Graduatelevel. Fall, Spring.
Prerequisites: CSCIGA 1170, CSCIGA 2110, and CSCIGA 2250.
This is a capstone course based on compilers and modern programming languages. The topics covered include structure of onepass and multiplepass compilers; symbol table management; lexical analysis; traditional and automated parsing techniques, including recursive descent and LR parsing; syntaxdirected translation and semantic analysis; runtime storage management; intermediate code generation; introduction to optimization; and code generation. The course includes a special compilerrelated capstone project, which ties together concepts of algorithms, theory (formal languages), programming languages, software engineering, computer architecture, and other subjects covered in the MS curriculum. This project requires a substantial semesterlong programming effort, such as construction of a language compilation or translation system that includes lexical and syntactic analyzers, a type checker, and a code generator. 
CSCIGA.2180 Financial Software Projects
3 Points. Graduatelevel. Fall.
Prerequisites: It is assumed that the students can code in C++. No prior experience in the financial sector domain is required.
The theme of this course is an "applied case study" and focuses on fixed income markets. Topics covered include an overview of the markets, the inner workings of an investment bank, the market players, and where software engineers fit in. Students will be grouped into small teams to build a financial application using practical software engineering principles. Each team will build a risk management framework, starting with basic components. 
CSCIGA.2246 Open Source Tools
3 Points. Graduatelevel. Fall.
Prerequisites: An understanding of modern operating systems and a working knowledge of a programming language, such as C, C++ or Java
This course covers a brief history and philosophy of open source software, followed by an indepth look at open source tools intended for developers. In particular, we will present an overview of the Linux operating system, command line tools (find, grep, sed), programming tools (GIT, Eclipse, DTrace), web and database tools (Apache, MySQL), and system administration tools. We will also cover scripting languages such as shell and Python. 
CSCIGA.2250 Operating Systems
3 Points. Graduatelevel. Fall, Spring, Summer.
Prerequisites: None
The topics covered include a review of linkers and loaders and the highlevel design of key operating systems concepts such as process scheduling and synchronization; deadlocks and their prevention; memory management, including (demand) paging and segmentation; and I/O and file systems, with examples from Unix/Linux and Windows. Programming assignments may require C, C++, Java, or C#. 
CSCIGA.2262 Data Communications and Networks
3 Points. Graduatelevel. Fall, Spring.
Prerequisites: Students must have a working knowledge of fundamental data structures and associated algorithms. For some of the practical aspects of the course, a working knowledge of an objectoriented programming language (e.g., C++, C#, or preferably Java) is expected. An undergraduate course in data communication and networks is helpful but not required.
This course teaches the design and implementation techniques essential for engineering robust networks. Topics include networking principles, Transmission Control Protocol/Internet Protocol, naming and addressing (Domain Name System), data encoding/decoding techniques, link layer protocols, routing protocols, transport layer services, congestion control, quality of service, network services, programmable routers and overlay networks.

CSCIGA.2270 Computer Graphics
3 Points. Graduatelevel. Fall.
Prerequisites: CSCIGA 1170 and CSCIUA 140 (or an equivalent undergraduate course in linear algebra).
Problems and objectives of computer graphics. Vector, curve, and character generation. Interactive display devices. Construction of hierarchical image list. Graphic data structures and graphics languages. Hiddenline problems; windowing, shading, and perspective projection. Curved surface generation display.

CSCIGA.2271 Computer Vision
3 Points. Graduatelevel. Fall.
Prerequisites: CSCIGA 1170
Basic techniques of computer vision and image processing. General algorithms for image understanding problems. Study of binary image processing, edge detection, feature extraction, motion estimation, color processing, stereo vision, and elementary object recognition. Mathematical, signal processing, and image processing tools. Relation of computer vision algorithms to the human visual system.

CSCIGA.2274 Advanced Computer Graphics
3 Points. Graduatelevel. Fall.
Prerequisites: CSCIGA 1170, CSCIGA 2110, CSCIGA 2250 and CSCIGA 2270
This is a capstone course based on computer graphics tools. The course covers a selection of topics that may include computer animation, gaming, geometric modeling, motion capture, computational photography, physically based simulation, scientific visualization, and user interfaces. Not all areas are available every semester; the choice of areas is determined by the instructor. The capstone project involves some or all of the following elements: formation of a small team, project proposal, literature review, interim report, project presentation, and final report.

CSCIGA.2340 Elements of Discrete Mathematics
3 Points. Graduatelevel. Summer.
Prerequisites: May not be taken by students who have received a grade of B or better in CSCIGA 1170.
Introduction to the central mathematical concepts that arise in computer science. Emphasis is on proof and abstraction. Topics include proof techniques; combinatorics; sets, functions, and relations; discrete structures; order of magnitude analysis; formal logic; formal languages and automata. 
CSCIGA.2390 Logic in Computer Science
3 Points. Graduatelevel. Fall.
Prerequisites: Strong mathematical background and instructor permission for master’s students
A beginning graduatelevel course in mathematical logic with motivation provided by applications in computer science. There are no formal prerequisites, but the pace of the class requires that students can cope with a significant level of mathematical sophistication. Topics include propositional and firstorder logic; soundness, completeness, and compactness of firstorder logic; firstorder theories; undecidability and Godel’s incompleteness theorem; and an introduction to other logics such as secondorder and temporal logic. 
CSCIGA.2420 Numerical Methods I
3 Points. Graduatelevel. Fall.
Prerequisites: Corequisite: linear algebra.
Numerical linear algebra. Approximation theory. Quadrature rules and numerical integration. Nonlinear equations and optimization. Ordinary differential equations. Elliptic equations. Iterative methods for large, sparse systems. Parabolic and hyperbolic equations. 
CSCIGA.2421 Numerical Methods II
3 Points. Graduatelevel. Spring.
Prerequisites: Corequisite: linear algebra.
Numerical linear algebra. Approximation theory. Quadrature rules and numerical integration. Nonlinear equations and optimization. Ordinary differential equations. Elliptic equations. Iterative methods for large, sparse systems. Parabolic and hyperbolic equations. 
CSCIGA.2433 Database Systems
3 Points. Graduatelevel. Fall, Spring.
Prerequisites: None
Database system architecture. Modeling an application and logical database design. The relational model and relational data definition and data manipulation languages. Design of relational databases and normalization theory. Physical database design. Concurrency and recovery. Query processing and optimization. 
CSCIGA.2434 Advanced Database Systems
3 Points. Graduatelevel. Fall.
Prerequisites: CSCIGA 1170, CSCIGA 2110, and CSCIGA 2250.
This is a capstone course emphasizing largescale database systems. This course studies the internals of database systems as an introduction to research and as a basis for rational performance tuning. Topics include concurrency control, fault tolerance, operating system interactions, query processing, and principles of tuning. Database capstone projects involve topics such as design, concurrency control, interactions, and tuning. These projects include some or all of the following elements: formation of a small team, project proposal, literature review, interim report, project presentation, and final report. 
CSCIGA.2436 Realtime and Big Data Analytics
3 Points. Graduatelevel. Fall, Summer.
Prerequisites: None
This course introduces architectures and technologies at the foundation of the Big Data movement. These technologies facilitate scalable management and processing of vast quantities of data collected through realtime and near realtime sensing. We explore tools enabling the acquisition of data in the social domain and the fusion of those data when in flight and at rest using Hadoop and Hadooprelated tools.
The material covered in this course aligns with the prevailing state of the art in Big Data technologies, which continues to be a rapidly evolving landscape as new technologies emerge and existing ones evolve and mature.
Students are required to complete weekly reading and/or programming assignments and demonstrate mastery of course topics by designing, developing, and demonstrating an analytics project of their choosing. Class time will be set aside for project proposal and final demo.
This is an introductory Hadoop course intended for students who have no experience with the Apache Hadoop ecosystem of tools and frameworks.

CSCIGA.2437 Big Data Application Development
3 Points. Graduatelevel. Fall, Spring.
Prerequisites: Prerequisites include experience with Hadoop, which commonly comes from having completed the Realtime and Big Data Analytics course. There will be a review of Apache Hadoop, but students should have experience with Hadoop MapReduce and HDFS.
This is an introductory course on Spark programming, Spark architecture, Spark SQL, Spark Streaming, and integration of Spark with the Hadoop ecosystem for developing Big Data analytics applications. The course project can be completed with Scala or Python, and Spark. This course covers technologies that integrate well with Spark in the creation of Big Data analytics applications.
Students are required to complete weekly reading and programming assignments and demonstrate mastery of course topics by developing a final project using Spark.

CSCIGA.2440 Software Engineering
3 Points. Graduatelevel. Spring.
Prerequisites: CSCIGA 1170, CSCIGA 2110, and CSCIGA 2250
This is a capstone course focusing on largescale software development. This course presents modern software engineering techniques and examines the software life cycle, including software specification, design, implementation, testing, and maintenance. Objectoriented design methods are also considered. Software engineering projects involve creation of a largescale software system and require some or all of the following elements: formation of a small team, project proposal, literature review, interim report, project presentation, and final report. 
CSCIGA.2520 Bioinformatics and Genomes
4 Points. Graduatelevel. Spring.
Prerequisites: None
The recent explosion in the availability of genomewide data such as whole genome sequences and microarray data led to a vast increase in bioinformatics research and tool development. Bioinformatics is becoming a cornerstone for modern biology, especially in fields such as genomics. It is thus crucial to understand the basic ideas and to learn fundamental bioinformatics techniques. The emphasis of this course is on developing not only an understanding of existing tools but also the programming and statistics skills that allow students to solve new problems in a creative way. 
CSCIGA.2560 Artificial Intelligence
3 Points. Graduatelevel. Fall, Spring.
Prerequisites: None
There are many cognitive tasks that people do easily and almost unconsciously but that have proven extremely difficult to program on a computer. Artificial intelligence is the problem of developing computer systems that can carry out these tasks. This course covers problem solving and state space search; automated reasoning; probabilistic reasoning; planning; and knowledge representation.

CSCIGA.2565 Machine Learning
3 Points. Graduatelevel. Fall.
Prerequisites: Undergraduate course in linear algebra and strong programming skills for implementation of algorithms studied in class. Strong knowledge of probability. Recommended: knowledge of vector calculus, elementary statistics.
This course covers a wide variety of topics in machine learning, pattern recognition, statistical modeling, and neural computation. The course covers the mathematical methods and theoretical aspects but primarily focuses on algorithmic and practical issues.

CSCIGA.2566 Foundations of Machine Learning
3 Points. Graduatelevel. Fall.
Prerequisites: CSCIGA 1180.
This course introduces the fundamental concepts and methods of machine learning, including the description and analysis of several modern algorithms, their theoretical basis, and the illustration of their applications. Many of the algorithms described have been successfully used in text and speech processing, bioinformatics, and other areas in realworld products and services. The main topics covered are probability and general bounds; PAC model; VC dimension; perceptron, Winnow; support vector machines (SVMs); kernel methods; decision trees; boosting; regression problems and algorithms; ranking problems and algorithms; halving algorithm, weighted majority algorithm, mistake bounds; learning automata, Angluintype algorithms; and reinforcement learning, Markov decision processes (MDPs).

CSCIGA.2567 Machine Learning
3 Points. Graduatelevel. Spring.
Prerequisites: DSGA1001: Intro to Data Science or its equivalent, DSGA1002: Statistical and Mathematical Methods or its equivalent. Solid mathematical background, equivalent to a 1semester undergraduate course in each of the following: linear algebra, multivariate calculus (primarily differential calculus), probability theory, and statistics. (The coverage in DSGA 1002 is sufficient.) Python programming required for most homework assignments. Recommended: Computer science background up to a "data structures and algorithms" course. Recommended: At least one advanced, proofbased mathematics course
The course covers a wide variety of topics in machine learning, pattern recognition, statistical modeling, and neural computation. It covers the mathematical methods and theoretical aspects, but primarily focuses on algorithmic and practical issues.
Crosslisting for DSGA 1003.

CSCIGA.2569 Inference and Representation
3 Points. Graduatelevel. Fall.
Prerequisites: DSGA 1004
This course covers graphical models, causal inference, and advanced topics in statistical machine learning.

CSCIGA.2572 Deep Learning
3 Points. Graduatelevel. Spring.
Prerequisites: DSGA 1001 Intro to Data Science or a graduatelevel machine learning course.
This course concerns the latest techniques in deep learning and representation learning, focusing on supervised and unsupervised deep learning, embedding methods, metric learning, convolutional net and recurrent nets, with applications to computer vision, natural language understanding, and speech recognition.

CSCIGA.2580 Web Search Engines
3 Points. Graduatelevel. Fall, Spring.
Prerequisites: Recommend CSCIGA 1180.
Discusses the design of general and specialized Web search engines and the extraction of information from the results of Web search engines. Topics include Web crawlers, database design, query language, relevance ranking, document similarity and clustering, the “invisible” Web, specialized search engines, evaluation, natural language processing, data mining applied to the Web, and multimedia retrieval.

CSCIGA.2585 Speech Recognition
3 Points. Graduatelevel. Spring.
Prerequisites: Familiarity with basics in linear algebra, probability and analysis of algorithms. No specific knowledge about signal processing or other engineering material is required.
This course gives a computer science presentation of automatic speech recognition, the problem of transcribing accurately spoken utterances, and presents algorithms for creating largescale speech recognition systems. The algorithms and techniques presented are now used in most research and industrial systems. The objective of the course is not only to familiarize students with particular algorithms used in speech recognition, but also to use that as a basis to explore general concepts of text and speech, as well as machine learning algorithms relevant to a variety of other areas in computer science. The course will make use of several software libraries and will study recent research and publications in this area.

CSCIGA.2590 Natural Language Processing
3 Points. Graduatelevel. Spring.
Prerequisites: Some facility with Java and Python and a knowledge of the elements of probability and statistics is expected.
Natural Language Processing applies computational and linguistic knowledge to the processing of natural languages (English, Chinese, Spanish, Japanese). Applications include: machine translation, information extraction, information retrieval, and others. On the one hand, the class will include the modeling and representation of linguistic phenomena. On the other, It will cover methods for applying this knowledge using both manual rules and machine learning. Sample topics include: formal languages, hmm, part of speech tagging, vectorbased methods, shallow and full parsing, semantic role labeling, information extraction and machine translation. Students will complete shared tasks (POStagging, Information Extraction, etc.) and group final projects. There will also be a midterm exam and several small written assignments.
Prerequisites: Some facility with Java and Python and a knowledge of the elements of probability and statistics is expected.

CSCIGA.2591 Advanced Topics in Natural Language Processing
3 Points. Graduatelevel. Fall.
Prerequisites: Students should have solid programming skills in Java and should have successfully completed a graduate level course in natural language processing.
The design of systems that can learn by reading. Ontology and knowledge base. Principal processing components: text segmentation, lexical analysis, name recognition and classification, parsing and syntactic regularization, word sense disambiguation, predicateargument analysis, reference resolution, discourse structure. Joint inference methods. Knowledge acquisition strategies.
This is a projectoriented, teamorganized course in which students will take responsibility for one or two processing components: selecting methods, making class presentations, creating and maintaining code. A good working knowledge of corpustrained methods for these components is required (using loglinear or deep models). Implementation will be in Java, so good programming skills in Java are needed, along with a commitment to meeting javadoc documentation standards.
The tentative target is to read articles from Wikipedia.

CSCIGA.2620 Networks and Mobile Systems
3 Points. Graduatelevel. Spring.
Prerequisites: CSCIGA 1170, CSCIGA 2110, and CSCIGA 2250.
This is a capstone course. A course in computer networks and largescale distributed systems. Teaches the design and implementation techniques essential for engineering both robust networks and Internetscale distributed systems. The goal is to guide students so they can initiate and critique research ideas in networks and distributed systems and implement and evaluate a working system that can handle a realworld workload. Topics include routing protocols, network congestion control, wireless networking, peertopeer systems, overlay networks and applications, distributed storage systems, and network security.

CSCIGA.2621 Distributed Systems
3 Points. Graduatelevel. Fall.
Prerequisites: 1. Undergraduate Operating Systems or Computer Systems Organization; 2. programming experience; 3. mathematical maturity or the willingness to work through simple proofs.
Largescale distributed systems lie at the core of application domains such as cloud computing, internet of things, large multiplayer games, etc. These application domains make use of systems such as distributed databases (e.g., Google's Spanner, Amazon's Dynamo, etc.), large scale analytics frameworks (e.g., Hadoop, Spark and TensorFlow), distributed locking systems (e.g., Paxos, etcd, etc.), and others. In this class we will look at how to construct these distributed systems, in particular looking at why this is more complex than building applications running on a single machine, and present abstraction and design techniques for building distributed systems. We will focus on a solving a variety of common problems in these systems including consensus, consistency, naming, fault tolerance, etc.
This is a graduatelevel course, but undergraduates are welcome! The course itself will consist of a series of lectures and will require reading research papers.
This class satisfies the Ph.D. breadth requirement in Systems and also serves as a M.S. capstone course.

CSCIGA.2630 Foundations of Networks and Mobile Systems
3 Points. Graduatelevel. Fall, Spring.
Prerequisites: None
Only open to MS students in the Computing, Entrepreneurship, and Innovation program
The class will begin with introductory concepts of network protocols across different layers of the network stack including routing, transport, naming, addressing and connect them to the core building blocks of the Internet. The second part of the class will focus on networking concepts in the evolution of Webbased systems, providing an introduction to datacenter networks, clouds, middle boxes (proxies, firewalls) and next generation networks. The third part of the class will focus on the fundamental concepts in wireless networks, cellular networks and mobile devices with a specific focus on mobile programming and applications, 802.11 evolution, mobile services and the evolution of cellular networks.

CSCIGA.2810 Design and Innovation
3 Points. Graduatelevel. Summer.
Prerequisites: None
Only open to MS students in the Computing, Entrepreneurship, and Innovation program.
This is an intensive ideaincubation, computingcentric design class where students will be exposed to a spectrum of tech challenges, latest and future technology trends (using case studies) and will need to iteratively propose and refine bold computing centric ideas for real problems. Students will also initiate the process of translating their ideas to initial prototypes. Right from the beginning, students in the class will form small teams where each team will work on a single project idea that solves an important real world problem. Students will be provided exposure to basic tools and platforms that can be leveraged by individual teams in their project design and implementation. In addition to idea incubation, the class will provide a beginner's background to tech startups including: product development cycle, how to pitch your idea, product market fit, fundraising and venture capital, customer discovery. Teams are expected to constantly interact with other teams to discuss and exchange ideas.

CSCIGA.2820 DevOps and Agile Methodologies
3 Points. Graduatelevel. Fall, Spring.
Prerequisites: None
This course uses a project based learning approach towards the study of DevOps as a cultural change in Information Technology organizations, and the supporting development tools and automation technologies required to implement it successfully. Students study the principles of DevOps, and as part of an agile development team, each student is involved in planning, designing, building, testing, and deploying one or more cloud native microservices into a Platform as a Service cloud by utilizing a DevOps Pipeline that they will create.

CSCIGA.2830 Lean LaunchPad
3 Points. Graduatelevel. Fall.
Prerequisites: None
Only open to MS students in the Computing, Entrepreneurship, and Innovation program.
This course is based on Steve Blank’s Lean LaunchPad curriculum. This course provides real world, hands on learning on what it’s like to actually start a high tech company. This is a practical class – essentially a lab, not a theory or “book” class. The goal, within the constraints of a classroom and a limited amount of time, is to create an entrepreneurial experience for students with all of the pressures and demands of the real world in an early stage start up. Students will talk to customers, partners, competitors, as they encounter the chaos and uncertainty of how a startup actually works. They will work in teams learning how to turn a great idea into a great company. They will learn how to use a business model to brainstorm each part of a company and customer development to get out of the classroom to see whether anyone would want/use their product. Finally, based on the customer and market feedback gathered, students will use agile development to rapidly iterate their products to build something customers would actually use and buy. Each day will be a new adventure outside the classroom as students test each part of their business model and then share the hard earned knowledge with the rest of the class.

CSCIGA.2840 Entrepreneurship Capstone
3 Points. Graduatelevel. Spring.
Prerequisites: None
Only open to MS students in the Computing, Entrepreneurship, and Innovation program.
The Entrepreneurship Capstone class is a 15week bootcamp class on entrepreneurship. This class aims to translate experiences of students on idea incubation, prototype development and Lean Launchpad towards entrepreneurship. Students will learn how to pitch their ideas to VCs, focus on business development and translate their prototypes to an evolving MVP.

CSCIGA.2930 Advanced Topics in Applied Mathematics
3 Points. Graduatelevel. Fall.
Prerequisites: Topics determine prerequisites.
Topics vary each semester. 
CSCIGA.2945 Advanced Topics in Numerical Analysis
3 Points. Graduatelevel. Fall, Spring.
Prerequisites: Topics determine prerequisites.
Topics vary each semester. 
CSCIGA.2946 Selected Topics
3 Points. Graduatelevel. Fall, Spring, Summer.
Prerequisites: Prerequisites vary according to topic.
Topics vary each semester.

CSCIGA.2965 Heuristic Problem Solving
3 Points. Graduatelevel. Fall.
Prerequisites: CSCIGA 1170 and an ability to prototype algorithms rapidly.
This course revolves around several problems new to computer science (derived from games or puzzles in columns for Dr. Dobb’s Journal, Scientific American, and elsewhere). The idea is to train students to face a new problem, read relevant literature, and come up with a solution. The solution entails winning a contest against other solutions. The winner receives candy. The best solutions become part of an evolving “Omniheurist” Web site that is expected to get many visitors over the years. The course is for highly motivated, mathematically adept students. It is open to supported Ph.D. students and wellqualified master’s students. Class size has been around 10 in the past, and instructor and students have all gotten to know one another very well. Algorithmic and programming knowledge is the main prerequisite. It also helps to be familiar with a rapid prototyping language such as Matlab, Mathematica, K, or Python, or to be completely fluent in some other language. 
CSCIGA.3033 Special Topics in Computer Science
3 Points. Graduatelevel. Fall, Spring, Summer.
Prerequisites: Prerequisites vary according to topic.
Topics vary each semester.

CSCIGA.3110 Honors Programming Languages
4 Points. Graduatelevel. Spring.
Prerequisites: Permission of the instructor for master’s students
The course will introduce a panorama of programming languages concepts underlying the main programming language paradigms (such as imperative, functional, objectoriented, logic, concurrent, and scripting languages) and present in detail the formal methods (code semantics, specification, and verification) used in modern high quality assurance tools for software safety and security. A programming project (design and implementation of an interpreter/compiler for an dynamic objectoriented minilanguage) will be programmed in OCaml, a multiparadigm language introduced at the beginning of the course. 
CSCIGA.3130 Honors Compilers and Computer Languages
4 Points. Graduatelevel.
Prerequisites: Permission of the instructor for master’s students
Lexical scanning and scanner generation from regular expressions; LL, LR, and universal parser generation from contextfree grammars; syntaxdirected translation and attribute grammars; type and general semantic analysis; code generation, peephole optimization, and register allocation; and global program analysis and optimization. Provides experience using a variety of advanced language systems and experimental system prototypes. 
CSCIGA.3140 Abstract Interpretation
3 Points. Graduatelevel. Spring.
Prerequisites: Some facility with logic, sets, linear algebra, graphs, formal languages, mathematical proofs, and programming languages is expected.
Many numerical or symbolic problems are very hard or even undecidable meaning that no computer algorithm can solve them exactly in reasonable time and memory space. This course introduces the latest techniques in abstract interpretation, a powerful framework for automatically calculating approximate solutions of such difficult problems. The main emphasis will be on software verification and automatic analysis with a wide range of applications from compilers to social networks.

CSCIGA.3205 Applied Cryptography and Network Security
3 Points. Graduatelevel. Spring.
Prerequisites: None
This course first introduces the fundamental mathematical cryptographic algorithms, focusing on those that are used in current systems. To the extent feasible, the mathematical properties of the cryptographic algorithms are justified, using elementary mathematical tools. Second, actual security mechanisms and protocols, mainly those employed for network traffic that rely on the previously introduced cryptographic algorithms, are presented. The topics covered include introduction to basic numbertheoretical properties, public/private and symmetric key systems, secure hash functions, digital signature standards, digital certificates, IP security, email security, Web security, and standalone computer privacy and security tools. 
CSCIGA.3210 Introduction to Cryptography
3 Points. Graduatelevel. Fall.
Prerequisites: Strong mathematical background
The primary focus of this course is on definitions and constructions of various cryptographic objects, such as pseudorandom generators, encryption schemes, digital signature schemes, message authentication codes, block ciphers, and others, time permitting. The class tries to understand what security properties are desirable in such objects, how to properly define these properties, and how to design objects that satisfy them. Once a good definition is established for a particular object, the emphasis will be on constructing examples that provably satisfy the definition. Thus, a main prerequisite of this course is mathematical maturity and a certain comfort level with proofs. Secondary topics, covered only briefly, are current cryptographic practice and the history of cryptography and cryptanalysis. 
CSCIGA.3220 Advanced Cryptography
3 Points. Graduatelevel. Spring.
Prerequisites: CSCIGA 3210.
Basics of computational number theory for cryptography. Identification protocols. Digital signatures. Publickey encryption. Additional selected topics. 
CSCIGA.3230 Random Graphs
3 Points. Graduatelevel.
Prerequisites: None
This course covers numerous topics related to random graphs, including generalized randomized structures, random processes, probabilistic methods and Erdös Magic. Also covered are branching processes, phase transitions for large random evolutions, derandomization via conditional expectations and semidefinite programming derandomization techniques. Algorithms, probability and discrete mathematics all appear, but concepts will be defined from scratch. Emphasis will be on methods of asymptotic calculation. 
CSCIGA.3250 Honors Operating Systems
4 Points. Graduatelevel.
Prerequisites: Permission of the instructor for master’s students
Operatingsystem structure. Processes. Process synchronization. Language mechanisms for concurrency. Deadlocks: modeling, prevention, avoidance, and recovery. Memory management. Filesystem interface. Secondary storage. Distributed systems: layered system design, managing distributed processes, distributed shared memory, faulttolerance. CPU scheduling. Queuing and performance: analysis of single M/M/1 queue and others. Protection and security. Advanced security concepts: threat monitoring, encryption, and public keys. 
CSCIGA.3520 Honors Analysis of Algorithms
4 Points. Graduatelevel. Fall.
Prerequisites: Permission of the instructor for master’s students.
Design of algorithms and data structures. Review of searching, sorting, and fundamental graph algorithms. Indepth analysis of algorithmic complexity, including advanced topics on recurrence equations and NPcomplete problems. Advanced topics on lower bounds, randomized algorithms, amortized algorithms, and data structure design as applied to unionfind, pattern matching, polynomial arithmetic, network flow, and matching. 
CSCIGA.3812 Information Technology Projects
3 Points. Graduatelevel. Fall, Spring, Summer.
Prerequisites: For MS in IS students: Successful completion of CSCIGA 1170 Fundamental Algorithms and two of the following three courses: CSCIGA 2262 Data Communications & Networks; CSCIGA 2250 Operating Systems; CSCIGA 2433 Database Systems. For MS in CS students: Successful completion of CSCIGA 1170 Fundamental Algorithms, CSCIGA 2110 Programming Languages, and CSCIGA 2250 Operating Systems. PERMISSION OF THE DEPARTMENT REQUIRED.
This is a capstone course that connects students directly with realworld information technology problems. The goal of this course is to teach the skills needed for success in realworld information technology via a combination of classroom lectures and practical experience with large projects that have been specified by local “clients.” The typical clients are primarily companies, but can also be government agencies or nonprofit organizations. Each project lasts for the entire semester and is designed to involve the full software project life cycle. Examples of such projects are development of software to solve a business problem, including specifying requirements, writing and testing prototype code, and writing a final report; and evaluation of commercial software to be purchased to address a business problem, including gathering requirements, designing an architecture to connect the new software with existing systems, and assessing the suitability of available software products.

CSCIGA.3813 Advanced Laboratory
13 (MS), 112 (PhD) Points. Graduatelevel. Fall, Spring, Summer.
Prerequisites: Permission of the faculty project supervisor and the Director of Graduate Studies.
Largescale programming project or research in cooperation with a faculty member.

CSCIGA.3840 Master’s Thesis Research
3  6 Points. Graduatelevel. Fall, Spring, Summer.
Prerequisites: Approval of a faculty adviser and the Director of Graduate Studies for the M.S. programs.

CSCIGA.3850 Ph.D. Research Seminar
1 Points. Graduatelevel. Fall, Spring.
Prerequisites: Permission of the instructor.
Graduate seminars serve as loosely structured forums for exploring research topics from broad areas of computer science. They are designed to foster dialogue by bringing together faculty and students from a given area and to encourage the exchange of ideas. As such, they bridge the gap between more structured course offerings and informal research meetings. Subject matter varies by section. 
CSCIGA.3860 Ph.D. Thesis Research
1  12 Points. Graduatelevel. Fall, Spring.
Prerequisites: Permission of the thesis adviser or director of graduate studies for the Ph.D. program.

CSCIGA.3870 Internship In Computer Science
13 Points. Graduatelevel. Fall, Spring, Summer.
Prerequisites: Permission of Director of Graduate Studies.
Participation in a programming project or research project conducted outside of the classroom in a governmental, commercial, or academic setting. Open only to graduate students with permission of the Director of Graduate Studies (DGS). Students must submit a brief written description of their work to the DGS before starting the internship and submit a written summary of their work when it is completed. MS students may take this course a maximum of two times. PhD students who wish to take this course more than four times need to request a special permission and provide adequate academic justification.
Section 1 is for Master's students. Section 2 is for Ph.D. students.

MAINTGA.4747 Maintenance of Matriculation
Points. Graduatelevel. Fall, Spring.
Prerequisites: None
Section 1 is for MS students. Section 4 is for nonsupported PhD students. 
COREUA.0109 Quantitative Reasoning: Mathematics & Computing
4 Points. Undergraduatelevel. Fall.
Prerequisites: Department Permission
This course teaches key mathematical concepts using the new Python programming language. The first part of the course teaches students how to use the basic features of Python: operations with numbers and strings, variables, Boolean logic, control structures, loops and functions. The second part of the course focuses on the phenomena of growth and decay: geometric progressions, compound interest, exponentials and logarithms. The third part of the course introduces three key mathematical concepts: trigonometry, counting problems and probability. Students use Python to explore the mathematical concepts in labs and homework assignments. No prior knowledge of programming is required.

CSCIUA.0002 Introduction to Computer Programming (No Prior Experience)
4 Points. Undergraduatelevel. Fall, Spring, Summer.
Prerequisites: Three years of high school mathematics or equivalent. No prior computing experience is assumed. Students with any programming experience should consult with the department before registering. Students with any reported score on the Computer Science AP examination cannot enroll in this course; Albert will block them from registering for it. Students who have taken or are taking Introduction to Computer Science (CSCIUA 101) will not receive credit for this course. Does not count toward the computer science major; serves as the prerequisite for students with no previous programming experience who want to continue into CSCIUA 101 and pursue the major. Students may not receive credit for both CSCIUA 2 and CSCIUA 3.
An introduction to the fundamentals of computer programming, which is the foundation of computer science. Students design, write, and debug computer programs. No knowledge of programming is assumed.

CSCIUA.0003 Introduction to Computer Programming (Limited Prior Experience)
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Limited programming experience, or any score on the AP Computer Science examination (students will forfeit the AP credit for scores of 4 or 5), or Data Science for Everyone (DSUA 111). Students who have taken or are taking Introduction to Computer Science (CSCIUA 101) will not receive credit for this course. Does not count toward the computer science major; serves as the prerequisite for students with some previous programming experience who want to continue into CSCIUA 101 and pursue the major. Students may not receive credit for both CSCIUA 2 and CSCIUA 3.
Introduces objectoriented programming, recursion, and other important concepts to students who already have had some exposure to programming in the context of building applications using Python. Students will design and implement Python programs in a variety of applied areas.

CSCIUA.0004 Introduction to Web Design & Computer Principles
4 Points. Undergraduatelevel. Fall, Spring, Summer.
Prerequisites: Three years of high school mathematics or equivalent. No prior computing experience is assumed. Students with computing experience should consult with the department before registering.
Introduces students to both the practice of web design and the basic principles of computer science. The practice component covers not only web design but also current graphics and software tools. The principles section includes an overview of hardware and software, the history of computers, and a discussion of the impact of computers and the Internet. 
CSCIUA.0060 Database Design and Implementation
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Introduction to Computer Programming (No Prior Experience) (CSCIUA 2) or Introduction to Computer Programming (Limited Prior Experience) (CSCIUA 3). Students that have successfully completed Data Management and Analysis (CSCIUA 479) are NOT eligible to take this course.
Introduces principles and applications of database design and working with data. Students use Python as they prepare, analyze, and work with data and use SQL to study the principles and implementations of relational databases. Also covers other database paradigms, such as NoSQL. Students apply these principles to computer systems and their respective fields of interest.

CSCIUA.0061 Web Development and Programming
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Introduction to Computer Programming (No Prior Experience) (CSCIUA 2) or Introduction to Computer Programming (Limited Prior Experience) (CSCIUA 3), and Introduction to Web Design and Computer Principles (CSCIUA 4). Students that have successfully completed Applied Internet Technology (CSCIUA 467) are NOT eligible to take this course.
Provides a practical approach to web technologies and programming. Students build interactive, secure, and powerful web programs. Covers client and server side technologies for the web.

CSCIUA.0101 Introduction to Computer Science
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Introduction to Computer Programming (No Prior Experience) (CSCIUA 2) or Introduction to Computer Programming (Limited Prior Experience) (CSCIUA 3), or a score of 3 on the AP Computer Science exam (scores of 4 and 5 are acceptable prerequisites for students who wish to take CSCIUA 101 before entering CSCIUA 102; they will forfeit the AP credit), or departmental permission assessed by placement exam.
How to design algorithms to solve problems and how to translate these algorithms into working computer programs. Experience is acquired through projects in a highlevel programming language. Intended primarily for computer science majors but also suitable for students of other scientific disciplines. Programming assignments.

CSCIUA.0102 Data Structures
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Introduction to Computer Science (CSCIUA 101), or a score of 4 or 5 on the AP Computer Science examination.
Use and design of data structures, which organize information in computer memory. Stacks, queues, linked lists, binary trees: how to implement them in a highlevel language, how to analyze their effect on algorithm efficiency, and how to modify them. Programming assignments.

CSCIUA.0201 Computer Systems Organization
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Data Structures (CSCIUA 102).
Covers the internal structure of computers, machine (assembly) language programming, and the use of pointers in highlevel languages. Topics include the logical design of computers, computer architecture, the internal representation of data, instruction sets, and addressing logic, as well as pointers, structures, and other features of highlevel languages that relate to assembly language. Programming assignments are in both assembly language and other languages. 
CSCIUA.0202 Operating Systems
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Computer Systems Organization (CSCIUA 201).
Covers the principles and design of operating systems. Topics include process scheduling and synchronization, deadlocks, memory management (including virtual memory), input/output, and file systems. Programming assignments. 
CSCIUA.0310 Basic Algorithms
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: <p>Data Structures (CSCIUA 102); Discrete Mathematics (MATHUA 120); and either Calculus I (MATHUA 121) OR Mathematics for Economics I (MATHUA 211).</p>
Introduction to the study of algorithms. Presents two main themes: designing appropriate data structures and analyzing the efficiency of the algorithms that use them. Algorithms studied include sorting, searching, graph algorithms, and maintaining dynamic data structures. Homework assignments, not necessarily involving programming.

CSCIUA.0330 Introduction to Computer Simulation
4 Points. Undergraduatelevel. Spring.
Prerequisites: A grade of C or higher in MATHUA 121 Calculus I or MATHUA 212 Math for Economics II (for Economics majors) and PHYSUA 11 General Physics.
In this course, students will learn how to do computer simulations of such phenomena as orbits (Kepler problem and Nbody problem), epidemic and endemic disease (including evolution in response to the selective pressure of a malaria), musical stringed instruments (piano, guitar, and violin), and traffic flow in a city (with lights, breakdowns, and gridlock at corners). The simulations are based on mathematical models, numerical methods, and Matlab programming techniques that will be taught in class. The use of animations (and sound where appropriate) to present the results of simulations will be emphasized. 
CSCIUA.0380 Topics of General Computing Interest
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Topics determine prerequisites.
Detailed descriptions available when topics are announced. Typical offerings include Computing in the Humanities and Arts and Introduction to Flash Programming. Does not count toward the computer science major. 
CSCIUA.0381 PROGRAMMING TOOLS FOR THE DATA SCIENTIST
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Data Science for Everyone (DSUA 111) or equivalent proficiency in Python, and either Introduction to Computer Programming (No Prior Experience) (CSCIUA 2) or Introduction to Computer Programming (Limited Prior Experience) (CSCIUA 3).
Lecture and laboratory. Building applications in Python using a projectbased learning approach. Students use Python packages in a variety of applied areas, such as textual analysis and data visualization. Does not count toward the computer science major.

CSCIUA.0421 Numerical Computing
4 Points. Undergraduatelevel. Spring.
Prerequisites: Computer Systems Organization (CSCIUA 201), either Calculus I (MATHUA 121) or both of Mathematics for Economics I and II (MATHUA 211 and 212), and Linear Algebra (MATHUA 140), or permission of instructor.
The need for floatingpoint arithmetic, the IEEE floatingpoint standard, and the importance of numerical computing in a wide variety of scientific applications. Fundamental types of numerical algorithms: direct methods (e.g., for systems of linear equations), iterative methods (e.g., for a nonlinear equation), and discretization methods (e.g., for a differential equation). Numerical errors: can you trust your answers? Uses graphics and software packages such as Matlab. Programming assignments.

CSCIUA.0453 Theory of Computation
4 Points. Undergraduatelevel. Spring.
Prerequisites: Basic Algorithms (CSCIUA 310) and Computer Systems Organization (CSCIUA.201)
A mathematical approach to studying topics in computer science, such as regular languages and some of their representations (deterministic finite automata, nondeterministic finite automata, regular expressions) and proof of nonregularity. Contextfree languages and pushdown automata; proofs that languages are not contextfree. Elements of computability theory. Brief introduction to NPcompleteness.

CSCIUA.0467 Applied Internet Technology
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: C or better in Computer Systems Organization (CSCIUA 201). Students who complete Applied Internet Technology (CSCIUA 467) with a C or better are not eligible to take Web Development and Programming (CSCIUA 61).
Applied Internet Technology is a practical introduction to creating modern web applications. It covers fullstack (that is, every aspect of building a database driven web application: server programming, database implementation, frontend markup, styling and interactivity) web development. It includes topics such as database and data model design, web application architecture, separation of logic and presentation, handling user input and processing form data, managing asynchronous processes, strategies for creating realtime web applications, and handling clientside interactivity. Students will use current server and clientside web frameworks and libraries to build dynamic, datadriven sites. Various applications to support development will also be introduced, such as version control, static analysis tools, and build systems.

CSCIUA.0470 ObjectOriented Programming
4 Points. Undergraduatelevel. Fall.
Prerequisites: Computer Systems Organization (CSCIUA 201).
Introduces the important concepts of objectoriented design and languages, including code reuse, data abstraction, inheritance, and dynamic overloading. Covers in depth those features of Java and C++ that support objectoriented programming and gives an overview of other objectoriented languages of interest. Significant programming assignments stressing objectoriented design. Not offered every academic year.

CSCIUA.0472 Artificial Intelligence
4 Points. Undergraduatelevel. Spring.
Prerequisites: Computer Systems Organization (CSCIUA 201) and Basic Algorithms (CSCIUA 310).
Many cognitive tasks that people can do easily and almost unconsciously have proven extremely difficult to program on a computer. Artificial intelligence tackles the problem of developing computer systems that can carry out these tasks. Focus is on three central areas in AI: representation and reasoning, machine learning, and natural language processing. 
CSCIUA.0473 Fundamentals of Machine Learning
4 Points. Undergraduatelevel. Spring.
Prerequisites: Data Structures (CSCIUA.102), Linear Algebra (MATHUA.140) and Probability and Statistics (MATHUA.235). Students may take any of the following courses in place of MATHUA.235: Theory of Probability (MATHUA 233), Mathematical Statistics (MATHUA 234), Honors Theory of Probability (MATHUA 238) OR Data Analysis (MAUY 2224).
This exciting and fastevolving field of computer science has many recent consumer applications (e.g., Microsoft Kinect, Google Translate, IPhone's Siri, digital camera face detection, Netflix recommendations, Google news) and applications within the sciences and medicine (e.g., predicting proteinprotein interactions, species modeling, detecting tumors, personalized medicine). Students learn the theoretical foundations and how to apply machine learning to solve new problems.

CSCIUA.0474 Software Engineering
4 Points. Undergraduatelevel. Spring.
Prerequisites: Computer Systems Organization (CSCIUA 201)
An intense handson study of practical techniques and methods of software engineering. Topics include advanced objectoriented design, design patterns, refactoring, code optimization, universal modeling language, threading, user interface design, enterprise application development, and development tools. All topics are integrated and applied during the semester long group project. The aim of the project is to prepare students for dynamics in a real workplace. Members of the group meet on a regular basis to discuss the project and to assign individual tasks. Students are judged primarily on the final project presentations. Not offered every academic year.

CSCIUA.0475 Predictive Analytics
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Computer Systems Organization (CSCIUA 201), Basic Algorithms (CSCIUA 310), and Linear Algebra (MATHUA 140) or Honors Linear Algebra (MATHUA 148).
Predictive analytics is the art and science of extracting useful information from historical data and present data for the purpose of predicting future trends. In this course, students will be introduced to the phases of the analytics lifecycle and will gain an understanding of a variety of tools and machine learning algorithms for analyzing data and discovering forward insights. Several techniques will be introduced including: data preprocessing techniques, data reduction algorithms, data clustering algorithms, data classification algorithms, uplifting algorithms, association rules, data mining algorithms, recommender systems, and more. This course aims to provide students with skills of the new generation of data scientists that will allow them to structure, analyze and derive useful insights from data that could help make better decisions.

CSCIUA.0476 PROCESSING BIG DATA FOR ANALYTICS APPLICATIONS
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: (CSCIUA 201) Computer Systems Organization and (CSCIUA 310) Basic Algorithms. Familiarity with Linux commands and SQL will be helpful but is not required.
Introduces platforms, tools, and architectures that facilitate scalable management and processing of vast quantities of data. Explores open source tools enabling the efficient acquisition, distributed storage, and processing of big data. Provides handson experience with distributed processing Apache solutions such as Hadoop MapReduce, HBase, Hive, Impala, Pig, core Spark, Spark SQL, and Spark Streaming. Other Apache big data tools covered are Oozie, Zookeeper, Flume, and Kafka.

CSCIUA.0478 Introduction to Cryptography
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Basic Algorithms (CSCIUA 310).
An introduction to the principles and practice of cryptography and its application to network security. Topics include symmetrickey encryption (block ciphers, modes of operations, AES), message authentication (pseudorandom functions, CBCMAC), publickey encryption (RSA, ElGamal), digital signatures (RSA, FiatShamir), and authentication applications (identification, zeroknowledge). 
CSCIUA.0479 Data Management and Analysis
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Data Structures (CSCIUA 102). Students that complete Data Management and Analysis (CSCIUA 479) with a C or better are not eligible to take Database Design and Implementation (CSCIUA 60).
Extracting, transforming and analyzing data in myriad formats. Using traditional relational
databases as well as nonrelational databases as well as nonrelational databases to store, manipulate, and query data. Students write custom programs, create queries, and use data analysis tools and libraries on a wide array of data sets. Additional topics: data modeling, cloud databases and AP programming. 
CSCIUA.0480 Special Topics in Computer Science
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Topics determine prerequisites.
Detailed course descriptions are available when advanced topics are announced each semester. Typical offerings include, but are not limited to, Bioinformatics, Building Robots, Computer Graphics, Machine Learning, Network Programming, Computer Vision, and Multimedia for Majors. 
CSCIUA.0490 Special Topics in Programming Languages
4 Points. Undergraduatelevel. Fall, Spring.
Prerequisites: Topics determine prerequisites.
Covers topics in programming languages at an advanced level. Detailed course descriptions are available when topics are announced.

CSCIUA.0520 Undergraduate Research
4 Points. Undergraduatelevel. Fall.
Prerequisites: Permission of the department.
The student is supervised by a faculty member actively engaged in research, possibly leading to results publishable in the computer science literature. A substantial commitment to this work is expected. The research project may be one or two semesters, to be determined in consultation with the faculty supervisor. Students taking this course for honors in computer science are required to write an honors thesis. All other students need to submit a writeup of the research results at the conclusion of the project. 
CSCIUA.0521 Undergraduate Research
4 Points. Undergraduatelevel. Spring.
Prerequisites: Permission of the department.
The student is supervised by a faculty member actively engaged in research, possibly leading to results publishable in the computer science literature. A substantial commitment to this work is expected. The research project may be one or two semesters, to be determined in consultation with the faculty supervisor. Students taking this course for honors in computer science are required to write an honors thesis. All other students need to submit a writeup of the research results at the conclusion of the project. 
CSCIUA.0897 Internship
1  4 Points. Undergraduatelevel. Fall.
Prerequisites: Restricted to declared computer science majors. Internship credit does not count toward major requirements, but does apply toward completion of the CAS degree.
An internship in computer science is an excellent complement to formal course work. We strongly recommend that students have some practical training along with their classroom experience, so they can explore different career options and gain handson experience. An internship is for majors only, and students must have maintained an overall GPA of 3.0 and a computer science GPA of 3.5. The internship will be graded. 
CSCIUA.0898 Internship
1  4 Points. Undergraduatelevel. Spring.
Prerequisites: Restricted to declared computer science majors. Internship credit does not count toward major requirements, but does apply toward completion of the CAS degree.
An internship in computer science is an excellent complement to formal course work. We strongly recommend that students have some practical training along with their classroom experience, so they can explore different career options and gain handson experience. An internship is for majors only, and students must have maintained an overall GPA of 3.0 and a computer science GPA of 3.5. The internship will be graded. 
CSCIUA.0997 Independent Study
1  4 Points. Undergraduatelevel. Fall.
Prerequisites: Permission of the department. Does not satisfy the major elective requirement.
Students majoring in the department are permitted to work on an individual basis under the supervision of a fulltime faculty member in the department if they have maintained an overall GPA of 3.0 and a GPA of 3.5 in computer science and have a study proposal that is approved by the director of undergraduate studies. Students are expected to spend about three to six hours a week on their project.

CSCIUA.0998 Independent Study
1  4 Points. Undergraduatelevel. Spring.
Prerequisites: Permission of the department. Does not satisfy the major elective requirement.
Students majoring in the department are permitted to work on an individual basis under the supervision of a fulltime faculty member in the department if they have maintained an overall GPA of 3.0 and a GPA of 3.5 in computer science and have a study proposal that is approved by the director of undergraduate studies. Students are expected to spend about three to six hours a week on their project.

FRSEMUA.0597 Problem Solving
4 Points. Undergraduatelevel. Fall.
Prerequisites: Some programming experience in Python, Java, Javascript, R, or C.
Many problems in science, business, and politics require heuristics—problemsolving techniques that often work well but give imperfect guarantees. This course teaches heuristics as they apply to the design of scientific experiments, the resolution of economic or political negotiations, and the construction of engineering devices in hostile environments. Students will work in small teams that will solve puzzles, conduct experiments, and build strategies for a competitive auction game. Students will use and learn computational tools, such as Python. The intent is to make you better able to face complex problems in any field of study you choose.