Courses & Syllabi

CHEM 280: Foundations of Programming and Software Engineering for Molecular Sciences This course provides an overview of topics relevant to programming and creating software projects. The course will be taught in collaboration with members of the Molecular Sciences Software Institute (MolSII). Students will learn basic syntax, use cases, and ecosystems for Python and C++. Students will become familiar with tools and practices commonly used in software development such as version control, documentation, and testing. Central to this course is a hands-on molecular simulation project where students work in groups to create a software package using concepts taught in the course.

View Syllabus

2 units
CHEM 274A: Programming Languages for Molecular Sciences: Python and C++ This course provides in-depth coverage of programming concepts and techniques required for scientific computing, data science, and high-performance computing using C++ and Python. The course will compare and contrast the functionalities of the two languages. Topics include classes, overloading, data abstraction, information hiding, encapsulation, file processing, exceptions, and low-level language features. Numerous exercises based on molecular science problems will provide the hands-on experience needed to learn these languages. This course serves as a prerequisite to later MSSE courses: Data Science, Machine Learning Algorithms, Software Engineering for Scientific Computing, Numerical Algorithms Applied to Computational Quantum Chemistry, and Applications of Parallel Computers.

View Syllabus

3 units
CHEM 274B: Software Engineering Fundamentals for Molecular Sciences  This course will advance students' understanding of fundamental knowledge and techniques for developing complex software. Students will gain an in-depth view of computer system architecture as well as abstraction techniques as means to manage program complexity. Students will collaboratively develop a software engineering package, thus gaining experience in
all aspects of the software development process from the feasibility study to the final delivery of the product. This course is a prerequisite to most MSSE courses.

View Syllabus

3 units
DATA 200S: Principles and Techniques of Data Science Explores the data science lifecycle: question formulation, data collection and cleaning, exploratory, analysis, visualization, statistical inference, prediction, and decision-making. Focuses on quantitative critical thinking and key principles and techniques: languages for transforming, querying, and analyzing data; algorithms for machine learning methods: regression, classification, and clustering; principles of informative visualization; measurement error and prediction; and techniques for scalable data processing. Research term project.

View Syllabus

3 units
CHEM 278: Ethics in Molecular Science and Software Engineering  This course will expose students to applied ethics in professional ethics, information technology, intellectual property, and corporate ethics.

View Syllabus

1 unit
CHEM 277B: Machine Learning Algorithms An introduction to mathematical optimization and statistics and "nonalgorithmic" computation using machine learning. Machine learning prerequisites are introduced including local and global optimization, various statistical and clustering models, and early metaheuristic methods such as genetic algorithms and artificial neural networks. Building on this foundation, current machine learning techniques are covered including Deep Learning networks, Convolutional neural networks, Recurrent and long short-term memory (LSTM) networks, and support vector machines and Gaussian ridge regression. Various case studies in applying optimization, statistical modeling, and machine learning methods as classification and regression tasks in different scientific software areas.

View Syllabus

3 units
CHEM 281:  Software Engineering for Scientific Computing  The course covers computer architecture and software features that have the greatest impact on performance. It addresses debugging and performance tuning, detecting memory and stack overwrites, malloc corruption, hotspot, paging, and cache misses. A toolbox with common algorithms: sorting, searching, hashing, trees, and graph traversing is followed by common patterns used in object-oriented design. It describes programming paradigms, dynamic libraries, distributed architectures, and services. Lectures on linear algebra and performance libraries are provided as background for future courses. HPC paradigms and GPU programming are introduced. Software packaging, extensibility, and interactivity are followed by team development, testing, and hardening.

View Syllabus

3 units
CHEM 279: Numerical Algorithms applied to Computational Quantum Chemistry  An introduction to numerical algorithms, their application to computational quantum chemistry, and best practices for software implementation, and reuse. This course covers a toolbox of useful algorithms from applied mathematics that are used in physical simulations. They are illustrated via computer implementation of density functional theory for modeling chemical reaction mechanisms from quantum mechanics. Topics covered include local optimization, numerical derivatives, and numerical integration, dense linear algebra, the symmetric eigenvalue problem, the singular value decomposition, and the fast Fourier transform. More specialized topics as time permits. Students are guided through principles of procedural and object-oriented programming in C++, as well as the usage of efficient numerical libraries.

View Syllabus

3 units
COMPSCI C267: Applications of Parallel Computers Models for parallel programming. Overview of parallelism in scientific applications and study of parallel algorithms for linear algebra, particles, meshes, sorting, FFT, graphs, machine learning, etc. Survey of parallel machines and machine structures. Programming shared- and distributed-memory parallel computers, GPUs, and cloud platforms. Parallel programming languages, compilers, libraries, and toolboxes. Data partitioning techniques. Techniques for synchronization and load balancing. Detailed study and algorithm/program development of medium-sized applications.

View Syllabus

3 units
CHEM 283: MSSE Capstone Project The main course objective is to provide MSSE students with a multifaceted experience managing a project of their choice involving the application and development of high-end computational software for Computational Sciences with an emphasis on Molecular Sciences. Students will exercise their leadership and team-building skills through individual class assignments, peer reviews, and a final Capstone project report. This course is designed to provide students with tools and practices for designing project deliverables, planning and meeting project deadlines, giving presentations, writing technical communications, and providing constructive feedback to peers. They will be supervised to complete building a professional MSSE software portfolio, which meets the best software engineering practices.

View Syllabus

3 units
CHEM 282: Leadership Bootcamp This boot camp for the Master of Molecular Science and Software Engineering program is a two-week intensive course that introduces program participants to the leadership, management, and entrepreneurial skills necessary in today’s professional environment. Using the capstone project as a baseline, this course aims to provide program participants an understanding of the key aspects of management and leadership disciplines; team and organization dynamics; leading and participating in cross-functional teams; engineering economic, finance, and accounting concepts; effective communication skills, and project management.

View Syllabus

2 units