Einzelnen Beitrag anzeigen
#8
Alt 19.01.09, 15:00:54
RypeL
Registered Users
Registriert seit: 10.02.08
Beiträge: 267
RypeL eine Nachricht über ICQ schicken
Ich denke die Komplexität der Informatik wird etwas übertrieben. In Wahrheit ist es eher so dass es in der Informatik nur sehr selten wirkliche Innovationen und bedeutende Veränderungen gibt. Computer funktionieren seit jeher nach dem gleichen Prinzip, dass ein gewisser Herr von Neumann 1946 erdacht hat.

Programmiersprachen, Betriebssysteme, Mikroprogramme, ... alle bauen auf dem gleichen Strukturen wie Listen, Stacks etc auf, die auch shcon ewig bekannt sind. Die einschneidentsten Veränderungen waren noch realativ einfach zu verstehende Dinge wie Multithreading, objektorientierte Programmierung oder asynchrone Kommunikation.

Die meisten Veränderungen wurden einfach durch schiere Rechenpower erzwungen. Und eine Sprache wie Java hat heutzutage für fast jede Aufgabe vorgefertigten Code den man verwenden kann um sich seine Anwendung zusammenzubauen, aber wenn man da mal hinterguckt dann ist das auch wieder nur zusammengeschusterter Kram aus den immer gleichen Grundbausteinen. Der Trend geht immer mehr in richtung vorgefertigter codebausteine, nicht weil die Codebausteine so komplizierte Prinzipien verwenden würden das man sie nicht verstehen könnte, sondern einfach deswegen weil die Anwendungen heute meist so groß sind, dass es ein zeitproblem und nicht wirtschaftlich ist alles selbst zu programmieren. Daher ist es in der Regel so dass Unternehmen heutzutage soweit es geht nurnoch ihr user interface und ihre "Geschäftlogik" selbst programmieren und ansonsten anpassbare Komponenten wie Frameworks/SAP verwenden.

Das früher viel mehr selbst programmiert wurde hängt denk ich auch damit zusammen, dass das einbinden vorgefertigten Codes durch die heutigen objektorientierten Programmiersprachen vereinfacht wurde und es früher mehr parallel exitierende Programmiersprachen gab. Heute wird der Markt von wenigen Sprachen, vorallem Java,C++,C#, dominiert.

Aber wie gesagt, ich denke es ist möglich noch alles zu verstehen wenn man die Grundlagen kennt und sich die Zeit nimmt vorgefertigten Code mal zu analysieren. Und ich denke das Informatiker auch in Zukunft so ausgebildet werden, dass sie vom grafischen GUI bis zum einzelnen Prozessorbefehl mal die ganze Kette durchgehen. Wir haben im Studium auch noch Assembler und Mikroprogramme durchgenommen und entwickelt, auch wenn man das später zb in der Funktion als Java Entwickler nichtmehr wirklich zu wissen braucht. Wenn man will kann man sich das aber angucken und auch verstehen. Es ist auch mal ganz interessant und spaßig mit auf dieser untersten Ebene nen paar Zahlen zu addieren und dann im Debugtool oderso zu sehen wie sich die entsprechende Stelle im Speicher ändert. Anfangs mag das interessant und faszinierend erscheinen aber wirklich spektakülär oder überraschend ist das was da psssiert eigentlich nicht. Es ist eigentlich nur anstrengend beim Asselblerprogrammieren, oder gar beim schreiben von Mikroprogrammen (noch eine Stufe unter Assembler, direktes arbeiten mit den einzelnen Befehlen die an den Prozessor gesendet werden), keine Speicherfehler zu produzieren und mit den wenigen grundlegenden Befehlen irgendnen gutes Programm hinzubekommen.

C/C++ Programme werden immernoch zunächst in Assembler übersetzt. Bei Java ist das etwas. So genau weiß ich im Moment auch nciht was im generierten Bytecode drinsteckt aber wenn man will kann man da auch genauer nachforschen und wird seine Programme in Form einer Aneinanderreihung von vielen einfacheren Befehlen vorfinden, die dann aber meist so lang sind das man dafür sehr viel zeit brauchen würde um es nachzuvollziehen.

Wer wirklich so viel Wert auf Kontrolle und effizienz legt sollte eh lieber C/C++ nehmen, wo man auch noch selbst Assembler Code in sein C Programm einbinden kann. (Man kann auch über Javas native-Interface Assembler in Java einbinden, allerdings weiß ich nciht genau ob die Befehle quasi 1zu1 in Javas Bytecode übersetzt werden, wahrscheinlich aber schon).

Wie Zeiger funktionieren braucht man in Java nicht zu wissen weil es da keine Zeiger gibt. Sondern nur Referenzen. Referenzen sind quasi ein Zeiger auf ein Objekt/Variable, während eine Zeiger ein Zeiger auf eine Speicherstelle ist. Das hört sich zunächst kompliziert an wenn man mal darüber nachdenkt ist das aber auch ein ziemlich simples Konzept. Vielfach verpönt unf gefürchtet und ein großes Gesprchsthema sind Zeiger immer deswegen weil man mit ihnen so gefährliche Sachen machen kann. Zeiger sind ein Mittel um irgendwohin ganz nach belieben irgendwas in den Speicher zu schreiben, ohna das das Programm oder der Prozessor das wirklich überprüfen würde ob da überhaupt noch Speicher frei ist oder ob da schon was steht oder ähnliche Konflikte auftreten. Das man dabei den Speicher nicht durcheinanderwirbelt darauf muss der Programmierer selbst achten und das geht oft genug schief, gerade bei größeren Programmen. Daher hat man in Java darauf verzichtet um diese Fehlerquelle auszuschließen und dadurch das entwickeln von Programmen eher zu beschleunigen und sicherer zu machen. Denn Zeiger können manchmal eine Aufgabe schnell und einfach lösen und da Programmierer oft von Natur aus faul sind wird die einfachste Lösung oft ersmal genommen und später hat man dann den Salat wenn das Programm größer wird und man durch das debuggen von durch Zeigerfehlern viel zeit verliert. Außerdem ist es relativ schwer die Zeiger-Struktur die ein andere sich im Speicher aufgebaut hat nachzuvollziehen und zu überprüfen. Daher gibt es weitere, Fessel ähnliche, Veränderungen in Java im Vergleich zu zb C++ um den Programmierer quasi vor sich selbst zu schützen und durch leichter zu verstehende Programme Teamarbeit zu fördern.

Zum Thema "Ein neues BS wird doch kaum noch einer entwickeln können" kann man sich zb Googles neuen Browser Chrome angucken. Browser gibt es ja auch schon ein paar Tage und Chrome revolutioniert die bestehenden Browser in ein paar Aspekten. Die Aspekte und Ideen die Chrome dabei verwendet (zb ein eigener Thread für jeden Tab) sind aber auch nichts wirklich neues. Aber Chrome zeigt, das es durchaus noch möglich ist schon bestehendes Wissen zu neuen Ansätzen zu kombinieren. Oftmals sind das neue Kombinationen die früher noch nciht möglich waren weil die Rechner oder dass Inet dafür noch zu langsam waren.


Ok, also was ich so ungefähr sagen wollte ist, dass ich nicht finde das es so ist das die Informatik immer unverständlicher werden würde. Im Gegenteil, es verändert sich an den Konzepten fast nie was weil sich schon genügend schlaue Köpfe damit befasst haben und die Datenverarbeitung schon ziemlich durchgekaut. Schaut man sich verschiedene Programmiersprachen, Betriebssysteme und ähnliches an wird man vielfach immer wieder auf die gleichen Dinge in unterschiedlicher Ausführung und Kombination stoßen.

Aber versteht mich nciht falsch, ich sag nicht das das alles einfach und kalter Kaffee wäre und ich will auch absolut nicht behaupten das ich zb alles wüsste. Auch in der Informatik kann und muss man das ganze leben über lernen um ein umfassendes Wissen aufzubauen aber es bleibt denke ich nach wie vor machbar und ein Informatikstudium in 10 oder gar 20 Jahren wird sich wahrscheinlich nicht sonderlich viel von dem heutigen Informatikstudium unterscheiden, weil in der Grundlagenforschung auf dem Gebiet relativ wenig Bewegung ist. (Quantencomputing wär mal was wirklich neues aber davon sind wir wohl noch nen gutes Stück entfernt).