[20:00] Lottoziehung in 02d 00:00h
[00:00] Songs gespielt gestern: 0
[00:01] Alles Gute an Beethoven
[20:00] Lottoziehung in 01d 00:00h
[00:00] Songs gespielt gestern: 0
[00:01] Alles Gute an corian
Trackmania Minecraft Andere Spiele
Antwort
Themen-Optionen
#1
Alt 10.01.09, 03:03:45
Fortschritt der Anwendungsentwicklung
blue
Benutzerbild von blue
Big Daddy
Registriert seit: 02.02.03
Alter: 37
Geschlecht: ♂
Beiträge: 4.974
IRC Zeilen: 10670
Quizrunden gewonnen: 3

Spenden-Award Spenden-Award Silberne Postauszeichnung Bronzener Topposter Blecherner Postaward Core-Award 

blue eine Nachricht über ICQ schicken
Nabend,

ich studiere jetzt seit 2 Jahren angewandte Informatik. Man kann sich also vorstellen, dass ich mich fast durch und durch mit der Programmierung von Anwendungen beschäftige. Hierdurch habe ich eine Flexibilität gegenüber verschiedener Programmiersprachen entwickelt und allein durch das Studium habe ich verschiedene Sprachen kennen gelernt. Speziell beschäftige ich mich stark mit C/C++ sowie Java. Schließlich aber, gibt es etwas, was mich am Fortschritt des gesamten Themas - Der Anwendungsentwicklung - stört.


Vor nicht einmal 15 Jahren noch, hat man sich als Programmierer noch viele Gedanken machen müssen was für Speicherbereiche man mit welchem Daten beschreibt und auch ganz besonders: Zu welchem Zeitpunkt man auf diese nutzt. (Man stelle sich vor Prozess a lese einen Speicherbereich, während Prozess b diesen gerade beschreibt - Das Chaos sollte klar sein)
Da aber Hardware (Besonders Speicher) mittlerweile relativ günstig geworden ist, steht dem Programmierer viel davon zur Verfügung. Desweiteren sorgen mittlerweile zuverlässige Betriebssysteme dafür, dass der Programmierer nicht seine eigenen oder auch andere Speicherbereiche überschreibt, wenn er gerade eine Variable nutzt.

Dennoch, man muss sich einfach vorstellen, man hat einen riesigen Speicherbereich, dieser wird komplett vom Betriebssystem verwaltet. (Hier ein Zwischenschub: Ein Betriebssystem ist nichts anderes als ein Emulator. Ein Betriebssystem emuliert ein einheitliches Rechnersystem, welches von den Hardwarekomponenten her völlig verschieden sein kann *bam*[Abstraktion Nr.1]). Kommt ein Programmierer also auf die Idee einen Speicherbereich zu beschreiben der ihm nicht zugeteilt ist, gibt das Betriebssystem - In der Regel - einen Fehler aus. Will ich als Programmierer also Speicher zum ablegen einer Zahl haben, so bitte ich das Betriebssystem darum, mir einen Speicherbereich zur Verfügung zu stellen, den ich nutzen kann.
Sagen wir, ich ich will 1024 Bytes haben, beschreibe ich 1025 Bytes (Buffer Overflow @ Google.de ), müsste ich vom Betriebssystem eine Fehlermeldung bekommen - Bekomme ich aber nicht! Warum: Weil ich als Programmierer selbst dafür sorgen muss, dass ich ausschließlich meine Speicherbereiche beschreibe. Dies trifft aber nicht auf jede Programmiersprache zu (Typischerweise betrifft dies native Programmiersprachen wie Assembler, C/C++, ...). Nun gibt es andere Programmiersprachen, die solche Probleme erst gar nicht kennen. Diese sind mittlerweile stark etabliert und jeder kennt Sie. Beispiele wären das .NET Framework (VB.NET, C#, ...) oder auch Java. Die große Frage: Warum kennen solche Sprachen keine Buffer Overflows?
Die Antwort ist ganz einfach: Diese Sprache laufen in einer Virtuellen Maschine, welche in der Lage sind, gewisse Probleme abzufangen und weiter zu verarbeiten (*bam*[Abstraktion Nr.2]). Jeder User merkt selbst, dass derartige Applikationen langsamer laufen bzw. einfach mehr Resourcen benötigen! Als Schlussfolgerung kann man also sagen: Umso mehr Abstraktionen, desto mehr Leistung/Resourcen werden vom System benötigt.
Aber das ist nicht das einzige! Umso mehr ich ein System abstrahiere, desto weniger bekommt der Enduser vom Ursystem zu sehen - Sich also wirklich in die Materie einarbeiten zu können und sie auch zu verstehen wird immer und immer schwieriger.


Nun aber war das dort oben lediglich eine Einführung in das, worum es mir eigentlich geht
Mein Problem an der ganzen Geschichte ist konkret, dass wir derzeit ein Seminar mit der Beschreibung "Fortgeschrittene Programmiertechniken" belegen müssen. In diesem Seminar lernen wir nichts anderes als Java. Eine Sprache, die weder Buffer Overflows, noch Zeiger kennt. Stattdessen pralt sie mit Exceptions, Interfaces, Collections ... Ich stelle mir aber jedes Mal in der Vorlesung die Frage "Was hast das mit Fortgeschrittenen Programmiertechniken zu tun?". Ich mein, jemand, der als völliger Anfänger zu programmieren beginnt und sich für den Anfang für Java entscheidet, der wird niemals herausfinden, was sich hinter einem Datentypen wie String verbirgt! Derartiges wird mittlerweile so stark abstrahiert, dass der "Programmierer" (Extra in Anführungszeichen, da ich so etwas einfach nicht Programmierer nennen kann) von den eigentlich Schwierigkeiten des Programmierens gar nichts mehr mitbekommt!

Genauso belege ich derzeit einen Kurs der sich Grafik- und Spieleprogrammierung nennt. Konkret muss ich dort mit einer Gruppe ein Spiel entwickeln und ich kümmere mich um die Engine. Man schaue sich allein mal die Hirarchie an die sich dahinter verbirgt (-> bedeutet 'wird genutzt von', | bedeutet 'oder'):
((Win32 API -> (DirectX API | OpenGL)) | (Unix -> X -> OpenGL)) ->
(Meine (Dx<Version> API) | (OpenGL)) ->
Engine ->
Spiel

All diese Schichten abstrahieren das gesamte System und derjenige, der dann irgendwann ein Spiel programmiert, bekommt nicht einmal Ansatzweise etwas davon mit, wie man überhaupt die DirextX/OpenGL API nutzt. Schließlich befindet sich dieser in der letzten Schicht (Spiel).


Schlimm finde ich einfach, dass ich exakt in die Generation geboren wurde, die sich mit APIs abfinden muss. Neue Standarts zu setzen ist für die heutige Programmierergeneration wirklich schwierig.
Klar, vor 15 Jahren musste man sich auch mit gewissen Dokumenten rumschlagen, aber diese waren einfach nicht so stark abstrahiert, wie sie es heute sind. Heute findet man Programmiersprachen die dem Programmierer komfort bieten, die den Programmierer unterstützen - Was natürlich auch nicht schlecht ist! Diese sind auch super dokumentiert, man findet Beschreibungen warum der Programmierer eine gewisse Funktion an welcher Stelle nutzen muss, aber worum es überhaupt geht, ist dem Programmierer an der Stelle meist nicht klar, da es einfach zu stark abstrahiert ist! Ich mein, ich denke, dass ich Java verstehe, aber auch nur deswegen weil ich gelernt habe was virtuelle Methoden und Zeiger/Referenzen sind (die Java erst gar nicht vorsieht).

(Fiktion) Man stelle sich jemanden vor, der in zehn Jahren anfängt Programmieren zu lernen .. dieser würde sicher mit eine Sprache wie Java3.x beginnen. Würde dieser angewandte Informatik studieren wollen, was genau würde er dort lernen? Würde man diesen Studenten ins ungewisse in die Welt von Java oder .NET schmeißen und es dabei belassen? Würde man ihm überhaupt die Basics der Programmierung (Zeiger etc.) beibringen? Würde man ihm - um ihm auf den gesamten Stand bringen zu können - die Regelstudienzeit vergrößern? ...

Man muss schon echt sagen, gerade die Computertechnologie ist sehr schnelllebig. Einige Programmiersprachen sterben, andere leben immer und immer weiter. Ich werde mich nach meinem Studium ganz sicher noch an weitere Sprachen gewöhnen müssen.
Man merkt jedoch, dass alles irgendwie immer und immer abstrakter wird, was wirklich hinter der gesamten Sache steckt interessiert den meisten Entwickler nicht mehr, sie wollen nur noch effiezient und schnell ihre Arbeit fertig kriegen - Und genau da kommt bei mir der Punkt an dem ich sage: "Nein! Ich will wissen was ich hier mache, ich will wissen wie effizient meine Daten abgespeichert werden". Klar, heutzutage implementiert man keinen Red-Black-Tree mehr, man nutzt die STL oder Collections! (Was natürlich in der BS Entwicklung anders aussieht, aber wer entwickelt im 21. Jahrhundert noch sein eigenes BS? )

Bewertung zu diesem Post
ze stimmt zu:

C++ ist böse
Die Unterschiede [der Programmiersprachen] sind enorm: Während Programme wie die Schreibsoftware Microsoft Word mit HTML programmiert wurden, greifen die Entwickler von Metzel-Games oft zu der Hacker-Programmiersprache C++. Wie gefährlich diese Sprache für Jugendliche ist, zeigte sich erst im September 2009, als der schülerVZ-Hacker Matthias L. vor seinem Selbstmord einen Abschiedsbrief verfaßte – in C++.
#2
Alt 10.01.09, 03:21:49
Ob3rst
Benutzerbild von Ob3rst
SCHRANZER
Registriert seit: 08.12.05
Style: Retro
Alter: 37
Geschlecht: ♂
Beiträge: 4.682
IRC Zeilen: 11037
Quizrunden gewonnen: 4

Silberne Postauszeichnung Bronzener Topposter Blecherner Postaward Core-Award 

Ob3rst eine Nachricht über ICQ schicken Ob3rst eine Nachricht über MSN schicken
Du hast es ja selbst schon gesagt. Speziell die Computer-Technologie entwickelt sich so rasant, da wäre es JETZT schon fast ein Unding alles unterzubringen. Klar man kann sagen das das Studium dann halt einfach länger geht. Nur wo soll das enden?

Dein Beispiel mit dem Java 3.x
Sicherlich ist es von Vorteil zu wissen, wie sich das ganze überhaupt aufbaut (sry aber kenn mich mit Programmieren so gut wie gar nicht aus, deshalb schreib ichs einfach mal so wie ich denke^^). Doch macht es in 10 Jahren überhaupt noch einen Sinn das zu wissen?

Anderes Beispiel:
Damals arbeitete man noch im DOS, heutzutage kannst du nichtmal mehr die Console aufrufen. Wieso? Weil es veraltet ist und keiner es mehr braucht. Ok, hingt vll. etwas das Beispiel aber ich glaub man weiss, was ich meine.

Edith: Wenn ich deinen umfangreichen Beitrag jetzt überhaupt richtig verstanden hab und nicht völlig vorbei rede


#3
Alt 10.01.09, 09:38:03
ze
Benutzerbild von ze
Admin a.d.
Registriert seit: 07.04.03
Style: Retro Dark
Geschlecht: ♂
Beiträge: 5.763
IRC Zeilen: 4014
Quizrunden gewonnen: 11

Spenden-Award Spenden-Award Goldener Topposter Silberne Postauszeichnung Bronzener Topposter Blecherner Postaward Core-Award 

ze eine Nachricht über ICQ schicken ze eine Nachricht über AIM schicken ze eine Nachricht über MSN schicken ze eine Nachricht über Yahoo! schicken ze eine Nachricht über Skype™ schicken
Ich finde das einen genialen Artikel, Blue.
Bei mir ist es so, dass ich das eben aus dem anderen Blickwinkel sehe. Ich habe zwar nie ernsthaft programmiert, aber hobbymässig in GW-Basic und Quickbasic schon komische spielen (mit ersten grafischen elementen - "DRAW") und auch mal Assembler probiert mit ein paar "Hallo Welt"-Type programmen :-)

Was einem sofort klar wird, ist dass das heute Zeugs sooo komplex ist, das könnte man nie im Leben mit dem einfachen Handwerkszeugs macchen von früher. Das wär wie so nen persischen Teppich von Hand knüpfen wo du 20 Jahr brauchst und es hinterher dein Lebenswerk war

Gleichzeitig ist es frustrierend, wie du oben schreibst. Es gibt auch innerhalb von Computern immer weniger "Universalgenies". Vor 200 Jahren gab es ja noch generelle Universalgenies was "Wissenschaft" angeht, egal ob Biologie, Physik, Medizin, Chemie. Die gibt es ja aufgrund der weiteren Spezialisierung auch nicht mehr.

Sehr interessantes Thema dass du da anreisst, freue mich auf weitere Beiträge!

gruss, ze

Rentner
#4
Alt 10.01.09, 11:11:11
sk1ll3R
Benutzerbild von sk1ll3R
Hausmeister Täglich verrückt!
Registriert seit: 19.11.06
Alter: 38
Geschlecht: ♂
Beiträge: 4.404
IRC Zeilen: 7673
Quizrunden gewonnen: 126

Spenden-Award Spenden-Award Spenden-Award Silberne Postauszeichnung Bronzener Topposter Spenden-Award Blecherner Postaward 

sk1ll3R eine Nachricht über ICQ schicken
Bin zwar noch kein richtiger Wissenschaftler, aber ich merke in der Chemie auch, dass es so viele unterschiedliche Sparten, Methoden, Wissensgebiete etc. gibt, dass es für einzelne Menschen schier unmöglich ist, diese komplette Wissenschaft zu verstehen und anwenden zu können. Daher wir man mit fortschreitender Zeit immer mehr "Fachidioten" vorfinden. Ich merke das teilweise auch an unseren Profs. Bei einigen Älteren merkt man, dass sie von (fast) allen Fachgebieten Ahnung haben und auch weniger stark zwischen diesen differenzieren, bei den Jüngeren hat man eher den Eindruck, sie kennen nur ihr Fachgebiet so richtig gut und in den anderen haben sie kaum mehr Wissen als ein "gewöhnlicher" Dipl.-Chem.
Allerdings glaube ich, dass man diese generelle Entwicklung nur schwer aufhalten kann, da Wissenschaften nunmal immer komplexer werden und es ohne Spezialisten heutzutage nicht mehr geht. Dass dabei aber wie in deinem Beispiel einfach essentielle Dinge unter den Tisch gekehrt werden, ist natürlich durchaus bedenklich.

Um auf dein Beispiel zu kommen: leider kenne ich mich als Chemiker mit Info nicht so sehr aus. Wir haben allerdings zur Zeit eine Vorlesung, die sich "Prozedurale Programmierung" nennt. Hier lernen wir die Sprache C (nur C, nicht C++, C# etc.) und es ging wirklich vom Urschleim los und hat nach und nach sich zu einem kompletten Gerüst zusammengefügt. Wir haben auch die von dir angesprochenen Stichwörter wie String, Char.... und natürlich Zeiger, malloc(), free() etc. gelernt und wie man mit den Speicherzuweisungen sinnvoll umgeht.
Allerdings ist das eben eine Grundveranstaltung für Nebenfächler, die ansonsten mit Programmierung nicht viel am Hut haben und denen deshalb die basics nahe gebracht werden sollen. Es kann durchaus sein, dass die Info-Studenten der kommenden Generationen von solchen vermeintlich einfachen, rudimentären Dingen überhaupt nichts mehr mitbekommen, weil es inzwischen viel mächtigere Sprachen gibt, die mehr Möglichkeiten bieten (auch wenn man im Endeffekt überhaupt nicht mehr weiß, was eigentlich hinter einzelnen Schlagwörtern steckt und der Rechenaufwand enorm steigt).
Ich glaube ehrlich gesagt aber nicht, dass man daran großartig was ändern kann, schließlich wird man heutzutage auch niemanden mehr überreden können, in Maschinencode zu programmieren.

Zocker, Musiker und Chemiker aus Leidenschaft
#5
Alt 10.01.09, 14:34:17
Zahl
Benutzerbild von Zahl
Senior Member Täglich verrückt!
Registriert seit: 29.01.03
Alter: 37
Geschlecht: ♂
Beiträge: 11.514
IRC Zeilen: 180946
Quizrunden gewonnen: 76

Goldener Topposter Silberne Postauszeichnung Bronzener Topposter Blecherner Postaward Core-Award 

Zahl eine Nachricht über ICQ schicken
Das Problem ist immer, den richten Blickwinkel zu haben, welchen es wahrscheinlich nicht mal gibt.
Ich bin auch jemand, der lieber bescheid weiß, was unter der Haube passiert, darum habe ich mich schon intensiver mit C und C++ beschäftigt, mit einfachen Datenstrukturen, der Speicherverwaltung des Computers an sich, etc...
Nun ist es ja in den höheren Sprachen wie Java und C# so, dass vieles vereinfacht wird und schon vorgegeben ist, z.B. gibt es Vektoren, Listen, Collections, und Leute die direkt in diesen Sprachen eingestiegen sind, wissen oft nur, wie diese zu Benutzen sind, nicht aber, was wirklich passiert, wenn man dort Elemente einfügt oder entfernt.
So ist es mir im Studium schon ein paar mal so gegangen, dass sich jemand über ein extrem langsam laufendes C# oder Javaprogramm beschwert hat, und wenn man sich das dann angeguckt hat sah man, dass dort beispielweise irgend eine Liste o.ä. völlig ineffizient genutzt wurde, und man musste der entsprechenden Person erstmal erklären, was dort eigentlich noch alles im Verborgenen passiert, beispielweise wird zig mal die gleiche Berechnung ausgeführt, und durch eine kleine Umstrukturierung spart man mal eben 100000 Rechenoperationen pro Schleifendurchlauf mit dem gleichen Endergebnis.

Andererseits war es mit C++ Anfangs nicht anders. Auch dort wird schon viel abstrahiert im Vergleich zu C oder Assembler, wo sich vielleicht zu Zeiten des 75MHz Computers einige alteingesessene Programmierer die Hände überm Kopf zusammen geschlagen haben, wenn sie mal den Assemblercode gesehen haben, den C++ so generiert.
Z.B. verwendet der delete Befehl in C++ auch mehr oder weniger nur den free() Befehl aus C, mit einigem Kram drumrum, den man sicher bei direkter Verwendgun von free() besser umsetzen könnte. Heute macht es lediglich keinen Unterschied mehr, da wir 3GHz in unseren Rechnern haben.
Genau so wird es denke ich weiter gehen. C# eignet sich schon heute hervorragend für einige Aufgaben, und wenn wir in 5 Jahren irgend welche ineffizienten Programme auf 6GHz 8kern CPUs Laufen lassen mit 64GB Hauptspeicher, dann weint dem auch keiner mehr nach.
Die Frage ist immer, wo man sich im Jetzt plaziert.
So gibt es auch heute noch Leute, die nur auf C setzen und ab und zu mal C++, und alles was in einer VM läuft für Teufelswerk halten. Ich denke, man sollte sich einfach in der Mitte plazieren (wobei das wahrscheinlich auch schon wieder Definitionssache ist.)
Nicht jeden neuen Scheiß der gehyped wird sofort mitmachen, aber auch nicht noch 10 Jahre mit Windows 2000 rumgurken. Erstmal abwarten, bei etwas Solidem bleiben, aber das neue nicht aus den Augen verlieren. Es kann sich schließlich immernoch etablieren.
Ich bastel z.B. gerne in C++ rum, vor allem weils schnell ist. Für simple GUI Anwendungen setze ich immernoch auf VB6, es hat zwar nur sehr beschränkte OOP Möglichkeiten, aber die Anwendungen lassen sich schnell zusammen schustern, es gibt keine Overflows, und das Debuggen ist auch bequem. Für Anwendungen wo man viel Fertigzeug gebrauchen kann hält dann schonmal C# her, da wird man ja mit Klassen für alle möglichen und unmöglichen Einsatzgebiete nahezu erschlagen.


風向轉變時,有人築牆,有人造風車
#6
Alt 10.01.09, 18:44:15
maphios
Benutzerbild von maphios
Moderator
Registriert seit: 20.11.06
Style: Retro
Alter: 36
Geschlecht: ♂
Beiträge: 1.376
IRC Zeilen: 0

Bronzener Topposter Blecherner Postaward 

Wie ze so schön gesagt hat, es gibt eben keine "Universalgenies" mehr. Die Menschen haben in allen Teilgebieten so viel Wissen angehäuft, dass sich das kein einzelner mehr merken kann. Daher muss man sich spezialisieren, wenn man heute irgendwo mitentwickeln will oder eben bei einem Thema voll durchsteigen möchte.

Ich finde man kann das im Fall von Computern mit dem Auto vergleichen.
Genauso selbstverständlich wie in jedem Haushalt ein PC vorhanden ist gibt es auch ein Auto.
Benutzen kann es eigentlich jeder und wer den Führerschein gemacht hat weiß auch wie man es bedient.
Was dann konkret passiert wenn ich das Gaspedal drücke oder die Kupplung, oder wie die Rädchen ineinander greifen wenn ich schalte, das weiß hingegen kaum einer. Es würde wohl auch die große Mehrheit überfordern, wenn sie die genauen Vorgänge alle wissen wollten die in einem Auto so vorgehen.

Nun gibt es auch wie im Computerbereich auch im Autobereich immer ein paar Cracks, die ein bisschen mehr drauf haben wie Otto Normalverbraucher.
Solche "Bastler" sind dann schonmal in der Lage einen kompletten Motor eines älteren Gefährtes zu zerlegen und wieder zusammenzubauen ohne den Überblick zu verlieren und auch ohne etwas kaputtzumachen.
Das ging eben mit den früheren, einfacher gestrickten Auto- oder Motorradmotoren, wenn man sich ein gewisses Fachwissen angeeignet hat.

Heutzutage ist es für einen einzelnen wohl unmöglich einen Motor eines modernen Neuwagens aus dem Auto zu bauen, ihn auseinanderzunehmen und wieder korrekt einzubauen. Die Technik ist einfach zu komplex geworden, es spielen zu viele Anwendungen mit hinein.
Auch bei den Autoherstellern baut ja ein ganzes Team von Leuten den Motor und nicht mehr ein einzelner.
Ich glaube auch nicht, dass eine einzelne Person dazu imstande wäre, weil einfach das Wissen das man dazu bräuchte zu viel geworden ist, als dass man es alleine schafft.

So ähnliche sehe ich das beim Programmieren auch, bloß dass das eben noch nicht so fortgeschritten ist wie in der Autobranche und es eben zur Zeit noch möglich ist ganz alleine quasi einen "Motor" zu bauen. Aber da sich auch die Computerbranche weiterentwickelt wird das vielleicht bald nicht mehr möglich sein. Dann kann man als einzelner vielleicht auch nicht mehr bis zum Grund "durchblicken".

Aber wie beim Auto steht eben der Nutzen im Vordergrund und wie Zahl schon gesagt hat, bei einem 3 GHz Prozessor ist es eben egal ob das jetzt eine Nanosekunde länger oder kürzer ist. Die Feinheiten verschwinden da einfach.

Das muss ja nicht heißen, dass auch das Wissen verschwindet, sondern, dass dieses Wissen vielleicht einfach schon nicht mehr die große Rolle spielt und durch neues ersetzt wird.

Bewertung zu diesem Post
ze stimmt zu: Stimmt. Früher konnte man auch noch extrem viel selber flicken am Auto, heute sollte man das ja nicht mehr

"Mich hat der Erfolg von Ikea in Japan nicht überrascht. Den Japanern ist es doch wurst, wenn beim Tisch die Beine fehlen." - Harald Schmidt
#7
Alt 10.01.09, 20:12:51
Zahl
Benutzerbild von Zahl
Senior Member Täglich verrückt!
Registriert seit: 29.01.03
Alter: 37
Geschlecht: ♂
Beiträge: 11.514
IRC Zeilen: 180946
Quizrunden gewonnen: 76

Goldener Topposter Silberne Postauszeichnung Bronzener Topposter Blecherner Postaward Core-Award 

Zahl eine Nachricht über ICQ schicken
Korrekt, der Vergleich hinkt aber etwas. Einen Autofahrer vergleicht man mit einem Computerbenutzer, nicht mit einem Programmierer. Der Kfz Mechaniker wäre der treffende Vergleich. Und der muss sehr wohl bescheid wissen, was im Auto passiert, wenn man Gas gibt.
Ich weiß nun nicht wie es beim Auto ist, aber in der Informatik ist es teilweise auch etwas gefährlich, nicht bescheid zu wissen. So können Programmierer, die kein Hintergrundwissen haben, und sich ihre Anwendung quasi nur aus Frameworks zusammenbauen, auch leicht dabei Sicherheitslücken einbauen. Speziell im Bereich der Webanwendungen. Passiert immer mal wieder.
Auch aus diesem Grund will ich immer ein gewisses Maß an Einsicht in die Materialien haben, mit denen ich entwickel und die ich verwende.
Ein "du gibst einfach den Befehl ein und dann passiert das was du willst" macht mich verrückt.


風向轉變時,有人築牆,有人造風車
#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).
#9
Alt 19.01.09, 17:48:31
blue
Benutzerbild von blue
Big Daddy
Registriert seit: 02.02.03
Alter: 37
Geschlecht: ♂
Beiträge: 4.974
IRC Zeilen: 10670
Quizrunden gewonnen: 3

Spenden-Award Spenden-Award Silberne Postauszeichnung Bronzener Topposter Blecherner Postaward Core-Award 

blue eine Nachricht über ICQ schicken
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.
Mit Zeigern kann man heutzutage nichts mehr böses anstellen. Seit Linux 2.4. und Windows Vista besitzen die meisten User-Betriebssysteme effiziente Speicherschutzmechanismen. Sobald man auf Speicherstellen zugreift, die nicht zulässig sind, wird die Applikation mit einem Fehler gekillt.

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.
Absolut kein Vergleich. Das wirklich interessante an einem Browser ist die Rendering Engine, die beim Chrome auf das Open-Source Projekt WebKit basiert. (Ebenso der Safari basiert darauf). Das einzig interessante am Chrome Browser ist der JavaScript Interpreter, der aber mittlerweile auch nicht mehr wirklich so revolutionär ist, da u.a. der Opera in manchen Bereichen sogar noch schneller ist.
Im Vergleich dazu darf man sich bei Betriebssystemen mit Hardware Interrupts, Speicher-, Prozessverwaltung, Speicherschutz, Modulen/Treibern, Netzwerken .. sogar der allgemeinen Architektur rumschlagen.


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.
Es geht nicht um die Konzepte, es geht einfach darum, dass man heutzutage nicht mehr auf dem ersten Blick sieht, was APIs oder gar Programmiersprachen (Stichwort Java, .NET) wirklich machen.
Man betrachte einfach mal den Datentypen 'String'. Unter C gibt es diesen Datentyp nicht einmal, man muss auf Character-Arrays zurückgreifen und wenn man nicht auf den 'String' verzichten will, der muss ihn sich selbst entwickeln. Dies ist aber erst gar nicht möglich ohne Zeiger und dynamischer Speicherallozierung.
Programmieren, wie man es aus C/C++ kennt, ist also in Java/.NET erst gar nicht mehr möglich. Man bekommt dort einfach irgendeine extrem umfangreiche API, die man nutzt. Was aber unter der Haube steckt - ist völlig undurchsichtig. Davon ab, ich will nicht sagen, dass programmieren mit Java nicht komfortabel ist! Aber wir haben bei uns welche im Semester, die eine Java Hashtable nutzen und nicht einmal wissen, was überhaupt eine Hashtable ist.

C++ ist böse
Die Unterschiede [der Programmiersprachen] sind enorm: Während Programme wie die Schreibsoftware Microsoft Word mit HTML programmiert wurden, greifen die Entwickler von Metzel-Games oft zu der Hacker-Programmiersprache C++. Wie gefährlich diese Sprache für Jugendliche ist, zeigte sich erst im September 2009, als der schülerVZ-Hacker Matthias L. vor seinem Selbstmord einen Abschiedsbrief verfaßte – in C++.
#10
Alt 19.01.09, 19:20:17
RypeL
Registered Users
Registriert seit: 10.02.08
Beiträge: 267
RypeL eine Nachricht über ICQ schicken
Naja im eigenen Prozessspeicher kann man mit Zeigern schon ordentlich unfug wie memory-leaks und vor allem unübersichtliche "verzeigerungen" erstellen. Man kann mit den Zeigern zumindest im eigenen Prozessraum beliebige Speicherstellen addressieren, wohingegen in Java nurnoch Referenzen auf Objekte möglich sind. Dadurch kann man auch seine Strings nichtmehr über Zeigerarithmetik wie in C verwalten, aber naja ich trauer den C Strings nicht nach. Ich hab einmal ein relativ großes C Programm geschrieben und das später nach Java portiert. In Java war das Programm viel kürzer und übersichtlicher.

Detailwissen zahlt sich immernoch aus wenn man zb Gebrauch von Collections macht. Das wichtige sind ja eigentlich die Datenstrukturen und Algorithmen, nicht etwa die Unterschiede zwischen einem C und einem Java String. Und wer weiterhin lieber in C programmieren will kann immernoch gute Jobs im Bereich embedded Hardware finden, wo C sicherlich noch eine ganze Weile zum Einsatz kommen wird.
Antwort
Lesezeichen
Facebook

Direkt antworten
Nachricht:
Benutzername: 
Email (nicht ausfüllen!): Sicherheitsgrafik
Optionen

« Vorheriges Thema | Nächstes Thema »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu
Aktivität
Chat (20 Min)
0 Zeilen

Teamspeak 3

Alle Zeitangaben in WEZ +2. Es ist jetzt 06:59:48 Uhr.


Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Template-Modifikationen durch TMS
Die Betreiber haften nicht für die Inhalte der User. Die Beiträge spiegeln ausschließlich persönliche Meinungen wider, und nicht die der Seitenbetreiber.