56:198:500 Introduction to Programming for Computational Scientists 
This course introduces the basics of modern computer programming to beginning graduate students without a background in computer science. Topics covered are: control statements; arrays and lists; classes, objects and methods; inheritance; polymorphism; exception handling; file streams and serialization; recursion; searching and sorting. Students are required to use an up-to-date integrated development environment (IDE) to complete a number of programming assignments.
Prerequisites: None
Term: Fall

56:198:501 Introduction to Algorithms for Computational Scientists 
Introduction to algorithms, data structures, and algorithmic paradigms: binary search trees, hashing, sorting, searching, shortest paths, and dynamic programming. Introduction to scientific computing with MATLAB.
Prerequisites: 56:198:500 or equivalent
Term: Spring

50:198:523 Software Engineering (3 credits) 
Principles and techniques for the design and construction of reliable, maintainable, and useful software systems. Software life cycle, requirements specifications, and verification and validation issues. Implementation strategies (e.g., top-down, bottom-up, teams), support for reuse, and performance improvement. A treatment of human factors and user interfaces included.
Prerequisites: 56:198:500 or equivalent 
Term: Fall

56:198:541 Parallel, Distributed, Grid, and Cloud Computing (3 credits)  
This course introduces the concepts, models, implementations, and applications of parallel and distributed systems.  Topics include parallel and distributed architectures, grid and cloud computing frameworks; programming models and algorithmic techniques; performance analysis and evaluation; and applications of parallel and distributed computing.  The course provides students experience in programming using different parallel/distributed programming paradigms and the opportunity to examine a course topic in depth through a significant term project.
Prerequisites: 56:198:501 or equivalent
Term: Spring

56:198:546 Computer Networks (3 credits)
Introduction to computer communication networks, including physical and architectural components, communication protocols, switching, network routing, congestion control, and flow control. End-to-end transport services, network security, and privacy. Networking software and applications. Network installation, testing, and maintenance.
Prerequisite: 50:198:231 or equivalent.
Term:Spring

56:198:551 Database Systems (3 credits) 
Relational database theory and practice, including database design. Database concepts, relational algebra, data integrity, query languages, and views. Introduction to object-oriented databases. Application project with a practical database management system.
Prerequisites: 56:198:500 or equivalent 
Term: Fall

56:198:556 Computer Graphics (3 credits) 
Graphics systems and imaging principles, graphics programming using packages like OpenGL, input devices and interactive techniques, animation techniques, geometric transformations and modeling in two and three dimensions, viewing in 2D and 3D, lighting and shading, fundamental graphics algorithms (such as clipping, hidden surface removal, etc.)
Prerequisites: 56:198:500 or equivalent 
Term: Fall

56:198:561 Optimization Methods (3 credits) 
This course introduces various methods based on linear programming to solve discrete optimization problems. The topics covered in the course will include introduction to linear programming (LP), network flows, and application of LP-based techniques to solve various optimization problems. 
Prerequisites: None 
Term: Fall

56:198:562 Big Data Algorithms (3 credits) 
Study of algorithmic techniques and modeling frameworks that facilitate the analysis of massively large amounts of data. Introduction to information retrieval, streaming algorithms and analysis of web searches and crawls.
Prerequisites: 56:198:501 or equivalent 
Term: Fall

56:198:567 Applied Probability (3 credits)
An introduction to probability theory and the modeling and analysis of probabilistic systems with emphasis on applications in computer science, engineering, and data science. Probabilistic models, conditional probability. Discrete and continuous random variables. Expectation and conditional expectation. Limit Theorems. Bernoulli and Poisson processes. Markov chains. Bayesian estimation and hypothesis testing. Elements of statistical inference.
Prerequisites: 50:640:122
Term: Not offered in 2015/2016

56:198:573 Computational Geometry (3 credits) 
Algorithms and data structures for geometric problems that arise in various applications such as computer graphics, CAD/CAM, robotics, and geographical information systems (GIS). Topics include: point location, range searching, intersection, decomposition of polygons, convex hulls, Voronoi diagrams, and line arrangements.
Prerequisites: 56:198:501 or equivalent 
Term: Spring

56:198:575 Crytography and Computer Security(3 credits)
Secret-key cryptography, public-key cryptography, key agreement, secret sharing, digital signatures, message and user authentication, one-way functions, key management; attacks; practical applications to computer and communications security.
Prerequisites: 50:198:113 or equivalent; and 50:640:237 or 50:198:171 or equivalent.
Term:Fall

56:198:576 Theory of Computation (3 credits)
Formal languages, automata and computability; regular languages and finite-state automata; context-free grammars and languages; pushdown automata; the Church-Turing theses; Turing machines; decidability and undecidability. 
Prerequisites: 56:198:501 or equivalent 
Term: Spring

56:198:581 Numerical Methods (3 credits) 
Computational techniques for solving scientific problems:  Precision, IEEE floating point representation, interpolation, root finding, numerical integration, numerical differentiation, approximation of functions, functions minimization, numerical linear algebra, numerical solutions of ordinary differential equations.
Prerequisites: 56:198:500 or equivalent 
Term: Fall

56:198:697 Computer Science Internship (3 credits)
The practical application of computer science knowledge and skills through an approved internship in a sponsoring organization. Arrangements for the internship must be agreed upon by the sponsoring organization and approved by the department before the beginning of the semester. Students should consult the department for detailed instructions before registering for this course.
Prerequisite: Approval by department