Using the Java programming language, the course emphasizes both object-oriented and imperative problem-solving and design – proven approaches for developing solutions that can scale up from small, simple problems to large, complex problems. Together we’ll investigate fundamental topics of computer science, such as problem-solving, design strategies and methodologies, organization of data (data structures), approaches to processing data (algorithms), analysis of potential solutions, and the ethical and social implications of computing.