This course is an introduction to computer science for students without prior programming experience. It explores problem-solving and data analysis using Python, a programming language with a simple syntax and a powerful set of libraries. This course covers basic data types and collections (lists, dictionaries, tuples, and sets), control flow, recursion, information hiding, and encapsulation using classes and objects, and introduces the analysis of program performance. The course presents an integrated view of computer systems, from switching circuits up through compilers, and examines theoretical and practical limitations related to unsolvable and intractable computational problems. Other topics include the social and ethical dilemmas presented by such issues as software unreliability, algorithmic bias, and invasions of privacy.