Simulation and modeling has become an integral part of the process of designing and optimizing materials for the most diverse applications. Truly predictive simulations, that can estimate the properties of materials before they have ever been synthesized, require atomistic resolution. This course provides an introduction to some of the techniques that underlie atomic-scale simulations of materials. With a strong hands-on component, based on interactive Jupyter notebooks, we will revisit, and see in a new light, several basic concepts on the nanometer-scale description of matter, and see a number of different modelling techniques in action, from molecular dynamics to atomic-scale machine learning.