Understanding Programming
Introduction to problem solving using modern C++
An introductory course teaching basics of programming to students without prior experience.
This describes version 0 of this course, as held during winter semester 2022/2023.
If you participated and would like to look at the course material again, it can be found here.
If you received a certificate and would like to verify its authenticity, head over here.
You can find a list of currently running and offered courses here.
Description
Everybody [...] should learn how to program a computer, should learn a computer language, because it teaches you how to think
Computers - as well as the programs controlling them - are ubiquitous in modern society. Basically every profession utilizes them in some way and everyday life is increasingly shaped and controlled by various "smart" devices like phones, tvs and personal assistants.
Further, their influence permeates academia, as computer code has proven to be an indispensable tool for scientific inquiry and pretty much every discipline.
Physicists simulate complex processes or evaluate large amounts of collected data, physicians perform computer aided diagnosis to prescribe medications developed with algorithmic assistance and even social scientists rely on applications for statistical analysis whilst using websites and apps to conduct surveys and experiments on otherwise impossible scale.
Despite the fact that even a rudimentary understanding of their workings - of their language - would aid tremendously in the purposeful application of computer systems, programming still remains a mystery to many. An impenetrable, arcane activity reserved for experts.
It doesn't have to remain that way! Obviously not everyone has to become a professional software developer, just like most of us do not earn a living as professional authors or mathematicians. Nonetheless programming shares an important commonality with reading, writing and arithmetic in it being one of the essential pillars modern life is built upon. A basic understanding of its principles can help us better understand society, navigate it confidently and express ourselves creatively.
This practical use would already be more then enough reason to acquire some skills in the area but even more important is the way of thinking doing so can teach, which offers wide ranging benefits for *all* walks of life.
At its core, programming is structured problem solving. It is the ability to analyze complex situations and processes, to abstract and to decompose big, unwieldy tasks into smaller, manageable components. It is the ability to communicate clearly - not only with computers but also with other humans, to unambiguously express intent and to repeatedly check ones own beliefs and assumptions.
Much more than a means to control it, programming is a tool for understanding the world.
For that reason, the aim of this course is to teach the fundamentals and underlying principles of computer programming to everyone - but most importantly to those without a background in computer science or other relevant experience.
By learning the basics of the well established multi-paradigm language C++, you not only get to know one of the most prevalent and versatile technologies, but gain transferable knowledge and skills, allowing you to easily acquire and understand a broad range of languages.
To familiarize you with the topic and facilitate an accessible but nonetheless thorough introduction, we begin with a number of simple examples accompanied by detailed explanations. Once you become confident enough, you'll go on to develop several small - but useful and complete - utilities and even simple games to practice and consolidate what you have learned
Regardless of which background you came from, at the end of this course you will have acquired the solid foundation needed to not only develop your own projects, but to continue your journey of learning on your own. You can expand and build on the material however you wish and take your advancements into the direction *you* are most interested in.
Target audience & Prerequisites
This course was aimed at students of any field of study. As such, there were no prerequisites beyond basic proficiency with keyboard & mouse.
Topics covered
- Compilation, compilation units & program structure
- Statements & Expressions
- Types & Variables
- File & Console input and output
- Conditionals & Loops
- Scope & Lifetime
- std::array, std::vector & std::string
- Functions & Recursion
- User defined types: enum class, struct, class
- Values & References
- Memberfunctions, Access Specifiers & Invariants
- Operator overloading