Introduces essential computer science and computer programming concepts and principles, with application to problems relevant to all Engineering disciplines. Presents the context in which computational problem solving is done, including historical and elementary technical aspects. Emphasizes fundamental programming constructs, including data and data types, variables and expressions, conditional branching, repetition, functions, recursion, as well as data structures such as strings, lists, and dictionaries. Presents searching and sorting algorithms as an introduction to concepts in computer science. Emphasis throughout on the practice of basic skills needed for writing robust software, including formal design processes and documentation, internal code documentation, testing, and debugging.