Programming has changed at a fast pace in the last 40 years and nowadays to the point that there are many layers of abstraction that need to be learned before being able to approach even a simple programming project. Actually writing a program or library in a specific language is but a (increasingly smaller) portion of the art and craft of programming, yet still most official or extraofficial courses focus on this small, isolated part, ignoring the rest.
In this talk we will try to present an alternative view on how to learn programming, based on the other end, how to go about creating introductory (but not only) courses to programming, tutoring and evaluating them. This approach is going to be based on several pillars: * Concepts and patterns over syntax. * Many over one (many languages over one language, many paradigms over one paradigm) * Practical over theoretical. * MVP over "exercises", "written exams" and "problems". * Understand and overcome errors over avoid errors. * Evaluation-as-code review over evaluation-as-grading. * DevOps over compile-and-forget.
Eventually, the idea is to create more adaptive, engaged professionals that go beyond compartimentalized, isolated conceptions of programming.
This has been put in practice in subjcts such as Could Computing https://jj.github.com/CC together with a flipped learning / project based approach, with a certain degree of success. So I'd like to share this experience.
|Level of Difficulty||Beginner|