The purpose of the CS160 course is to introduce students to fundamental concepts in computer science. Concepts from mathematics (the "theory" component), programming and architecture will be interleaved to show how software and hardware complement each other. Theory will provide the basis for understanding the software and hardware design. The course will adopt a problem solving focus with an integrated view of the computer. For programming, the course covers the basic Java syntax and language features, compilation, interpretation, execution, primitive data types, class and object usage, parameter passing, flow of control constructs and arrays. For theory, the course will cover sets, functions, logic, simple proof and invariants. Architecture concepts will include simple computer models, data representations and memory models.See syllabus for instructor and teaching assistant information.