Solving any complex problem usually involves breaking it down into smaller, more manageable parts, which can then be separately understood and solved. This process of decomposition is key in computer science, where data, processes or problems are tackled more efficiently in parts. This sophomore course of our Principles stream focuses Code Campers on using functions as programming tools to implement decomposition in their Python code. They will put these new skills into practice by combining them with the concepts learnt in Principles 1 through building larger programs that include creating art, animations and games. After this course, students will appreciate functions as tools which allow programmers to enhance the readability and reusability of their code. In the process, they will have developed two key skills critical for programming – decomposition, as well as abstraction, the reduction of unnecessary detail in complex problems in order to extract relevant concepts for understanding and solving them.