Week 0: Scratch
The Lecture
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.
The Problem Set
“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.”
Why 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.
Process and Challenges
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.
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.
Result
Summary
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”.
Week 1: C
The Lecture
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.
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.
The Problem Sets
“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.
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.
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.
Summary [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.
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
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.
Debugging
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.
Algorithms
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.
Visuals
Compromises
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.
Week 6-7: Python, AI, SQL
C and Python
I don’t want to talk so much about the core differences between C and Python, nor about Python itself, but rather about the logical structure of the lecture series, where weeks 2 to 5 cover the basics of how computers work and only later do we get into more detail about the daily use of languages, which expands my thinking capacity and helps enormously to understand the basics of programming and problem-solving approaches.
Middleway
Lecture 6.5 on artificial intelligence used the example of a menu card in our favourite restaurant to explain how we choose our favourite dish every time and thus miss the chance to discover a possibly better one.
In this way, AI models can also be set differently and allow a broader probability, or limit themselves to a more targeted and therefore more efficient probability.
The purist beauty of Sequel
I admire the simplicity of SQL applications and the possibility of using simple code queries to display cleanly structured and, depending on requirements, sorted or filtered lists from data silo CSV (comma separated values) files, which are otherwise confusing to the human eye, cleanly in the code editor.
Week 8-10: HTML-CSS-JavaScript, Flask, Cybersecurity
Web Design Basics
Website to Webapp
Even if the dividing line between websites and applications is not clear-cut, the use of a new framework such as Flask, which processes user input dynamically on the server side and outputs the result in the form of static pages back to the browser or user, makes sense above a certain level of complexity.
Cybersecurity
It is exciting to see how quickly we can test passwords on standard computers using a small program in Python. As a countermeasure, companies rely on various methods: length and complexity requirements, blocking or delay after X number of failed attempts, authentication by a second – usually physical – factor. In addition, methods similar to encryption such as hashing, end-to-end or so-called passwordless passkeys are used.
Conclusion
Again, I am grateful for the opportunity to do this great course free of charge and online. For a short time, the lecture gave me the feeling of being a student again, even in the historic Harvard.
As already mentioned, apart from Week 00 (Scratch “Tangram”) and 01 (C), I did not work on the entire problem sets, but simply took extensive notes from the lectures and tried to reproduce the most important ones here, which has already taught me many exciting insights and new skills.