This course develops skills for computational research with a focus on stochastic approaches, emphasizing implementation and examples. Stochastic methods make it feasible to tackle very diverse problems when the solution space is too large to explore systematically, or when microscopic rules are known, but not the macroscopic behavior of a complex system. Methods are illustrated with examples from a wide variety of fields, like biology, finance, and physics. We tackle Bayesian methods of data analysis as well as various stochastic optimization methods. Topics include stochastic optimization such as stochastic gradient descent (SGD) and simulated annealing, Bayesian data analysis, Markov chain Monte Carlo (MCMC), and variational analysis. This course is broadly about learning models from data. To do this, we typically want to solve an optimization problem. Some problems might have many optima, and we will want to explore them all. It is not enough to find an optimum. Bayesian statistics gives us a simple and principled way to find the distribution of predictions consistent with the data. This allows for an intuitive and better way to test hypotheses than the confidence intervals and p-values used in traditional statistics.