So far in this book we’ve worked only with the core Fortran data types: integer, real, complex, logical, and character. Although even with just these data types we’ve been able to do quite a few useful things, such as analyze time series of stock prices or buoy measurements, or write a parallel tsunami simulator, we’re still somewhat limited in what we can do. This becomes more obvious as we encounter more complex problems with abstract and unstructured data that are ubiquitous in real-world applications. So far, all of the examples we’ve worked on have been structured and thus easy to tackle with the core numeric types and arrays alone. However, this is just a small subset of problems, and real-world applications and data will require more complex and abstract data structures in our code. Such applications include machine learning, web and mobile apps, and more sophisticated physics simulations.