woher kommt der Glaube dass sich irgendwas automatisieren oder KI-ieren lassen wird?
ich sehe die heutige Programmierung in vieler Hinsicht noch nicht wesentlich weiter als Lochkarten von vor 50 Jahren,
genau wie aktuelle Autos so wie die aller ersten auf dem Boden fahren,
In vieler Hinsicht sind Computer und Autos vergleichbar, aber ... gerade in bezug auf diese Punkt IMHO nicht so direkt - Oder zumindest wird das, was ich als Kernfrage dieses Threads ansehe, daran nicht so deutlich: Die Tools mit denen man arbeitet werden immer intelligenter, und die Beschreibungen finden auf immer höherer Ebene statt.
Wenn man es darauf anlegt:
- Assembler ist die Sache mit der Kurbel vorne am Motor
- C ist ein I'er Golf
- Java+IDE ist ein 7er BMW mit Tempomat, Verkehrszeichenerkennung, Navi und HUD
- Aber das selbstfahrende Auto, wo man nur noch das Ziel ins Navi eingibt, und sich dann bequem zurücklehnt, wird es früher oder später sowohl auf der Straße als auch im übertragenen Sinne in der Programmierung geben
Bis dahin kommen aber noch Zwischenschritte, wie z.B. automatische Kolonnenfahrten oder so, und natürlich sind noch viele Fragen zu klären.
> "Erledige diese Aufgabe, und zwar auf allen Kernen, die du zur Verfügung hast (egal ob das 2 oder 2000 sind)"
sowas stelle ich mir nur schwer vor, entweder sind Dinge trivial oder zu kompliziert für nicht-kreative Rechner,
Nun, das geht schon, mit OpenCL zum Beispiel: Man sagt ihm: "Diese beiden Vektoren sollen addiert werden" und das macht er entweder mit 2 oder mit 1000 Kernen, das hängt von der cl_platform und dem cl_device ab. Aber das ist natürlich (wie schon angedeutet) nur die unterste Ebene - eben die Building blocks. Das hat ja mit Kreativität und Problemlösung nichts zu tun, sondern ist rein mechanisch.
Tatsache ist aber, dass auch die "klassische" KI oft genau dieses Argumentationsproblem hat: Es wird an "künstlicher Intelligenz" geforscht, und am Ende ist das, was rauskommt, ja doch nur irgendein Algorithmus - also AUCH etwas rein mechanisches. Das Ziel in bezug auf die Programmierung ist dann vielleicht, möglichst viel low-level-Wissen in die Tools zu stecken, damit sich der Programmierer auf höherer Ebene mit den Problemen befassen kann.
Das Beispiel, das du genannt hast, passt da sehr gut:
man denke an [...] Einsatz von ArrayList oder LinkedList,
sowas kann nur ein Mensch als Regeln vorgeben, und das sind ganz allgemeine Dinge, noch nicht mal individuelle Programme,
Diese Vorgabe von Regeln wäre ja schon ein nächster Schritt: Wenn es nun eine Möglichkeit gäbe, zu beschreiben, was man mit dieser 'List' machen will, könnte man darauf basierend ja Entscheidungen treffen - wie ein Mensch auch. Wenn man sagt: "Ich brauche oft 'addFirst' und 'removeFirst'", dann ist es eine LinkedList, und wenn man sagt "Ich brauche oft 'get(i)' dann ist es eine ArrayList. Das könnte auf rein formalen Kriterien (eben die Komplexität im Sinn der O-Notation) basieren. Die nächsthöhere Stufe könnte dann z.B. sein, dass man nur noch sagt: "Ich brauche eine sortierte Liste", und dder Computer dann erkennt, dass er "sort" aufrufen muss, und dafür wegen der vielen 'get(i)' eine ArrayList am besten wäre - oder vielleicht doch ein TreeSet, wenn oft sortiert eingefügt werden muss...?
Es gibt schon einige Ansätze, um
Das Programmieren auf eine höhere Ebene zu ziehen. Dass wir immernoch auf Lochkarten-Niveau Code hinhacken hat vielleicht damit zu tun... dass... Programmierer sehr konservativ sind (oder? Es klingt widersprüchlich, aber ... COBOL lebt!
).
Ich verfolge das nicht in aller Tiefe, aber da wird schon intensiv geforscht. Zwei Dinge, über die ich mal zufällig gestolpert war (und das ist auch schon lange her!), und die, wie ich finde, SEHR interessant aussehen, waren z.B.
Code Bubbles Project: Rethinking the User Interface Paradigm of Integrated Development Environments
oder sowas wie
Natural Programming