Notes 0

Sie können diese Seite ausdrucken oder mit einem PDF-Drucker in ein PDF umwandeln, um Ihre eigenen Notizen hinzuzufügen.

Organisatorisches

  • Sind Sie schon im VC-Kurs Inf-Einf-B? Dort: Ankündigungen, Foren für Fragen und Upload Ihrer Lösungen der Übungen.
  • Die Vorlesungen werden aufgezeichnet und im Internet veröffentlicht. Die Videos werden allerdings meist erst 3 Wochen später online sein; Folien und Notizen stellen wir am Tag nach der Vorlesung auf die Website. Machen Sie sich Notizen!
  • Ihre Fragen sind in der Aufzeichnung in der Regel nicht zu hören (ich wiederhole sie). – Seien Sie furchtlos und stellen Sie Fragen! “Publicly not knowing is valuable!”, siehe auch FAQ-Eintrag zu Fragen
  • Die Tutorien starten bereits diese Woche. Es gibt in Inf-Einf-B nur Tutorien, also keine Übungen. In den Tutorien werden keine Aufgaben “vorgerechnet”. Bilden Sie Lerngruppen, um sich bei den Aufgaben zu helfen, stellen Sie den Tutorinnen und Tutoren Fragen zur Einrichtung von VS Code usw.
    • Sprechen Sie in den Tutorien mindestens zwei anderen Personen, die Sie noch nicht kennen! (Um das Eis zu brechen, sagen Sie einfach, dass Sie nur diese Anweisung befolgen.)

Willkommen

  • Dies ist Inf-Einf-B, ein Kurs zur Einführung in die Informatik, der auf dem bekannten Kurs CS50 basiert, der von David Malan an der Harvard University angeboten wird.
  • In diesem Kurs geht es um mehr als nur um Computerprogrammierung!
  • Vielmehr geht es in diesem Kurs um Problemlösung auf eine Art und Weise, die Ihre Fähigkeiten enorm erweitert! Die Problemlösungsfähigkeiten, die Sie hier erlernen, werden Sie wahrscheinlich sofort auf Ihre Arbeit außerhalb dieses Kurses und sogar auf Ihre gesamte Karriere anwenden können!
  • Es wird jedoch nicht einfach sein! Sie werden während dieses Kurses buchstäblich „aus dem Vollen schöpfen“ (im Englischen: „drinking from the firehose“). Sie werden erstaunt sein, was Sie in den kommenden Wochen erreichen können. Es wird sich sehr unangenehm anfühlen, wenn Sie feststellen, dass Sie nicht alles verstehen und dass dieses Gefühl auch nicht verschwindet, wenn Sie sich in die Details einarbeiten. In der Informatik sind wir es gewohnt, mit diesem unangenehmen Gefühl umzugehen.
  • Bei diesem Kurs geht es darum, dass Sie sich von Ihrem aktuellen Stand aus weiterentwickeln, weniger darum, einen bestimmten Standard zu erreichen.
  • Die wichtigste Voraussetzung für diesen Kurs: Nehmen Sie sich die Zeit, die Sie brauchen, um diesen Kurs zu absolvieren. Jeder Mensch lernt anders. Auch wenn am Anfang etwas nicht so gut klappt, können Sie sicher sein, dass Sie mit der Zeit immer besser werden.
  • Haben Sie keine Angst, wenn dies Ihr erster Informatikkurs ist! Für die meisten Ihrer Altersgenossen gilt dasselbe!

Was liegt vor uns?

  • In dieser Woche lernen Sie Scratch kennen, eine visuelle Programmiersprache.
  • In den kommenden Wochen lernen Sie dann C. Das sieht dann in etwa so aus:
    #include <stdio.h>
    
    int main(void)
    {
      printf("hello, world\n");
    }
  • Außerdem werden Sie bereits in den nächsten vier Wochen etwas über Algorithmen lernen.
  • Sie werden etwas über Speicher lernen.
  • Sie werden etwas über fehlerhaften Code und die Ursachen von Computerabstürzen lernen.
  • Sie werden etwas über Datenstrukturen wie eine Hash-Tabelle lernen.
  • Dann werden wir zu einer neuen, höheren Programmiersprache namens Python übergehen. Ihr Code wird dann in etwa so aussehen
    print("hello, world")
  • Sie werden sehen, wie sich die neueren Programmiersprachen aus den früheren entwickelt haben.
  • Sie bekommen einen Einblick in JavaScript, HTML und CSS und Rechnernetze.

Prüfungsleistung

  • Am Ende gibt es eine Klausur. Eine E-Prüfung am Rechner, bei der sie zeigen sollen, was sie gelernt haben, dass Sie wirklich programmieren und Problemlösen gelernt haben.
  • Der Höhepunkt des Kurses wird aber die Projektmesse sein, bei der Sie Ihr Können vorführen. Wir werden uns dort gemeinsam darüber freuen, wie weit Sie es gebracht haben.

Informatik

  • Im Wesentlichen geht es bei der Computerprogrammierung darum, aus einer Eingabe eine Ausgabe zu erstellen und so ein Problem zu lösen. Was zwischen der Eingabe und der Ausgabe passiert, was wir als „Black Box“ bezeichnen könnten, steht im Mittelpunkt dieses Kurses.
  • Was ist Problemlösung? Das hier. In der Mitte befindet sich das Geheimnis.

Black box with input and output
Black box with input and output

  • Bei vielen Problemen ist Frage der geeigneten Repräsentation der Ein- und Ausgaben von Bedeutung.

  • Ein Problem könnte sein, zu ermitteln wie viele Menschen im Hörsaal sind. Wir könnten dazu ein unäres Zahlensystem verwenden, also mit einen Finger nach dem anderen. Das wäre sehr ineffizient. Wie weit kommen wir mit einer Hand? Bis 5? Das wäre so in einem unären Zahlensystem.

  • Wir kommen kommen mit einer Hand aber tatsächlich bis 31, wenn wir die Reihenfolge der Finger ausnutzen und jeder.

  • Wir müssten dazu so zählen wie Computer, nämlich mit einem binären System. Aus dem Begriff “binary digit” leitet sich übrigens der uns vertraute Begriff “Bit” ab. Ein Bit ist eine Null oder eine Eins: an oder aus.

  • Computer sprechen nur in Form von Nullen und Einsen. Nullen stehen für aus. Einsen stehen für an. Computer bestehen aus Millionen, vielleicht sogar Milliarden von Transistoren, die ein- und ausgeschaltet werden.

  • Wenn Sie sich eine Glühbirne vorstellen, kann eine einzelne Glühbirne nur von null bis eins zählen.

  • Wenn Sie jedoch drei Glühbirnen hätten, stünden Ihnen mehr Möglichkeiten offen!

  • Bei drei Glühbirnen könnte Folgendes für eine Null stehen:

    0 0 0
  • Folgendes würde eine Eins darstellen:

    0 0 1
  • Dann könnten festlegen, dass das Folgende eine Zwei ist.

    0 1 0
  • Und das hier eine “Drei”

    0 1 1
  • Die Vier würde so aussehen:

    1 0 0
  • Mit drei Birnen kämen wir bis zur Sieben:

    1 1 1
  • Die Plätze der Glühbirnen haben demnach folgenden Werte:

    4 2 1
  • Computer verwenden die „Basis 2“ zum Zählen. Dies kann wie folgt dargestellt werden:

    2^2  2^1  2^0
    4    2    1
  • Das bedeutet, dass wir drei Bits (die Stelle der Vier, die Stelle der Zwei und die Stelle der Eins) benötigen, um eine Zahl bis zur Sieben darzustellen.

  • Es stellt sich heraus, dass wir hier darüber sprechen, wie man Informationen wie Zahlen darstellt, aber wir könnten Bits auch zur Darstellung von Anweisungen verwenden. Denn letztendlich ist es das, was Computer tun. Sie verarbeiten Daten, Informationen jeglicher Art, ob es sich um Dateien, Zahlen, Bilder, Videos oder Ähnliches handelt.

  • Wir könnten ein Muster aus Nullen und Einsen erstellen, das einem Roboter sagt, was er tun soll, d. h. welche Gelenke er bewegen soll usw. Er könnte dies sicherlich autonom mithilfe verschiedener Sensoren tun – oder diese Bits als drahtloses Signal von einer Fernbedienung empfangen.

  • Egal wie ausgeklügelt die heutige Hardware oder Software ist, es läuft im Grunde darauf hinaus, Informationen und Anweisungen darzustellen. Und Computer, Telefone und dergleichen arbeiten wirklich nur mit denselben Informationen, ob sie nun in 0 und 1 oder in irgendetwas anderem umgesetzt werden.

  • Drei Bits sind nicht genug. Computer verwenden in der Regel acht Bits (auch als Byte bekannt), um eine Zahl darzustellen. Beispielsweise ist „00000101“ die Zahl 5 in Binärdarstellung. „11111111“ steht für die Zahl 255.

ASCII

  • Genauso wie Zahlen binäre Muster aus Einsen und Nullen sind, werden auch Buchstaben durch Einsen und Nullen dargestellt!

  • Der ASCII-Standard wurde geschaffen, um bestimmte Buchstaben bestimmten Zahlen zuzuordnen.

  • Beispielsweise wurde beschlossen, den Buchstaben „A“ der Zahl 65 zuzuordnen. „01000001“ steht für die Zahl 65 in binärer Darstellung.

  • Wenn Sie eine Textnachricht erhalten haben, könnte die Binärzahl zu dieser Nachricht die Zahlen 72, 73 und 33 darstellen. Wenn Sie diese Zahlen in ASCII umwandeln, würde Ihre Nachricht wie folgt aussehen:

    H   I   !
    72  73  33
  • Here is an expanded map of ASCII values:

    ASCII map
    ASCII map

  • Wenn Sie neugierig sind: Es gibt noch viel mehr zu ASCII zu sagen.

  • Da wir mit einem Byte binär nur bis 255 zählen kann, waren wir viele Jahre lang auf diese Anzahl an durch ASCII dargestellten Zeichen beschränkt (anfangs war das höchstwertige Bit immer 0, sodass Rechner tatsächlich sogar nur 127 Zeichen darstellen konnten).

Unicode

  • Im Laufe der Zeit gibt es immer mehr Möglichkeiten, über Text zu kommunizieren.

  • Da es in der Binärdarstellung nicht genügend Ziffern gab, um alle verschiedenen Zeichen darzustellen, die von Menschen mit einem Byte dargestellt werden konnten, erweiterte der Unicode-Standard die Anzahl der Bits, die von Computern übertragen und verstanden werden können. Unicode umfasst nicht nur Sonderzeichen, sondern auch Emojis. Nun gibt es nicht 8 Bit pro Zeichen, sondern 16, 24 oder sogar 32 Bit. Damit lassen sich bis zu vier Milliarden Zeichen darstellen.

  • Aber es geht nicht nur darum, spaßige Bilder auf dem Bildschirm zu sehen. Die eigentliche Aufgabe von Unicode besteht darin, alle menschlichen Sprachen digital darzustellen und zu bewahren, sowohl die der Vergangenheit als auch die der Gegenwart und Zukunft. Es geht also wirklich darum, das gesamte menschliche Wissen, wie wir es in der Sprache ausgedrückt haben, zu erfassen, aber auch darum, diese neu entdeckte Fähigkeit, die schon vor Jahrhunderten genutzt wurde – in Schriften, an Wänden und dergleichen – Piktogramme zu verwenden, über die wir auch unabhängig von unserer eigenen menschlichen Sprache kommunizieren können.

  • Es gibt Emojis, die Sie wahrscheinlich jeden Tag verwenden. Die folgenden könnten Ihnen bekannt vorkommen:

    emoji
    emoji

  • Das beliebteste Emoji ist „Gesicht mit Freudentränen“

  • Informatikerinnen und Informatiker standen vor einer Herausforderung, als sie jedem Emoji verschiedene Hauttöne zuweisen wollten, um die Kommunikation weiter zu personalisieren. In diesem Fall beschlossen sie, dass die ersten Bits die Struktur des Emoji selbst sein sollten, gefolgt vom Hautton.

  • Der Unicode Codepoint für ein allgemeines Daumen-hoch-Zeichen lautet beispielsweise „U+1F44D“. Das folgende Zeichen stellt jedoch dasselbe Daumen-hoch-Zeichen mit einem anderen Hautton dar: „U+1F44D U+1F3FD“.

  • Es basiert auf der sogenannten „Fitzpatrick-Skala“, die den menschlichen Hautton im Wesentlichen in sechs oder, in diesem Fall, fünf verschiedene Kategorien von heller bis dunkler einteilt.

  • Diese Methode, mehrere Codepoints miteinandenr zu verbinden, um komplexere Eigenschaften auszudrücken, ist sehr mächtig. So lassen sich zum Beispiel ein männliches und ein weibliches Gesicht und ein Herz in der Mitte durch Kombination mehrerer Codepoints erzeugen. Und wenn man die Kombination ändern möchte, z. B. in Frau-Frau oder Mann-Mann ändern möchten, ersetzt man einfach die entsprechenden Code-Points. Dazwischen sind spezielle Zeichen, die man ZWJ-Zeichen (Zero Width Joiner) nennt. Es handelt sich einfach um eine spezielle Zahl, die Menschen reservieren, um zu sagen: „Verknüpfe das Emoji links mit dem Emoji rechts.“ So werden Ideen miteinander verbunden.

  • Mit diesem flexiblen Mechanismus werden viele Emojis konstruiert, die eine Kombination aus verschiedenen Dingen sind. „Herz in Flammen“ ist zum Beispiel technisch gesehen eine Kombination aus einem Herz-Emoji und einem Feuer-Emoji.

  • Oft reduzieren wir in der Informatik, wenn wir uns neue Dinge ausdenken, die Dinge zunächst auf die Frage der geeignetsten Darstellung. Alles, was uns zur Verfügung steht, sind Nullen und Einsen. Letztendlich müssen wir uns also alle einig sein – ob wir nun Google, Microsoft oder dergleichen sind – wie wir diese Art von Dingen als Informationen standardisieren wollen.

  • Dem Unicode-Standard werden immer mehr Funktionen hinzugefügt, um weitere Zeichen und Emojis darzustellen.

  • Mehr Informationen über Unicode, mehr zu Emojis.

Andere Darstellungen

  • Nullen und Einsen können zur Darstellung von Farben verwendet werden.

  • Eine häufige Methode ist die additive Farbmischung (Licht mischen) anhand der Grundfarben Rot, Grün und Blau (auch „RGB“ genannt). Eine Farbe ist dann eine Kombination aus aus drei Zahlen zwischen 0 und 255 (drei Bytes), wobei 0 bedeutet, dass die Farbe nichts von der Grundfarbe enthält.

    red green blue boxes
    red green blue boxes

  • Unsere vorhin verwendeten Zahlen 72, 73 und 33 waren vorhin die Textnachricht „HI!“. Ein Programm, das ein Bild darstellt, würde diese Zahlen als gelben Farbton anzeige. Der Rotwert wäre 72, der Grünwert wäre 73 und der Blauwert wäre 33.

    yellow box
    yellow box

  • Dasselbe Zahlenmuster wird also je nach Kontext und Programm unterschiedlich interpretiert. Das bedeutet, wir müssen dem Rechner einen Hinweis geben, was mit Zahlen repräsentiert wird.

  • Außerdem können Nullen und Einsen verwendet werden, um Bilder, Videos und Musik darzustellen! Bilder sind einfach Sammlungen von RGB-Werten. Videos sind Sequenzen vieler Bilder, die zusammen gespeichert werden, genau wie ein Daumenkino. 30 Bilder pro Sekunde

  • Musik kann durch MIDI-Daten dargestellt werden. Jede Note hat eine Dauer, Tonhöhe und Lautstärke, die lassen sich durch Zahlen darstellen. Geräusche lassen sich durch Überlagerung von Frequenzen und Amplituden darstellen.

Algorithmen

  • Problemlösung ist ein zentraler Bestandteil der Informatik und der Programmierung.
  • Algorithmen gibt es auch in der physischen Welt.
    • “In welches Tutorium soll ich gehen?”
    • Phase 1: Schauen Sie sich in UnivIS die verfügbaren Tutorien an und schreiben Sie Ihre Top 3 Tutorien auf (z.B. T5, T2, T4):
    • Phase 2: Berechnen Sie “Tag meines Geburtsdatums modulo 5”.
      • modulo: Rest nach Division, also z.B. 17/5 = 3 Rest 2).
      • Für den 17.02.1983 wäre das z.B. 17 modulo 5 = 2.
      • Addieren Sie 1 zum Ergebnis dazu, um Ihr Tutorium zu ermitteln (also 2 + 1), hier also Tutorium T3.
      • Haben Sie am Termin von T3 grundsätzlich Zeit? Dann ist das vorerst Ihr Tutorium, weiter mit Phase 3! Sonst: Wechseln Sie zu Ihrer Zweitpräferenz (im obigen Beispiel wäre das Tutorium T2).
    • Phase 3: Vergleichen Sie mit einer Person in Ihrer Nähe ob Ihnen unterschiedliche Tutorien zugeteilt wurden oder das gleiche
      • Falls Sie unterschiedliche Termine haben: fertig, gehen Sie in die zugeteilten Tutorien.
      • Sonst:
        • Einer von Ihnen wechselt zur Zweitpräferenz (zufällig festlegen, wer wechselt), fertig.
        • Falls Sie beide aktuell schon Ihre Zweitpräferenz gewählt haben: einer wechselt zur Drittpräferenz (zufällig festlegen, wer wechselt), fertig.
  • Nun schauen wir uns einen wichtigen Algorithmus in der digitalen Welt an.
  • Stellen Sie sich das grundlegende Problem vor, einen einzelnen Namen in einem Telefonbuch zu finden (oder festzustellen, dass er nicht enthalten ist).
  • Wie kann die Kontake-App auf einem Telefon so schnell einen Eintrag finden?
  • Wie könnten wir dabei vorgehen?
  • Eine Möglichkeit wäre, einfach von Seite 1 zur nächsten und dann zur nächsten zu blättern und zu schauen ob der Name drauf steht, bis wir die letzte Seite erreichen.
  • Eine andere Möglichkeit wäre, jeweils immer um 2 Seiten weiterzublättern. Das ist doppelt so schnell, aber der Algorithmus ist nicht mehr korrekt – möglicherweise überspringen wir die Seite, auf der der Name steht und würden fälschlicherweise denken, er sei nicht enthalten. Das wäre also ein Software-Bug. Lösung: Wenn wir beim Durchblättern merken, dass wir eine Seite zu weit geblättert haben, müssen wir die vorherige Seite anschauen. Nun ist das Verfahren korrekt und immer noch doppelt so schnell.
  • Eine letzte und vielleicht bessere Herangehensweise könnte darin bestehen, zur Mitte des Telefonbuchs zu gehen und zu fragen: „Befindet sich der Name, nach dem ich suche, links oder rechts?“ Dann wiederholen wir diesen Vorgang und halbieren das Problem immer weiter.
  • Wie oft müssen wir das Telefonbuch halbieren, wenn es 1000 Seiten hat? Etwa 10 mal. Warum? Weil das restliche Telefonbuch erst 500, 250, 125, 63, 32, 16, 8, 4, 2 und am Ende nur noch 1 Seite hätte.
  • Jeder dieser Ansätze könnte als Algorithmus bezeichnet werden. Die Geschwindigkeit jedes dieser Algorithmen wird mit der sogenannten O-Notation ausgedrückt, über die wir noch sprechen werden. Grafisch ergibt sich folgender Vergleich der drei Verfahren

big o notation
big o notation

  • Man sagt, dass der erste Algorithmus, der rot hervorgehoben ist, ein O von „n“ hat, also O(n), denn wenn das Telefonbuch 1000 Seiten enthält, kann es bis zu 1000 Versuche dauern, den richtigen Namen zu finden. Der zweite Algorithmus, bei dem nur jede zweite Seite angeschaut wird, hätte O(n/2), da wir doppelt so schnell durch die Seiten gesucht haben. Der letzte Algorithmus hat O(log2 n), da eine Verdopplung des Problems nur einen weiteren Schritt zur Lösung des Problems bedeuten würde.
  • Wenn zwei Telefonbücher zusammengeführt würden, würden die ersten beiden Algorithmen doppelt so lange dauern, während der Teile-und-Herrsche-Ansatz nur einen Schritt mehr benötigt.

Pseudocode

  • Die Fähigkeit, Pseudocode zu erstellen, ist sowohl in diesem Kurs als auch in der Programmierung allgemein von zentraler Bedeutung.

  • Pseudocode ist eine für Menschen lesbare Version Ihres Codes. Wenn wir beispielsweise den dritten Algorithmus oben betrachten, könnten wir Pseudocode wie folgt erstellen:

    1  Pick up phone book
    2  Open to middle of phone book
    3  Look at page
    4  If person is on page
    5      Call person
    6  Else if person is earlier in book
    7      Open to middle of left half of book
    8      Go back to line 3
    9  Else if person is later in book
    10     Open to middle of right half of book
    11     Go back to line 3
    12 Else
    13     Quit
  • Pseudocoding ist aus mindestens zwei Gründen eine so wichtige Fähigkeit. Erstens ermöglicht es Ihnen, die Logik Ihres Problems im Voraus zu durchdenken, wenn Sie vor der Erstellung des formalen Codes pseudocoden. Zweitens können Sie diese Informationen später anderen zur Verfügung stellen, die Ihre Codierungsentscheidungen und die Funktionsweise Ihres Codes verstehen möchten.

  • Beachten Sie, dass die Sprache in unserem Pseudocode einige einzigartige Merkmale aufweist. Zunächst beginnen einige dieser Zeilen mit Verben wie „pick up“, „open“, „look at“. Später werden wir diese als Funktionen bezeichnen.

  • Zweitens: Beachten Sie, dass einige Zeilen Anweisungen wie „if“ oder „else if“ enthalten. Diese werden als Bedingungen bezeichnet.

  • Drittens: Beachten Sie, dass es Ausdrücke gibt, die als „wahr“ oder „falsch“ angegeben werden können, wie z. B. „Person ist früher im Buch“. Dies sind boolesche Ausdrücke.

  • Beachten Sie schließlich, wie diese Anweisungen wie „Gehe zurück zu Zeile 3“ lauten. Damit konstruieren wir Schleifen.

  • Diese Bausteine sind die Grundlagen des Programmierens.

  • Beim Programmieren mit Scratch, das weiter unten besprochen wird, werden wir jeden der oben genannten grundlegenden Bausteine des Programmierens verwenden.

Künstliche Intelligenz

  • Überlegen Sie, wie wir die oben genannten Bausteine nutzen können, um unsere eigene künstliche Intelligenz zu erschaffen. Sehen Sie sich den folgenden Pseudocode an:

    If student says hello
        Say hello back
    Else if student says goodbye
        Say goodbye back
    Else if student asks how you are
        Say you're well
    Else if student asks why 111 in binary is 7 in decimal
    ...
  • Beachten Sie, dass bereits für die Programmierung einer Handvoll Interaktionen viele Codezeilen erforderlich wären. Wie viele Codezeilen wären dann erst für Tausende oder Zehntausende möglicher Interaktionen erforderlich?

  • Große Sprachmodelle (Large Language Models) analysieren Muster in großen Mengen von Sprache. Solche Sprachmodelle versuchen, eine bestmögliche Schätzung darüber zu erstellen, welche Wörter nacheinander oder nebeneinander stehen.

  • Während KI-basierte Software in vielen Lebens- und Arbeitsbereichen sehr nützlich ist, erscheint uns die Verwendung der gängigen Tools für Inf-Einf-B nicht sinnvoll. Sie verleiten dazu, sich das Leben leichter zu machen und dadurch weniger zu lernen.

  • Das KI-basierte Software-Tool von CS50, die CS50 Duck, ist ein KI-Helfer, den Sie während dieses Kurses verwenden können. Es wird Ihnen helfen, aber nicht die gesamten Antworten auf die Probleme des Kurses verraten. Dieses elektronische Tutoring kann den Lernerfolg erhöhen.

Scratch

  • Scratch ist eine visuelle Programmiersprache, die vom MIT entwickelt wurde.

  • Scratch verwendet dieselben grundlegenden Codierungsbausteine, die wir bereits in dieser Vorlesung behandelt haben.

  • Scratch ist eine großartige Möglichkeit, in die Computerprogrammierung einzusteigen, da Sie mit diesen Bausteinen auf visuelle Weise spielen können, ohne sich um die Syntax von geschweiften Klammern, Semikolons, Klammern und dergleichen kümmern zu müssen.

  • Die Scratch-IDE (integrierte Entwicklungsumgebung) sieht wie folgt aus:

    scratch interface
    scratch interface

  • Beachten Sie, dass es auf der linken Seite Bausteine gibt, die Sie in Ihrer Programmierung verwenden können. Direkt rechts neben den Bausteinen befindet sich der Bereich, in den Sie Bausteine ziehen können, um ein Programm zu erstellen. Rechts davon sehen Sie die Bühne, auf der eine Katze steht. Auf der Bühne wird Ihre Programmierung zum Leben erweckt.

  • Scratch arbeitet mit einem kartesischen Koordinatensystem:

    scratch coordinate system
    scratch coordinate system

  • Beachten Sie, dass sich die Mitte der Bühne an der Koordinate (0,0) befindet und die Bähne 480 Einheiten breit ist und 360 hoch. Im Moment befindet sich die Katze an Position (0,0).

Hello World

  • Um ein neues Scratch-Projekt zu starten, klicken Sie auf „Create“.
  • Ziehen Sie dann den Baustein „When green Flag clicked“ in den Programmierbereich. Ziehen Sie dann den Baustein „Say“ in den Programmierbereich und fügen Sie ihn an den vorherigen Baustein an.
whenclickedsayhello, world
  • Beachten Sie, dass die Katze „hello, world“ sagt, wenn Sie jetzt auf die grüne Flagge auf der Bühne klicken.

  • Dies veranschaulicht recht gut, was wir vorhin in Bezug auf die Programmierung besprochen haben:

    scratch with black box
    scratch with black box

  • Beachten Sie, dass die Eingabe „hello, world“ an die Funktion „say“ übergeben wird und der Nebeneffekt (side effect) dieser Funktion darin besteht, dass die Katze „hello, world“ sagt.

Hallo du

  • Wir können Ihr Programm interaktiver gestalten, indem wir die Katze zu jemand Bestimmten „Hallo“ sagen lassen. Passen Sie Ihr Programm wie folgt an:
whenclickedaskWhat's your name?andwaitsayjoinhello,answer
  • Beachten Sie, dass beim Klicken auf die grüne Flagge die Funktion „ask“ ausgeführt wird. Das Programm fragt Sie als Benutzer: „What’s your name?“ Anschließend wird dieser Name in der Variablen mit dem Namen „answer“ gespeichert. Das Programm übergibt „answer“ dann an eine spezielle Funktion namens „join“, die zwei Textzeichenfolgen „hello“ und den angegebenen Namen kombiniert. Diese werden zusammen an die Funktion „say“ übergeben Die Katze sagt „Hallo“ und einen Namen. Ihr Programm ist jetzt interaktiv.
  • Ganz ähnlich können wir unser Programm wie folgt ändern
whenclickedaskWhat's your name?andwaitspeakjoinhello,answer
  • Beachten Sie, dass dieses Programm, wenn die grüne Flagge angeklickt wird, dieselbe Variable, verbunden mit „hello“, an eine Funktion namens „speak“ übergibt.

Abstraktes Miauen

  • Neben der Pseudocodierung ist die Abstraktion eine wesentliche Fähigkeit und ein wesentliches Konzept in der Computerprogrammierung.
  • Abstraktion ist der Vorgang, bei dem ein Problem in immer kleinere Probleme zerlegt wird, die wir einmal lösen, uns aber dann nicht mehr dafür interessieren wie wir sie gelöst haben.
  • Wenn Sie beispielsweise ein großes Abendessen für Ihre Freunde ausrichten, könnte das Problem, das gesamte Essen kochen zu müssen, ziemlich überwältigend sein! Wenn Sie jedoch die Aufgabe, das Essen zu kochen, in immer kleinere Aufgaben (oder Probleme) aufteilen, könnte sich die große Aufgabe, dieses köstliche Essen zuzubereiten, weniger herausfordernd anfühlen.
    • Wenn Sie zum ersten Mal ein indisches Curry zubereiten, benötigen Sie vielleicht eine Anleitung, die genau erklärt, dass Sie den Reis zuerst waschen, dann zusammen mit der doppelten Menge Wasser und einer bestimmten Menge Salz im Topf für 18 Minuten erhitzen, danach mit einer Gabel fluffig machen, und so weiter.
    • Später kommen Sie auch damit zurecht, wenn Schritt 1 eines Rezepts lautet: Reis kochen. Das Problem wurde abstrahiert.
  • Beim Programmieren und sogar in Scratch können wir Abstraktion in Aktion sehen. Programmieren Sie in Ihrem Programmbereich wie folgt:
whenclickedplaysoundMeowuntildonewait1secondsplaysoundMeowuntildonewait1secondsplaysoundMeowuntildone
  • Beachten Sie, dass Sie dabei immer wieder dasselbe tun. Wenn Sie feststellen, dass Sie wiederholt dieselben Anweisungen codieren, können Sie wahrscheinlich besser programmieren, indem Sie diesen sich wiederholenden Code abstrahieren.
  • Sie können Ihren Code dazu wie folgt ändern:
whenclickedrepeat3playsoundMeowuntildonewait1seconds
  • Beachten Sie, dass die Schleife genau das tut, was das vorherige Programm getan hat. Das Problem wird jedoch vereinfacht, indem die Wiederholung in einen Block ausgelagert wird, der den Code für uns wiederholt.
  • Wir können dies sogar noch weiter vorantreiben, indem wir den „define“-Block verwenden, mit dem Sie Ihren eigenen Block (Ihre eigene Funktion) erstellen können! Schreiben Sie den Code wie folgt:
definemeowplaysoundMeowuntildonewait1secondswhenclickedrepeat3meow
  • Beachten Sie, dass wir unseren eigenen Block namens „Miau“ definieren. Die Funktion gibt den Ton „Miau“ wieder und wartet dann eine Sekunde. Darunter sehen Sie, dass unsere Miau-Funktion dreimal wiederholt wird, wenn auf die grüne Flagge geklickt wird.
  • Wir können sogar eine Möglichkeit bereitstellen, mit der die Funktion eine Eingabe „n“ entgegennehmen und das Miau mehrmals wiederholen kann:
definemeowntimesrepeatnplaysoundmeowuntildonewait1seconds
  • Beachten Sie, dass „n“ aus „meow n times“ entnommen wird. „n“ wird über den „define“-Block an die „meow“-Funktion übergeben.
  • Die Katze können wir übrigens als „Sprite“ bezeichnen – ein allgemeiner Begriff, der in der Spieleprogrammierung für ein Objekt oder eine Figur auf dem Bildschirm verwendet wird, mit dem bzw. der der Spieler interagiert.

Bedingte Anweisungen

  • Bedingte Anweisungen sind ein wesentlicher Baustein der Programmierung, bei dem das Programm prüft, ob eine bestimmte Bedingung erfüllt ist. Wenn eine Bedingung erfüllt ist, führt das Programm eine Aktion aus.
  • Um eine Bedingung zu veranschaulichen, schreiben Sie den Code wie folgt:
whenclickedforeveriftouchingmouse-pointer?thenplaysoundMeowuntildone
  • Beachten Sie, dass der „forever“-Block so verwendet wird, dass der „if“-Block immer wieder ausgelöst wird, sodass er kontinuierlich überprüfen kann, ob die Katze den Mauszeiger berührt.
  • Wir können unser Programm wie folgt ändern, um die Videosensorik zu integrieren:
whenvideomotion>50playsoundMeowuntildone
  • Denken Sie daran, dass Programmieren oft ein Prozess von Versuch und Irrtum ist. Wenn Sie frustriert sind, nehmen Sie sich Zeit, um das vorliegende Problem zu besprechen. An welchem spezifischen Problem arbeiten Sie gerade? Was funktioniert? Was funktioniert nicht?

Oscartime

  • In diesem Vortrag haben wir Ihnen eine Reihe von Scratch-Programmen vorgestellt, die Ihre Fantasie anregen sollen.

  • Oscartime“ ist ein Scratch-Programm, das David Malan (der den Kurs CS50 in Harvard unterrichtet) geschrieben hat. Nehmen Sie sich einen Moment Zeit, um das Spiel selbst durchzuspielen. Sie finden es auf https://scratch.mit.edu (Suche).

  • Um „Oscartime“ zu programmieren, fügen wir zuerst den Laternenpfahl hinzu.

    oscartime interface
    oscartime interface

  • Dann schreiben wir folgenden Code:

whenclickedswitchcostumetooscar1foreveriftouchingmouse-pointer?thenswitchcostumetooscar2elseswitchcostumetooscar1
  • Wenn Sie mit der Maus über Oscar fahren, ändert sich sein Kostüm. Weitere Informationen erhalten Sie, wenn Sie diese Codeblöcke untersuchen.
  • Ändern Sie dann Ihren Code wie folgt, um ein fallendes Stück Müll zu erstellen:
whenclickedgotox:pickrandom-240to240y:180foreverifdistancetofloor>0thenchangeyby-3
  • Beachten Sie, dass die Position des Mülls auf der y-Achse immer bei 180 beginnt. Die x-Position ist zufällig. Während sich der Müll über dem Boden befindet, sinkt er jeweils um 3 Pixel. Weitere Informationen erhalten Sie, indem Sie diese Codeblöcke untersuchen.
  • Als Nächstes ändern Sie Ihren Code wie folgt, um die Möglichkeit zu bieten, den Müll mit der Maus zu ziehen:
whenclickedforeverifmousedown?andtouchingmouse-pointer?thengotomouse-pointer
whenclickedforeveriftouchingOscar?thenchangescoreby1gotox:pickrandom-240to240y:180

Ivy’s Hardest Game

  • Indem wir uns nach Oscartime jetzt Ivys Hardest Gameanschauen, können wir besser verstehen, wie wir Bewegung in unser Programm integrieren können.
  • Unser Programm besteht aus drei Hauptkomponenten.
  • Zunächst haben wir diesen Code:
whenclickedgotox:0y:0foreverlistenforkeyboardfeelforwalls
  • Beachten Sie, dass sich unser Sprite bei einem Klick auf die grüne Flagge in die Mitte der Bühne bei den Koordinaten (0,0) bewegt und dann auf die Tastatur hört und für immer nach Wänden sucht.
  • Zweitens fügen Sie diese zweite Gruppe von Codeblöcken hinzu:
definelistenforkeyboardifkeyup arrowpressed?thenchangeyby1ifkeydown arrowpressed?thenchangeyby-1ifkeyright arrowpressed?thenchangexby1ifkeyleft arrowpressed?thenchangexby-1
  • Beachten Sie, wie wir ein benutzerdefiniertes „Listen for Keyboard“-Skript erstellt haben. Für jede unserer Pfeiltasten auf der Tastatur wird das Sprite auf dem Bildschirm bewegt.
  • Fügen Sie abschließend diese Gruppe von Codeblöcken hinzu:
definefeelforwallsiftouchingleft wall?thenchangexby1iftouchingright wall?thenchangexby-1
  • Beachten Sie, dass wir auch ein benutzerdefiniertes Skript „Wände spüren“ haben. Wenn ein Sprite eine Wand berührt, wird es in eine sichere Position zurückbewegt, sodass es nicht vom Bildschirm läuft.
  • Weitere Informationen erhalten Sie, indem Sie diese Codeblöcke untersuchen.
  • Spielen Sie das vollständige Spiel: Ivy’s Hardest Game.
  • Mit Scratch können viele Sprites gleichzeitig auf dem Bildschirm angezeigt werden.
  • Wenn Sie ein weiteres Sprite hinzufügen möchten, fügen Sie Ihrem Programm die folgenden Codeblöcke hinzu:
whenclickedgotox:0y:0pointindirection90foreveriftouchingleft wall?ortouchingright wall?thenturn180degreesmove1steps
  • Beachten Sie, wie das Yale-Sprite dem Harvard-Sprite in die Quere zu kommen scheint, indem es sich hin und her bewegt. Wenn es gegen eine Wand stößt, dreht es sich um, bis es erneut gegen die Wand stößt. Sie können mehr erfahren, indem Sie diese Codeblöcke untersuchen.
  • Sie können sogar ein Sprite einem anderen Sprite folgen lassen. Wenn Sie ein weiteres Sprite hinzufügen, fügen Sie Ihrem Programm die folgenden Codeblöcke hinzu:
whenclickedgotorandom positionforeverpointtowardsHarvardmove1steps

Zusammenfassung

In dieser Vorlesung haben Sie erfahren, wie sich dieser Kurs in die große Welt der Informatik und Programmierung einfügt. Sie haben Folgendes gelernt:

  • Nur wenige Studierende kommen mit Programmiererfahrung in diesen Kurs!
  • Sie sind nicht allein! Sie sind Teil einer Gemeinschaft.
  • Problemlösung ist das A und O der Arbeit von Informatikern.
  • In diesem Kurs geht es nicht nur um Programmierung – dieser Kurs führt Sie in eine neue Art des Lernens ein, die Sie auf fast alle Lebensbereiche anwenden können.
  • Wie Zahlen, Text, Bilder, Musik und Videos von Computern verstanden werden.
  • Die grundlegende Programmierfertigkeit des Pseudocodings.
  • Vernünftige und unvernünftige Wege, KI in diesem Kurs zu nutzen.
  • Wie Abstraktion in diesem Kurs eine Rolle in Ihrer zukünftigen Arbeit spielen wird.
  • Die grundlegenden Bausteine der Programmierung, einschließlich Funktionen, Bedingungen, Schleifen und Variablen.
  • Wie man ein Projekt in Scratch erstellt.

Und das war sie, die erste Vorlesung von Inf-Einf-B. Nun sind Sie dran!