After introducing the key concepts behind the concepts of algorithms and programs, we study the basic elements of imperative programming: variable assignment and control structures (sequence, selection, and iteration). We pay attention to the formal reasoning underlying programming in particular for the construction of loops (the invariant method) and the creation of computation by iteration. We study the use sub-programs including parameter passing and emphasize their use for structuring a program. We study the use of tables and data structures and introduce some key notions of algorithmics. The programming language used in this course is Python, although the concepts discussed and the methodology to be acquired are independent of a particular language.