This course builds on the programming skills developed in the prerequisite course and moves the focus towards a wider software ecosystem in order to solve more complex data science tasks. Students learn and apply foundational principles of program organization including classes and objects, interfaces, inheritance, abstraction, and decoupling. In addition, important command-line skills are developed for data gathering and cleaning, as well as library and software acquisition and use. These principles are utilized through high-level programming in Python to analyze and manipulate real-world data sets.