|CHEM 280: Foundations of Programming and Software Engineering||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 (MolSSI). 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.||2 units|
|CHEM 275A: Introduction to Programming Languages – C++ and Python||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, inheritance, polymorphism, file
processing, templates, exceptions, container classes, 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 in Data Science
and Machine Learning and Deep Learning, and to Software Engineering for Scientific Computing,
Computational Chemistry and Materials Science, and Parallel Computing.
|CHEM 275B : Introduction to Software Engineering Best Practices||This course will advance students’ understanding of the different steps involved in software
design. Students will acquire hands-on experience in practical problems such as specifying,
designing, building, testing, and delivering reliable software systems for scientific computing.
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 MSSE courses in Software Engineering for Scientific
Computing, Computational Chemistry and Materials Science, and Parallel Computing.
|CS 200: 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.||4 units|
|CHEM W207: 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.
|CS W208: 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.
|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 tunning, detecting memory and stack overwrites, malloc corruption, hotspot, paging, cache misses. A toolbox with common algorithms: sorting, searching, hashing, trees, 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 is followed by team development, testing and hardening.||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 usage of efficient numerical libraries.||3 units|
|CS W267: Applications of Parallel Computers||Parallel programming, from laptops to supercomputers to the cloud. Goals include writing programs that run fast while minimizing programming effort. Parallel architectures and programming languages and models, including shared memory (eg OpenMP on your multicore laptop), distributed memory (MPI and UPC on a supercomputer), GPUs (CUDA and OpenCL), and cloud (MapReduce, Hadoop and Spark). Parallel algorithms and software tools for common computations (eg dense and sparse linear algebra, graphs, structured grids). Tools for load balancing, performance analysis, debugging. How high level applications are built (eg climate modeling). On-line lectures and office hours.||3 units|