The goal of this chapter is to apply all the building blocks we learned in the first chapter and make them concrete through practice. By the end of the chapter you will learn real-world skills such as how to interact with other people's software and basic principles for designing and building your own programs.