Das kommt ganz darauf an wie lang die Präsentation sein soll. Bei einer 20 Minütigen Präsi kannst du natürlich nur 10-12 Folien zeigen. 

Hälst du 90 Minuten dann würde ich eine art interaktive Präsi machen. OOP ist ja das mit Abstand am meist verwendete Programmier Paradigma. Glücklicherweise eignet es sich auch wunderbar für handfeste beispiele â la "Die Klassen Auto und Motorrad erben nun von der Superklasse Fahrzeug" oder "Die Klassen Hund und Katze erben von der Superklasse Tier".

Versuch auf jeden Fall das ganze irgendwie spielerisch zu halten. z.B. in dem ein Spiel als Beispiel nimmst. Ein plattes Code Beispiel langweilt das Publikum ungemein schnell. Dies gilt insbesondere für Schüler.

Wenn eine Software ein Haus ist. Ist die Software Entwicklung der Bau dieses Haus. Die Programmierung entspricht dem was die Bauarbeiter machen. Dann gibt es noch den Architekten, der bei der Software dafür sorgt das die Türen an der richtigen Stelle sind (Usability) und das die Funktion stimmt und den Statiker, der schaut ob die Software auch richtig skaliert.

Zeig die Architekten Seite, denn das Programmier Handwerk und die Statik bzw. Skalierung sind bei einer Einführung nicht allzu Spannend.

...zur Antwort

Einfach gesagt zählst die Anzahl der verschachtelten Schleifendurchläufe

O(n) sieht z.B. so aus

while(i < myArray.size()) {
  doSomethingAwesome(myArray);
  i++;
}

Wohingegen O(n²) so aussehen würde

while(i < myArray.size()) {
  while(j < myArray.size()) {
    doSomethingAwesome(myArray);
    j++;
  }
  i++;
}

Denn die Funktion doSomethingAwesome() wird für jedes i genau j mal ausgeführt, also i*j. Beide schleifen sind abhängig von der Größe der Eingabedaten (myArray). Die O-Notation bezeichnet die Eingabedaten mit n. Wenn du jetzt eine Arraygröße von 10 hast, wird die doSomethingAwesome() Funktion im ersten Beispiel 10 mal aufgerufen. Im zweiten Beispiel allerdings bereits 100 mal!

Mit der O-Notation will man prinzipiell ausdrücken wie stark der Rechenaufwand mit dem Wachstum der Eingabedaten steigt. Das ist wichtig um herauszufinden wie der Code skaliert. Also wenn man z.B. ein Spiel hat, möchte man wissen ob wenn 1 Server für 10 Spieler reicht, man für 20 Speicher 2 Server wie bei O(n) oder 4 Server wie bei O(n²) braucht.

Vorsichtig musst du sein wenn du das Array pro Schleifendurchlauf verkleinern kannst. Dann bringst du nämlich den Faktor log(n) rein. Nehmen wir an du hast ein aufsteigend sortiertes Array von Zahlen und du suchst das Element mit einer bestimmten Zahl, z.B. um zu prüfen ob diese enthalten ist. Dann könntest du so vorgehen.

int i = myArray.size();
while(myArray[i] != myFavoriteNumber) {
  if(myArray[i/2] < myFavoriteNumber) {
    i = i/2;
  } else {
    i = i/2 + i/4;
  }
}

Damit teilst du den Suchraum pro Schleifendurchlauf in die Hälfte.

Das absolut schlimmste ist wenn du exponenzielle Laufzeit hast, also O(x^n). X ist dabei eine konstante, oder auch n, egal, in jedem Fall schlimm weil die Reichenzeit extrem schnell ansteigt.

Außerdem gibt es noch O(1). Konstante Laufzeit. Das hast du wie Rechenzeit gar nicht von der Größe der Eingabedaten abhängt.

Noch zu erwähnen sei das immer in Best-Case, Worst-Case und Average-Case. Bei einer Suche kann es z.B. sein das der Best-Case O(1) ist, weil im bestenfall das erste untersuchte Element dem gesuchten Element entspricht und im Worst-Case O(n) ist, weil es das letzte untersuchte Element ist.

Die Codebeispiele sind alle iterativ, sehr simpel, unvollständig und nicht auf lauffähigkeit geprüft. Wenn du rekursive Programmierung verstanden hast, wirst du aber kein Problem haben auf Rekursion umzuschreiben.

Wenn man das ganze weiter verfolgt endet man übrigens irgendwann in der Theoretischen Informatik bei den Komplexitätsklassen P, NP, NP-Hart und NP-Vollständig. Das muss dich aber jetzt nicht kümmern, nur das du es vielleicht irgendwann zuordnen kannst ;)

...zur Antwort
Python

Mein Prof. hat immer gesagt "die beste Programmiersprache ist immer die, die am besten für das Problem geeignet ist". Und er hat recht damit... pauschal würde ich sagen Python, denn Python ist eine dynamisch typisierte Multiparadigma Sprache mit viel Support durch Frameworks und Bibliotheken.

In Python kann man Probleme also durch imperative, objektorientierte oder funktionale Programmierung lösen... oder alles miteinander kombiniert. Das kann sehr elegant sein. ABER aus meiner Erfahrung geht das nur auf gewisse Dauer und nur mit gewissem Personenlimit gut. Sind zu viele Köcher an dem Projekt beteiligt dann kriegt man schnell unverständlichen Code Brei weil jeder Sein Lieblings Paradigma umsetzt. 

...zur Antwort

Ich beende grade mein Informatik Master Studium an einer renommierten deutschen Hochschule. Zwei Sachen will ich dir dazu sagen:

Die meisten Informatik Master-Studiengänge beinhaltet ohnehin ein Modul "Sicherheit" o.ä. in dem Kryptographie und evtl. Codierungstheorie gelehrt wird. Außerdem besteht meist die Möglichkeit sich die Projektarbeiten oder Wahlpflichtfächer nach Interesse auszuwählen. Ich weiß z.B. von einem Bekannten das die FH Darmstadt IT-Forensik als Wahlpflichtfach anbietet.

Wenn du wirklich IT-Sicherheit studieren willst, solltest du dir im klaren sein was auf dich zu kommt... elliptische Kurven, endliche Körper, Involutionen, Primitive Elemente, der Satz von Fermat, der Satz von Euler, der Chinesische Reste Satz... Mit anderen Worten, sei in Mathematik wirklich, wirklich, wirklich Fit und hab Spaß dadran, sonst wirst du dich quälen.

...zur Antwort

Nagel mich nicht genau auf die Methodennamen fest, aber das müsste in etwa stimmen. Die Variablen hast du als public in der Klasse definiert. myLeftMouseButton ist platzhalter für... deine linke maustaste. Standardmäßig setzt Unity das glaube ich auf "Fire1", kannst du in der Input Konfiguration schauen und ändern. Das Script ist in C# (der einzigen Sprache für Unity die was taugt).

public void Update() {

if(Input.GetButtonDown(myLeftMouseButton) {

switch(counter) {
case 0: myAnimation1.Play(); break;
case 1: myAnimation2.Play(); break;
case 2: myAnimation3.Play(); break;
}
counter = counter + 1 % 3;
} }
...zur Antwort

Vorweg: In einem Informatik Studium gibt es eine ganze Vorlesung namens Betriebssysteme (teils sogar Betriebssysteme II als Wahlpflichtfach). Das Thema ist also sehr komplex. Ich versuche es aber möglichst gut runterzubrechen.

Das Betriebssystem (Operating System - OS) dient zur Verwaltung und Verteilung von Betriebsmitteln. Außerdem bietet es einen einheitlichen Zugriff auf die Hardware.

Betriebsmittel sind begrenzte Resourcen wie z.B. die Rechenzeit auf dem Prozessor (CPU Time) oder der Arbeitsspeicher (RAM). Wenn mehrere Anwendungen laufen, dann bestimmt das Betriebssystem wann welche Anwendung wielange die CPU nutzen darf (und welche CPU/Kern bei Multi-CPU/Core Systemen). Das nennt sich Scheduling und ist ein Kapitel für sich mit zahlreichen Ansätzen wie man am besten bestimmt welche Anwendung Priorität hat.

Ein Beispiel für den einheitlichen Zugriff auf die Hardware ist die Nutzung von Peripheriegeräten wie Tastatur und Maus. Die Programme fragen beim Betriebssystem nach ob es ein Input von z.B. der Maus gegeben hat. Das Betriebssystem erfragt dies beim ggf. Herstellerspezifischen Treiber, welche erst die Kommunikation mit dem Gerät beherscht. So muss das Programm nicht wissen was für eine Maus du hast, ob Drahtlos oder Kabelgebunden, und du kannst sie frei austauschen.

Auch das Dateisystem wird vom Betriebssystem verwaltet. Also die Ordnung wo deine Datein auf deiner Festplatte liegen. Dies ist nämlich für einen menschen total chaotisch, oder besser gesagt fragmentiert (defragmentieren = "entwirren" des chaos). Auch das ist Kapitel für sich.

Falls du Windows als Betriebssystem nutzt (was höchstwahrscheinlich der Fall ist) empfehle ich dir mal in den Task Manager (rechtsklick auf die Taskleiste -> Task Manager) zu schauen. Alles was du dort siehst (und noch einiges mehr) wird vom Betriebssystem gemacht. Unter dem Reiter "Details" kannst du einen Rechtsklick auf einen Spaltennamen machen und dann "Spalten auswählen" klicken. Alle Spalten die du dort siehst, sind Werte für jeden Prozess die vom Betriebssystem ermittelt und verwaltet werden. Gibt einen ganz guten Einblick.

...zur Antwort