When Richard Feynman first introduced the concept of quantum computers it was posed for the purpose of simulating nature. Today quantum simulation remains one of the likely first applications to benefit from quantum computers. This course introduces key concepts required for quantum simulation, and builds tools for performing quantum simulation using state-of-the-art architectures. We introduce classical schemes, like tensor networks, and machine learning approaches, that can be used for these simulations on CPU/GPU architecture. We survey current literature to review and implement methods of quantum simulation and use them to solve and study example problems.