In part 1, we learned about using built-in data models to represent real-life problems in our application. Converting real-life problems to proper abstract data models, however, is only the first step in building our application. This data is like raw material, and we must use appropriate equipment to process this raw material, following a specific protocol to make the desired product. In our application, the functions serve as the equipment, and the algorithms of the functions define the protocol. As you can imagine, we can’t process any raw material (the data) if we don’t have the necessary equipment and protocol (the functions and their implementation details). In this part, you’ll learn various techniques for writing functions—the driving forces behind any application’s data flow.