Video 1-3: Abstraktion
CS 210 – Algorithms and Data Structures (Summer 2026) · unit page
· YouTube
2026-04-20, 13:08
The transcript was generated automatically by YouTube's speech recognition and is offered as is. It may contain errors, in particular in concerning technical terms, names and formulas.
0:01 Im nächsten Abschnitt wollte ich kurz was zu Abstraktionen noch mal sagen, denn ich denke, das ist ein zentraler Begriff an der Stelle, der auch äh motiviert, warum wir Algorithmen und Datenstrukturen lernen, die längst verstanden und bekannt und implementiert sind über das hinaus, was wir schon sagten mit wir lernen auch immer noch Kopfrechnen, obwohl es Taschenrechner gibt. Noch mal zur Erinnerung, was wir gerade eben gesagt hatten, unser Hauptmittel, um irgendwie diese Komplexität von System zu beherrschen, beherrschbar zu machen, planbar zu machen, um Software überhaupt zu entwickeln, auf dem Niveau ist ist hierarchische Abstraktion Schichten bauen, die aufeinander aufbauen und dann jeweils ignorieren, wie die Innereihen der unteren Schichten gebaut sind.
0:48 Beispiele dafür äh hatte ich schon paar genannt, aber ein Klassiker ist auch Dateisysteme. Äh insbesondere das Unix Betriebssystem ist da sehr stark in das äh in dem Sinne, dass es die Dateisysteme als eine zentrale Abstraktion verwendet, auch für Dinge, die keine keine Daten auf Festplatte sind, sondern äh kennen Sie vielleicht äh Informationen über alle möglichen Teile von Betriebssysteme, Prozesse, alles sind logisch. Dateien, über die man dann auf die gleiche Weise zugreifen kann, ähm wie auf Daten, die auf der Testpl der Achronismus, ne, auf der SSD gespeichert sind oder was auch wir für ein Datenträger. Gleichzeitig sind Dateisysteme auch ein schönes Beispiel, um ein um um klar zu machen, dass es nicht immer komplett funktioniert mit diesem unteren Level abkapseln und dann ignorieren, was dahinter steckt. Denn Unix erlaubt auch ein Dateisystem zu haben, was über ein Netzwerklaufwerk eingebunden ist. Und das verhält sich dann logisch für die Programme, die es verwenden, genauso als wären es Daten, die lokal auf irgendeinem Datenträger gespeichert sind. Aber natürlich ist etwas, was über das Netzwerk zugegriffen wird, nicht wirklich ganz das gleiche.
2:05 Sie haben manchmal Latenzen, Zeiten, die man braucht, um die Daten zu übertragen und manchmal ist das Netzwerk gestört und es gibt den Zugriff auf die Daten plötzlich nicht mehr, was bei einer Festplatte natürlich auch mal passieren kann, aber super selten ist im Vergleich. Und dann hat man plötzlich ähm den Effekt, dass die Implementierung von diesem unteren Level von dem Dateisystem nach oben durchschlägt und dafür muss man sich dann auch wappnen. Äh schöne andere Beispiele von Abstraktion. Äh Strings ist ein schönes kleines nerdiges Thema. Was ist denn ein String in Java? Wer mag dazu was sagen? Woraus bestehen Strings? Ja, genau. Ein ein Character Array sozusagen oder? Ja, also sollte wirklich char sagen Character äh äh welche welche Zeichen erlaubt denn Java für Strings?
3:06 Also klar, so die klassischen lateinischen ASKzeichen. Ja, genau. UTF8 ist, sie meinen das richtige, aber UTF8 ist sozusagen der falsche Fachbegriff, aber der Unicode Zeichensatz, also alle Symbole, die Unicode so erlaubt, alle unsere Lieblingsemoji und so weiter. Ja. Wissen Sie, wie viele Zeichen das sind? Wie wie groß ist der Unicode Zeichensatz?
3:31 Nur so eine Größenordnung. Äh, hab es jetzt auch nicht nachgeguckt eine Weile. Der wächst ja immer weiter, weil ähm jeder weitere äh jeder weitere Tag bringt neue Emoji gefühlt. Ja, 100.000 ist gute Größenordnung. Ich glaube 160.000 war das letzte, was ich geschaut hatte. Sowas um den Dreh. Äh, so Preisfrage: Wie viele Bit hat ein Character in Java? Ein Car?
4:11 Wer bietet Wer bietet eine Zahl? [gelächter] Ja. Acht. Wer bietet mehr? Ja. Um 16. Genau. Zwei weit. Ähm wie viele Zahlen, wie viele Zeichen kann ich mit zwei mit 16 Bit darstellen?
4:31 Habe mich schon verplappert mit der zwei, ne? Ja. 2:16 Uhr. Was ist das? So ungefähr auch wieder Größenordnung. Wenn Sie es nur ganz grob wissen wollen, 2 hoch 10 ist 1000, ne? So um und bei. Also ist 2 hoch 16 zwischen 1000 und der Million. Jetzt müssen wir es ein bisschen genauer wissen, um es mit Unicorn zu vergleichen. Ja. 60.000 bisschen was. Genau. 65 000. Wie viele Unicode Zeichen gab's gleich wieder? 160.000. bekannterweise mehr als 65 000. Ist ja komisch, oder? Die passen gar nicht in so ein Character. Wie macht Java das denn? Ja.
5:42 Genau. Ähm in der Kürze man braucht eine Art Character Encoding und ähm da gibt's verschiedene. UTF8 ist 1, was Java verwendet für Strings normalerweise, wenn man nichts sagt, intern ist UTF 16. Das heißt, das codiert die Unicode Zeichen in 16 Bit, was zu Character dann passt. Das heißt, aber manche Zeichen brauchen mehr als einen so ein Block. Deswegen sind Strings auch schon eine ganz knifflige Abstraktion, denn es ist nicht so, dass jedes Zeichen einfach einen Index hat. Das über das ignorieren wir aber meistens, wenn wir mit Strings arbeiten, dann gehen wir eigentlich davon aus, ich kann auch das 17 Zeichen in dem String in Konstantzeit zugreifen. Wenn ich aber prüfen müsste, ob alle davor eigentlich ein oder zwei Character brauchen, dann geht das gar nicht so ohne weiteres.
6:34 Genau. Wenn Sie wissen wollen, was wie das tatsächlich dahinter lest, wie das funktioniert, dann können Sie es mal nachlesen. Ich wollte nur sozusagen ähm einstreuen, wie verbreitet diese Idee von Abstraktionen ist und der Fakt, dass die meisten von ihnen wahrscheinlich darüber gar nicht nachgedacht haben, heißt, sie mussten darüber gar nicht nachdenken und es hat trotzdem funktioniert. Ziemlich cool, oder? Aber manchmal beißt es ein, weil die Abstraktion eben nie hundertprozentig perfekt verstecken kann, was unten drunter passiert. Na gut, erstmal ähm sind Algorithmen und Datenstrukturen auch genau das äh Abstraktionen, die versuchen einem das Leben leichter zu machen und Komplexität beherrschbar zu machen. Man könnte sagen, Algorithmen von der auch von der Entstehungsgeschichte ist der der Inbegriff von wieder verwendbarem Code. Wir versuchen genau mit einem Algorithmus ein Problem so zu lösen, dass man es in mehr als einem Kontext verwenden kann, indem man zuerst das Problem abstrahiert und dann den Code so schreibt, dass er für alle Einsatzzwecke funktioniert.
7:35 Das Äquivalent für Datenstrukturen heißt vielleicht bisschen altmodisch abstrakt dat abstrakte Datentypen Abstract Data Type ähm auch oft dann mit der Abkürzung verwendet. Das ist so ein bisschen wie Interfaces in Java, aber es hat ein bisschen mehr noch äh an Informationen in Interface ist eine sehr oberflächliche Sache, das im Wesentlichen nur die Typsignatur festlegt und den Namen von Methoden. Meinem abstrakten Datentyp ist schon auch gemeint, dass wir auch die Semantik festlegen, was bedeuten die Operationen und vielleicht auch ähm inklusive Performance Charakteristiker. Wie schnell müssen die sein? Kommt bisschen auf die Anwendung an, aber definitiv mit Bedeutung. Deswegen habe ich es hier mal als semantische Kapselung bezeichnet.
8:22 Und unter Programmieren gibt's diesen schönen Begriff von Drop in Replacement. Haben Sie vielleicht mal gehört. Man kann eine Datenstruktur durch eine andere ersetzen. Wenn Sie das gleiche Interface implementiert, dann merkt der Code, der diese Datens verwendet, gar nicht, dass ich die jetzt anders implementiere. Und er funktioniert trotzdem, aber vielleicht jetzt besser, weil die neue Implementierung schneller ist.
8:50 [schnauben] Wie schon erwähnt, ähm Abstraktion, das Mittel, um Komplexität zu beherrschen. Manchmal klappt's aber nicht. Dafür gibt's einen schönen Begriff, ähm, den hier Joel Spolski, ein anderer bekannter Programmierer geprägt hat, Leaky Abstractions, damit das Bild mit der ähm mit der Flüssigkeitsmetapher zusammenpasst, müssen Sie jetzt das übliche Bild umdrehen. Normal machen wir äh Elementarer Level unten und dann wird's nach oben immer abstrakter. Stellen Sie es mal umgekehrt vor. oben ist konkret und nach unten wird's abstrakter. Äh dann ist sozusagen die Idee, dass manchmal so ein bisschen von der von der Implementierungssiffe von oben runter tropft. Äh, er sagte hier, allrivial obstructions to degree are leaky. Was er meint ist genauso Dinge wie manchmal möchten wir gerne so tun, als wäre ein String wirklich ein eine Folge von Cars, Characters Cars in Java 16 Bit in jedem Fall, aber das passt halt nicht immer, wenn ich diese Zeichen verwende, die mehr als einen Character brauchen oder wenn sie Dateien schreiben und lesen in ihrem Programm und davon ausgehen, das ist relativ schnell, denn es ist ja eine lokales Dateisystem und plötzlich kommt so von Unix Nutzer daher und benutzt das Programm auf einem Netzwerkspeicher und alles ist viel langsamer oder schlägt sogar fehl und sie waren nicht drauf vorbereitet. Das sind Beispiele, wo die Abstraktion durchlässig ist und äh so ein bisschen was von den Details der darunter liegenden Abstraktion ähm nach oben durchscheint.
10:38 Vielleicht hier ein einbreksames Bild dazu. Die Konsequenz für mich daraus ist im Wesentlichen äh für wür das Software entwickeln bauen Sie keine Autos mit zugeschweißter Motorhaube, denn früher oder später müssen Sie daran. Das ist so ein bisschen ein Widerspruch zu manchmal dem Software Engineering ähm Ziel möglichst gute Kapselung zu haben. Also alles, was man von außen nicht sehen können, muss verstecken wir so. und bauen das ganz fest ein, so dass man von außen gar nicht rankommt. Ähm, da aber Abstraktion am Ende immer irgendwo einen League haben, fast schon naturgesetz, ist es nicht die beste Idee. Man muss äh die Dinge so bauen, dass man dass man rankommt, um sie zu reparieren. So machen wir es bei anderen bei technischen ähm Errungenschaften und so muss ein Stück weit auch Software funktionieren.
11:34 Ja, was was ich hiermit sagen wollte, Autofahrer oder Mechaniker, als Autofahrer brauchen sie die Motorhaube nicht aufmachen in aller Regel oder sie die Hoffnung ist das nicht und dann ist es wurscht, dann kann die auch zugeschweißt sein. Äh, aber als Programmierer sind Sie nie nur Autofahrer, sie sind immer Mechaniker.
11:52 Aus dem gleichen Block ähm von Troll Spolski äh habe ich noch mal ein Zitat rausgenommen, wo der Kontext einfach ein völlig Aner war. 2002. Ja, aber lesen sich das noch, ich lese es einmal kurz vor. Ähm, das hat so ein so ein zeitlosen Klang, der super auch auf KI passt. The law of leaky obstructions means that whenever someone comes up with a whiz new code generation tool that is supposed to make us all ever so efficient, you hear a lot of people saying learn how to do it manually first then use the whiz tool to save time. Code generation tools which pretend to abstract out something. Like all abstractions leak the only way to deal with the leaks competently is learn how about how the abstractions work abstracting. So abstractions save us time working save us time learning. Wir kommen zurück zur Vorlesung, ne? Genau. Ja.
12:57 paradox higher level tools betterstractions becing proficient programmeras
← Video 1-2: SkalierbarkeitVideo 1-4: Die Sprache der Experten →