Christian Fein
Erfahrenes Mitglied
Gawayn hat gesagt.:In der Tat. Aber darum geht es ja nicht, denn alle schöne informatische Theorie nützt gar nichts, wenn es niemanden gibt, der in der Lage ist, das ganze auch effizient zu implementieren. Das beklagen doch auch die Firmen: Informatikabsolventen haben schlicht keine Ahnung von Computern. Statt dessen werden sie vollgestopft mit mathematischen Theorien, die für die Praxis entweder viel zu speziell oder viel zu allgemein sind -- je nachdem.
Nein Firmen die Individual Software schreiben (und das ist die grösste Zahl an Softwarefirmen) wollen Porgrammierer die keine Flausen im Kopf haben sondern eine gegebene Aufgabe kosteneffizient umsetzen.
Ob dieser ein Hardware-Crack ist oder nicht und wenn er wollte selber einen Prozessor planen
könnte, ist sowas von Zweitrangig ...
Oh gott, da hat jemand die Entwicklung der letzten Jahre verschlafen.Gawayn hat gesagt.:Was für ein Design denn? Die Anwendung selber wird sowieso auf dem Reißbrett entworfen, dafür brauche ich keine Programmiersprache.
Zudem rate mal was "Anwendung auf dem Reissbrett entworten" bedeutet. Genau Softwaredesign, Object Orientiertes Design, UML, MDA
Die schlimmen Dinge passieren zumeist mit C und C++ und anderen Hardwarenahen Sprachen.Gawayn hat gesagt.:Die ist lediglich für die Implementation gut. Ich lerne den Entwurf von Anwendungen nicht deswegen besser oder ich entwerfe meine Anwendungen nicht besser, weil meine Sprache keine Pointer verwendet (wie z.B. Java). Das Gegenteil ist der Fall, denn ich setze mich so über wichtige Hardwareeigenschaften hinweg. In der OOP kann jemand, der keine Ahnung von Hardware hat, schlimme Dinge tun, die nicht auffallen, weil sie immer noch OOP-konform sind.
Oder setze mal die Anzahl von BufferOverflows von IIS + Apache gegenüber den anzahl
von Bufferoverflows von Tomcat + Resign gegenüber.
Die Entwicklung von sicherer Software mit C / C++ extremen Masse Zeit & Kostenaufwendig da es sich mit diesen Sprachen viel einfacher in den Schuss schiessen lässt.
Wenn alle Programmierer sich top auskennen würden und keine Fehler machen würden, dann
sähe es anders aus, aber daran zu glauben ist das gleiche wie zu glauben das der Kommunismus
funktionieren kann, das scheitert an einem ganz wesentlichen Punkt, die Schwächen der Menschen.
Demnach ist eine Programmiersprache die einen zu sauberer Programmierung anhält, der richtige
Weg. Java verlangt im Vergleich zu C++ das eine Ausnahme die im aufgerufenen Code erfolgt behandelt wird, C++ überlässt das eher dem Zufall (bzw der Fehlerfreiheit der Programmierer).
Die IT wächst, während früher sich nur wenige Firmen individualsoftware Leisten konnten, geht es
heute in einen Bereich in dem dieser Weg vielen Firmen mehr offen steht. Durch niedrigere Softwarepreise, dank der starkenden Konkurrenz unter Softwareherrstellern, müssen Kosten gesenkt werden. Dies geschieht u.a dadurch das eine Software viel schneller einen Stabilen Grad erreicht. Unabhängige Studien und der Markt ansich bescheinigt Java im durchschitt 50% Entwicklungszeit senkung gegenüber C / C++.
Zumal sehe das auch aus einer anderen Richtung.
Wenn ich einen Logger brauche, so greife ich auf bestehnde Librarys zurück (z.b Commons Logging) denn weshalb sollte ich meine eigene Komponente entwickeln, anstatt diese zu nehmen die seid Jahren entwickelt, gedubbuged und produktiv eingesetzt wird?
Es gibt keinen Grund, ausser mann will sein Projekt aufblähen, oder mann macht es privat und hat Spass daran.
Genauso ist das mit dem Hardwarezugriff, wieso sollte ich selbst dafür verantwortlich sein meine Objecte im Heap zu hinterlegen und wenn nicht mehr benötigt den Destructor aufzurufen?
Nein da nehm ich doch lieber eine Software die dies seid mehr als 10 Jahren explizit weiterentwickelt, debugged und schon weiltweit produktiv mehrere millionen mal eingesetzt wird.
Hier heisst das Zauberwort mit dem mann kosten senken, und stabilere bessere Software schreiben kann, Wiederverwendung.
Gawayn hat gesagt.:Darum geht es ja nicht. Man soll nicht Assembler lernen, um damit zu programmieren, sondern um zu erfahren, wie ein Computer funktioniert. Genausowenig soll man C lernen, weil das "die beste Sprache" sei oder so.
Wer Assembler lernen will um zu wissen wie Computer funktionieren der soll das tun. Von nöten ist es nicht, es gab Rechner schon bevor es Assembler gab, die Konzepte dieser Rechner sind
zu einem beachtlichen Teil auch noch gültig.
Wer wissen will wie ein Motor funktioniert, wird das sicherlich erfahren wenn er eine Nockenwelle auswechselt, aber er wird genauso viel erfahren wenn er sich ein Buch nimmt, ins Technik Museum geht und sich ein Querschitt eines Motors anschaut und mal am Rädchen dreht was die Nockenwelle in bewegung setzt.
Genauso ist es mit Assembler, Assembler kann helfen zu verstehen wie ein Rechner funktioniert, von nöten ist es aber nicht und mann kommt weniger Aufwendig zu den selben Kentnissen.
Zumal diese Kentnisse nicht in diesem Masse wie ein altgedienter Assembler Programmierer sie kennt von nöten sind.
Gawayn hat gesagt.:Die ganzen Diskussionen um die beste Programmiersprache sind unsinnig, weil der fähige Informatiker nicht danach fragt, welche Sprache er für einen Job können muss, sondern welchen Job er zu erledigen hat. Java ist eine wunderbare Sache -- aber nur, wenn man weiß, wie sie funktioniert. Sonst werden die nachfolgenden Kollegen u.U. die Hände über dem Kopf zusammenschlagen ob des Schundes, den man da verzapft hat. Dass dieser Schund objektorientiert ist, macht ihn nicht besser.
Richtig, mann muss wissen wie die VM sich verhält. Aber es ist wichtig unterscheiden zu können
ob mann eine Threadsichere Collection braucht oder aber dies nicht notwendig ist. Mann muss wissen das die VM bei:
String a = "ein String";
Strinb b = "ein String";
bei if(a==b) return false;
Mannchmal false und mannchmal true zurückgeben kann und das dies auch Sinn macht, aufgrund der Art wie die Referenzen auf Strings gecached werden.
Er muss wissen welche Vorteile (und wieso ein StringBuilder gegenüber den String hat).
Er muss absolut nicht wissen was ein AX / DX Datenregister ist. Das hat für ihn 0,0 Wert. Ausser er will es aufgrund von Interresse wissen.
Gawayn hat gesagt.:Und warum das alles? Wem dieses Grundwissen fehlt, das man über Assembler etc. erlangt, der hat Probleme, sich schnell in neue Technologien einzuarbeiten. Und das ist Voraussetzung, um in der IT-Branche mithalten zu können.
Nein das Grundwissen was er benötigt um in der IT-Branche mitzuhalten ist ein ganz anderes. Es geht um Konzepte um Paradigmen wie MVC und MDA.
Es geht verständniss für GridComputing und allgemeine IT Konzepte, es geht um offenheit für neue Errungenenschaften TDD.
Gawayn hat gesagt.:In der OOP brauche ich ebensoviel Wissen über die Hardware wie sonst auch. Sonst bin ich nicht in der Lage, einen Algorithmus effizient zu entwerfen und zu implementieren. Mathematisch elegante Theorien lassen sich noch lange nicht deswegen auf einem Mikroprozessor effizient implementieren, weil sie elegant sind.
Wieso sollte ich mich hinsetzen und einen Algorythmus schreiben der mir ein Array von Auto Objecten nach der breite sotiert, wenn ich den vorhandenen, massenhaft geprüften sort Algorythmus der J2SE nehmen kann und ihm einen Comporator gebe?
Ich habe damit meinen Algorythmus innerhalb von 20 sekunden implementiert während du dir noch gedanken machst wie er aussehen könnte.
Nachdem du deinen Algorythmus über lange Zeit implementiert und verbessert hast, geht deine
Sotierung 0.001 Sekdunden während meine Sotierung 3 mal langsamer ist und 0.003 Sekunden verschlingt.
Versuch aber mal deinem Chef klar zu machen das er 4 Stunden entwicklungszeit für 0.002 Sekunden Verbesserung bezahlt.
Gawayn hat gesagt.:Man muss wissen, wie die Hardware funktioniert, um seine Algorithmen effizient entwerfen zu können. Und das ist auch -- oder vielleicht sogar gerade -- in der OOP ein wichtiges Thema, weil die OOP-Prinzipien so manche Performancebremse in die Entwicklung eingeführt haben.
Ja OOP kann hinderlich sein, wenn irgend ein Depp tausende von Objecte instanziert wo es auch
einfach ein Array von integer werten getan hätte. Das sind aber eher jene die sich anstatt damit zu beschäftigen wo Java Nachteile hat, sich lieber mit irgendwelchen Registern rumgeschlagen haben.