- Context: Self-study, expansion of my general technological knowledge
- Time: Started in February 2024
- Reference external link: https://cs50.harvard.edu/x/2024/
- My tools (so far): Scratch, Visual Studio Code
- Kontext: Selbststudium zur Erweiterung meines technologischen Allgemeinwissens.
- Zeit: Gestartet im Februar 2024
- Externer Referenzlink: https://cs50.harvard.edu/x/2024/
- Meine Werkzeuge (bisher): Scratch, Visual Studio Code
Week 0: Scratch
The Lecture | Die Vorlesung
The online lecture with David J. Malan is as inspiring as it is exciting and I personally enjoy getting to know new concepts and finally understanding and exploring old, fleetingly familiar things in greater depth.
A basic understanding of the binary system according to which computers work and the logic of how content is translated into numbers in an abstract way are just as fascinating as looking at everyday tasks – such as searching in a telephone directory – in the form of simple algorithms.
Die Online-Vorlesung mit David J. Malan ist ebenso inspirierend wie spannend und ich persönlich genieße es, neue Konzepte kennenzulernen und alte, flüchtig bekannte Dinge endlich zu verstehen und tiefer zu erforschen.
Ein Grundverständnis für das Binärsystem, nach dem Computer arbeiten, und die Logik, wie Inhalte auf abstrakte Weise in Zahlen übersetzt werden, sind ebenso faszinierend wie die Betrachtung alltäglicher Aufgaben – wie die Suche im Telefonbuch – in Form einfacher Algorithmen.
The Problem Set | Die Aufgabenstellung
“What I like most about the project - and the low-threshold programming approach of Scratch - is the combination of design and creation and building something that really works.”
The assignment, quite simply, is to implement in Scratch, at scratch.mit.edu, any project of choice, be it an interactive story, game, animation, or anything else (following only a few requirements).
Die Aufgabe besteht ganz einfach darin, auf scratch.mit.edu ein beliebiges Projekt in Scratch zu implementieren, sei es eine interaktive Geschichte, ein Spiel, eine Animation oder etwas anderes (unter Einhaltung einiger weniger Vorgaben).
Why Tangram? | Warum Tangram?
I love Tangram and its simplicity to create endless possibilities with just seven geometric shapes – either according to a given scheme or through free creative exploration. I wanted to create a digital version that is as simple as it is aesthetically pleasing.
Ich liebe Tangram und seine Einfachheit, mit nur sieben geometrischen Formen endlose Möglichkeiten zu schaffen – entweder nach einem vorgegebenen Schema oder durch freies kreatives Ausprobieren. Ich wollte eine digitale Version schaffen, die ebenso einfach wie ästhetisch ansprechend ist.
Process and Challenges | Prozess und Herausforderungen
Anticipated: I used the chatbot Quack (CS50.ai) for questions about Scratch, about the logic of my code and for debugging when nothing worked. I was also helped by numerous YouTube tutorials from, amusingly enough, many creators who could be my children in terms of age.
Vorweggenommen: Ich nutzte den Chatbot Quack (CS50.ai) für Fragen zu Scratch, zur Logik meines Codes und zur Fehlersuche, wenn nichts funktionierte. Außerdem halfen mir zahlreiche YouTube-Tutorials von – amüsanterweise – vielen Autoren, die vom Alter her meine Kinder sein könnten.
The first challenge was to program the Tangram pieces so that each one works in the same way, but is activated by clicking or dragging so that it can then rotate on itself – and most importantly, it became a bit complicated to deactivate all the others.
When building the code blocks, the order was important, so that one part is activated, then sends “deactivate” to all – including itself – and then reactivates itself.
Die erste Herausforderung bestand darin, die Tangramteile so zu programmieren, dass jedes Teil auf die gleiche Weise funktioniert, aber durch Klicken oder Ziehen aktiviert wird, so dass es sich dann um sich selbst drehen kann – und vor allem wurde es ein bisschen kompliziert, alle anderen zu deaktivieren.
Beim Aufbau der Codeblöcke war die Reihenfolge wichtig, so dass ein Teil aktiviert wird, dann “Deaktivieren” an alle – auch an sich selbst – sendet und sich dann selbst wieder aktiviert.
Once the first “knot had been untied”, the next step was to expand the functions of the parts and transfer them to all seven other parts. As copy-and-paste proved to be inefficient, the better choice was to keep the code blocks centralized and work with clones of the same part.
Nachdem der erste “Knoten gelöst” worden war, bestand der nächste Schritt darin, die Funktionen der Teile zu erweitern und sie auf alle sieben anderen Teile zu übertragen. Da sich das Kopieren und Einfügen als ineffizient erwies, war es die bessere Wahl, die Codeblöcke zentralisiert zu halten und mit Klonen desselben Teils zu arbeiten.
One aspect that had to be understood is the fact that everything, be it of a spatial, temporal or material nature, has to be defined and controlled – in contrast to our physical world, where most of the rules are already given by nature. This made the temporal sequence of the program (start image, start command, actual game) challenging at first and, above all, brought the dimension of time into play in a new way.
Ein Aspekt, den es zu verstehen galt, ist die Tatsache, dass alles, sei es räumlicher, zeitlicher oder materieller Natur, definiert und kontrolliert werden muss – im Gegensatz zu unserer physischen Welt, wo die meisten Regeln bereits von der Natur vorgegeben sind. Das machte die zeitliche Abfolge des Programms (Startbild, Startbefehl, eigentliches Spiel) zunächst anspruchsvoll und brachte vor allem die Dimension der Zeit auf neue Weise ins Spiel.
Result | Ergebnis
This first version of my digital Tangram consists of three main screens – a preview image, a start image and the actual playing field. The playing field can be changed between four motifs and a blank. Each time a new game starts, the Tangram pieces shuffle and remain in a random position.
Diese erste Version meines digitalen Tangrams besteht aus drei Hauptbildschirmen – einem Vorschaubild, einem Startbild und dem eigentlichen Spielfeld. Das Spielfeld kann zwischen vier Motiven und einem leeren Feld gewechselt werden. Jedes Mal, wenn ein neues Spiel beginnt, werden die Tangramteile neu gemischt und bleiben in einer zufälligen Position.
Summary | Resümee
Excitement, lots of fun and a steep, challenging learning curve. What I like most about the project – and the low-threshold programming approach of Scratch – is the combination of design and creation and building something that really works.
What I would like to improve would be that when the game is successful – the laying of a motif – the user receives feedback that goes beyond the purely visual recognition of the figure, or that everything runs and looks a little “smoother”.
Aufregung, viel Spaß und eine steile, herausfordernde Lernkurve. Was mir an dem Projekt – und dem niederschwelligen Programmieransatz von Scratch – am besten gefällt, ist die Kombination von Design und Kreation und etwas zu bauen, das wirklich funktioniert.
Was ich gerne verbessern würde, wäre, dass der Nutzer bei erfolgreichem Spiel – dem Legen eines Motivs – eine Rückmeldung erhält, die über das rein visuelle Erkennen der Figur hinausgeht, oder dass alles ein bisschen “flüssiger” läuft und aussieht.
(Also, don’t forget to “See
Inside” to view the code.)
Week 1: C
The Lecture | Die Vorlesung
As a transition from Scratch and its prefabricated code blocks to C with more open code structures, various examples are compared with each other in which the same basic concepts of e.g. functions, conditions or Boolean expressions always play a role.
The different aspects of language also become clear, as there are different ways of expressing the same or similar things depending on the context and objective.
Als Übergang von Scratch und seinen vorgefertigten Codeblöcken zu C mit offeneren Codestrukturen werden verschiedene Beispiele miteinander verglichen, in denen die gleichen Grundkonzepte von z.B. Funktionen, Bedingungen oder booleschen Ausdrücken eine Rolle spielen.
Dabei werden auch die unterschiedlichen Aspekte der Sprache deutlich, da es je nach Kontext und Zielsetzung verschiedene Möglichkeiten gibt, gleiche oder ähnliche Dinge auszudrücken.
For me, the tool of the flowchart takes on an extended meaning here. On the one hand, it forms a bridge in communication between different stakeholders, such as developers and designers, and on the other hand it helps us to abstract things to their basic structure, as here in the example to illustrate an If/Else function.
Für mich bekommt das Werkzeug des Flussdiagramms hier eine erweiterte Bedeutung. Einerseits bildet es eine Brücke in der Kommunikation zwischen verschiedenen Akteuren, wie Entwicklern und Designern, und andererseits hilft es uns, Dinge auf ihre Grundstruktur zu abstrahieren, wie hier im Beispiel zur Veranschaulichung einer If/Else-Funktion.
The Problem Sets | Die Aufgabenstellungen
“Studying programming leaves me, as a designer, with mixed feelings - on the one hand it intimidates me and my will to learn programming in its application remains limited, on the other hand it is incredibly motivating and exciting for me to understand the basics.”
1. Hello, It's Me
My first attempt to write code and control it via the command line was a bumpy road, during which I consulted the previous teaching material several times to find the last comma in order to avoid the last error messages.
What also impresses me again is the help integrated into the VS Code interface by CS50, which makes remote learning possible in an educationally valuable way.
Mein erster Versuch, Code zu schreiben und von der Kommandozeile aus zu steuern, war ein holpriger Weg, bei dem ich mehrmals die vorherigen Tutorials konsultierte, um auch das kleinste Komma zu finden und die letzten Fehlermeldungen zu vermeiden.
Was mich auch wieder beeindruckt, ist die von CS50 in die VS-Code-Oberfläche integrierte Hilfe, die das Fernstudium auf pädagogisch wertvolle Weise ermöglicht.
2. Mario
In order to write a simple program whose output is # symbols that imitate a staircase/pyramid, I used the common concept of describing the functional sequence in “pseudocode”, i.e. in words and mathematical terms, and then translating it into code in C .
The idea of “pseudocode” reminds me of, for example, sketching in design to quickly and easily describe variants before going into the details of the implementation.
Um ein einfaches Programm zu schreiben, dessen Ausgabe # Symbole sind, die eine Treppe/Pyramide imitieren, habe ich das gängige Konzept verwendet, den Funktionsablauf in “Pseudocode”, also in Worten und mathematischen Begriffen, zu beschreiben und ihn dann in Code in C zu übersetzen.
Die Idee des “Pseudocodes” erinnert mich beispielsweise an das Skizzieren im Design, um Varianten schnell und einfach zu beschreiben, bevor ich auf die Details der Implementierung eingehe.
3. Amount of Change
My workflow for this, slightly more complex task – which involves determining the minimum number of coins required to issue change of less than one dollar – was again the description in “Pseudocode”, which was then converted into C by Chat-GPT. Afterwards, Chat-GPT also helped me to understand individual code snippets so that I could then adapt them myself if necessary.
Mein Workflow für diese etwas komplexere Aufgabe – bei der es darum geht, die Mindestanzahl an Münzen zu bestimmen, die für die Ausgabe von Wechselgeld von unter einem Dollar erforderlich ist – war wiederum die Beschreibung im “Pseudocode”, der dann von Chat-GPT in C konvertiert wurde. Anschließend hat mir ebenso Chat-GPT dabei geholfen, einzelne Codeschnipsel zu verstehen, um diese dann bei Bedarf selbst anpassen zu können.
Summary | Resümee [week 1]
For me as a designer, it’s exciting to understand new concepts and to see how programming creates analogies to concepts that are already common to me.
As already mentioned, I love the process of translating “pseudocode” into code on the one hand and comments on the other, which, among other form rules, make the code more readable. Methods that can certainly be applied to the design process.
Für mich als Designer ist es spannend, neue Konzepte zu verstehen und zu sehen, wie die Programmierung Analogien zu Konzepten schafft, die mir bereits vertraut sind.
Wie bereits erwähnt, gefällt mir der Prozess der Übersetzung von „Pseudocode“ einerseits in Code und andererseits in Kommentare, die neben anderen Formregeln den Code besser lesbar machen. Methoden, die sich sicher auch auf den Designprozess anwenden lassen.
Week 2-5: Arrays, Algorithms, Memory, Data Structures
“As a designer, I only deal with the topics in weeks 2 and 5 of the course theoretically. From my extensive notes, I only pass on the most interesting findings for me and only deal with the very programming-heavy problems superficially.”
Levels of abstraction | Abstraktionsstufen
The various degrees of abstraction of code language – from zeros and ones to assembly and source code – remind me of the structure of things in our physical world, from atoms to materials from which we form products, which is called compiling in computer science.
The creation of a program in source code can in turn be illustrated with the production process of a factory, existing tools (functions) from the internal inventory or from external libraries are included at the beginning, from which the program is then assembled.
Die verschiedenen Abstraktionsgrade der Code-Sprache – von Nullen und Einsen bis hin zu Assembly und Quellcode – erinnern mich an die Struktur der Dinge in unserer physischen Welt, von Atomen bis hin zu Materialien, aus denen wir Produkte formen, was in der Informatik als Kompilieren bezeichnet wird.
Die Erstellung eines Programms im Quellcode kann wiederum mit dem Produktionsprozess einer Fabrik veranschaulicht werden, wobei zu Beginn vorhandene Werkzeuge (Funktionen) aus dem internen Bestand oder aus externen Bibliotheken eingebunden werden, aus denen dann das Programm zusammengesetzt wird.
Debugging | Fehlersuche
At first somewhat surprising, but then obvious, is that in a rather non-visual domain of programming, error detection happens by visualizing the executed processes. The process vaguely reminds me of the testing of hydraulic systems in industry, or even medicine, where any irregularities can be made visible by contrast fluid.
In addition to special debugging programs that show every single step of the program – a process that normally runs invisibly “under the hood”, there is the proverbial rubber-duck debugging, the free description of the problem to an object, AI or human, which often helps with reflection and error detection.
Zunächst etwas überraschend, dann aber offensichtlich, ist, dass in einer eher nicht visuellen Domäne der Programmierung die Fehlererkennung durch Visualisierung der ausgeführten Prozesse erfolgt. Das Verfahren erinnert mich vage an die Prüfung von Hydrauliksystemen in der Industrie oder auch in der Medizin, wo Unregelmäßigkeiten durch Kontrastflüssigkeit sichtbar gemacht werden können.
Neben speziellen Debugging-Programmen, die jeden einzelnen Schritt des Programms anzeigen – ein Prozess, der normalerweise unsichtbar “unter der Haube” abläuft – gibt es das sprichwörtliche “Rubber-Duck-Debugging”, die freie Beschreibung des Problems an ein Objekt, eine KI oder einen Menschen, was oft bei der Reflexion und Fehlererkennung hilft.
Algorithms | Algorythmus
We learned about different basic algorithms that can be used to perform tasks with different levels of efficiency, such as sorting by the size of different values.
The so-called binary search, which breaks down the large problem into many small and therefore easily manageable ones, usually performed best.
Wir haben verschiedene grundlegende Algorithmen kennengelernt, mit denen sich Aufgaben mit unterschiedlichem Effizienzgrad lösen lassen, z. B. das Sortieren nach der Größe verschiedener Werte.
Die so genannte binäre Suche, die das große Problem in viele kleine und damit leicht zu bewältigende Probleme zerlegt, hat in der Regel am besten funktioniert.
Visuals | Visuelles
Programming, like all sciences, is an abstracted way of describing our world and using its principles. Images are regularly used to illustrate these principles in CS50 lectures, such as here to describe the stack and the queue.
Wie alle Wissenschaften ist auch das Programmieren eine abstrahierte Art, unsere Welt zu beschreiben und ihre Prinzipien zu nutzen. Zur Veranschaulichung dieser Prinzipien werden in den CS50-Vorlesungen regelmäßig Bilder verwendet, wie hier zur Beschreibung des Stacks und der Warteschlange.
Compromises | Kompromisse
As with product design, a lot of programming seems to be about making the most efficient use of resources such as time and storage space. The perfect solution for a single problem may not solve another. So here too, you have to weigh up which resources you use to build a system as modularly as possible, or be satisfied with leaner but less flexible solutions. It is a compromise and one solution seems to be the standardization of components, similar to standardized components and suitable tools for industrial production.
Wie beim Produktdesign scheint es auch bei der Programmierung um die effizienteste Nutzung von Ressourcen wie Zeit und Speicherplatz zu gehen. Die perfekte Lösung für ein einzelnes Problem löst ein anderes möglicherweise nicht. Auch hier muss man also abwägen, welche Ressourcen man einsetzt, um ein System so modular wie möglich aufzubauen, oder sich mit schlankeren, aber weniger flexiblen Lösungen zufrieden geben. Es ist ein Kompromiss, und eine Lösung scheint die Standardisierung von Komponenten zu sein, ähnlich wie bei standardisierten Komponenten und geeigneten Werkzeugen für die industrielle Produktion oder in einem Baumarkt.