Warum i und j als Zählvariable genutzt werden und woher das ganze eigentlich stammt.
Im Engineering Kiosk Adventskalender 2024 sprechen befreundete Podcaster⋅innen und wir selbst, Andy und Wolfi, jeden Tag kurz & knackig innerhalb von wenigen Minuten über ein interessantes Tech-Thema.
Unsere aktuellen Werbepartner findest du auf https://engineeringkiosk.dev/partners
Das schnelle Feedback zur Episode:
Links
Sprungmarken
Hosts
- Wolfgang Gassler (https://mastodon.social/@woolf)
- Andy Grunwald (https://andygrunwald.com/)
Feedback
- EngKiosk Community: https://engineeringkiosk.dev/join-discord
- Buy us a coffee: https://engineeringkiosk.dev/kaffee
- Email: stehtisch@engineeringkiosk.dev
- LinkedIn: https://www.linkedin.com/company/engineering-kiosk/
- Mastodon: https://podcasts.social/@engkiosk
- Bluesky: https://bsky.app/profile/engineeringkiosk.bsky.social
- Twitter: https://twitter.com/EngKiosk
Transkript
Wolfi Gassler (00:00:09 - 00:00:36)
Einen wunderschönen ersten Adventssonntag wünschen wir euch und damit willkommen zum ersten Türchen des Engineering Kiosk Adventkalenders. Wissen kurz und leicht verdaulich, so wie es in der Adventszeit sein soll. Aber bevor wir starten, gibt es zum Baumwagen natürlich einen Dad Joke ÿousand. So, bist du bereit? Also los geht's mit den Zählvariablen.
Andy Grunwald (00:00:37 - 00:05:44)
Viele von uns programmieren prozedural oder objektorientiert bzw. Mit Programmiersprachen, die diese Paradigmen unterstützen. Noch mal zur was ist denn eigentlich nochmal prozedurale Programmierung? Also der Begriff selbst ist nicht ganz eindeutig definiert. Er wird auf jeden Fall sehr früh geprägt, wo die zweitausendein Aufgabenstellung in Teilprobleme unterteilt wurden bzw. Als das angefangen hat. Heutzutage würde man sagen, das ist Standard und wir würden das als Funktionen oder Methoden bezeichnen. Es war halt alles bedingt durch den mehr oder weniger limitierten Sprachumfang früherer Programmiersprachen. Heutzutage würde man sagen, prozedurale Programmierung ist die klassische Art des Programmierens. Wie dem auch sei, Merkmale der prozeduralen Programmierung sind unter anderem Kontrollstrukturen wie Schleifen, nochmal zur Erinnerung, kopfgesteuerte Schleife, so eine while Schleife, eine fußgesteuerte Schleife, eine do while Schleife oder halt auch eine Zählschleife, also eine for i, null i, kleiner gleich wert i und so weiter. Als Alternative zur prozeduralen Programmierung gibt es da z.B. die funktionale Programmierung. Wenn du jetzt JavaScript funktional entwickeln wollen würdest, dann würdest du z.b. die klassischen Kontrollstrukturen wie Schleifen, die ich gerade erwähnt hatte, mit high order Functions ersetzen, wie z.B. map und Filter. Aber dies nur am Rande. Wir gehen jetzt nicht tiefer auf die funktionale bzw. Prozedurale Programmierung ein, also schiffen wir das wieder zurück zum Thema. Zurück zur Zählschleife bzw. Vor Schleife. Also vor Schleife, die Tage her ist wieder eine geschrieben vor i null i, kleiner gleich Wert i. Selten habe ich gesehen, dass für die Zählvariable ein anderer Buchstabe als i genutzt wurde. Außer es wurden mehrere for Schleifen ineinander verschachtelt und i ist als Variablename bereits belegt. Dann hat man natürlich j oder k oder l genommen. Der Punkt ist bzw. Die Frage, die ich mir gestellt habe, warum? Und warum mache ich das so? Und die simple Antwort ist eigentlich, weil ich es so gelernt habe bzw. Nie tiefer hinterfragt habe. Denn einsbuchstabige bzw. Sehr kurze variable Namen, die sind eigentlich. Ja, in der Programmierung verpönt, stammen sie wahrscheinlich aus den Anfangstagen der Programmierung. Zumindest habe ich das so gelernt in meinem Algorithmenkurs. Im Studium hat der Professor alle Algorithmen in C geschrieben und dabei immer einstellige Variablennamen genutzt. Also a, b, c. Der Quellcode selbst war rechtschreibtisch schwer zu folgen. Als generelles Best Practice sagen wir allen unseren Leuten deswegen, hey, nimm doch bitte etwas längere variablen Namen, welche, die etwas aussagen, wo man den Namen liest und weiß wirklich was gemeint ist. Klar, Ausnahmen gibt es immer, sowas wie ID oder UID, das sind auch kurze variablen Namen, aber eine ID, da weiß jeder, was gemeint ist. Natürlich könnte man jetzt die Diskussion starten, dass man id gegebenenfalls user id nennen sollte und so weiter, aber das ist nicht der reale Punkt, sondern benutze halt kein a, b oder c. Dann habe ich mir die Frage warum nutzen wir also i, j und k und nicht counter oder number oder ähnliches für die for Schleife? Und zwar hat das Ganze was mit Mathe zu tun, bzw. Hat es eine mathematische Herkunft, und zwar aus der linearen Algebra und der Matrizenrechnung. In diesen beiden Bereichen werden die Variable i auch als Indizes benannt und dort auch für Zählvariablen verwendet. Also Ÿousand, wo kommt denn sowas z.B. in der Praxis in der Mathematik vor? Und zwar beim mathematischen Summenzeichen. Ihr wisst schon, dieses große, etwas zackige e. Da gibt es eine einfache Schreibweise, wenn man z.b. eins, zwei, drei, vier, fünf rechnen möchte. Da kann man einfach schreiben Summenzeichen fünf. Unter dem e steht i gleich eins, das besagt, wo man anfängt. Erster Teil der Vorschleife. Über dem e steht fünfte, das ist die Zahl, wo du aufhörst. Wir wollen eins, zwei, drei, vier, fünf rechnen. Rechts neben dem e steht, was du jedes mal zur Summe dazu packst. Der Schritt, also i aus der Vorschleife und i in diesem Kontext steht für den Laufindex der Summe. Und diese Tradition hat sich halt aus der Mathematik in die Informatik übertragen. Falls du dich also jetzt schon immer gefragt hast, wie viel hat Softwareentwicklung eigentlich mit Mathematik zu tun? Nun, hier hast du zumindest einen kleinen Anhaltspunkt. Und an alle Mathematikerinnen, seid bitte nicht böse mit mir, wenn ich das Summenzeichen als großgeschriebenes E [Sos/eos], bezeichne. Mit hoher Wahrscheinlichkeit gibt es dafür einen mathematischen lateinischen Namen, den ich leider nicht kenne, aber es sieht halt aus wie ein großgeschriebenes E. Eine kleine Korrektur. Der Buchstabe selbst kommt aus dem griechischen Alphabet und wird dort als Sigma bezeichnet. Es ist also vielleicht doch sogar als Best Practice anzusehen, wenn man zumindest im Kontext von Zählvariablen und Laufindizes einstellige Variablennamen verwendet bzw. I, j und k. Aber Achtung, kommt mir bitte jetzt ja nicht auf die Idee, ein wenig Chaos zu verbreiten, indem ihr a, b oder x, y, z als Zählvariable nutzt, denn das bringt das globale System einfach nur durcheinander. Nun seid ihr wieder ein bisschen klüger, um auch beim nächsten Meetup ein bisschen klug zu scheißen. Viel Spaß.
Wolfi Gassler (00:05:44 - 00:06:00)
Wenn du jetzt noch mehr Lust auf Wissen hast, schau doch in eine unserer anderen Episoden rein und schicke diese Episode an ein, zwei Freunde bzw. Arbeitskolleginnen. Und auf dein Feedback freuen wir uns natürlich auch in unserer Discord Community. Noch einen schönen Advent von Andi und mir.