flashpixx Geschrieben 8. Januar 2013 Teilen Geschrieben 8. Januar 2013 Wir leben nicht mehr im Jahr 1982. Wenn der RAM nicht reicht, schiebt man noch einen Riegel nach. Das wird billiger als die Entwicklerzeit, speichereffizient zu programmieren, bzw. das Programm noch weiter zu optimieren. Ich habe hier Problemstellungen in denen die Datenmenge, mit der der Algorithmus arbeitet quadratisch zur Eingabemenge wächst, d.h. ich bekomme durchaus in Speicherbereiche, bei denen es gar nicht mehr möglich ist, es durch das "Nachschieben eines neuen Ramriegels zu lösen". Weiterhin muss ich die Daten, die im Speicher liegen alle immer präsent haben, um eine schnelle Berechnung zu gewährleisten, d.h. da macht es durchaus Sinn zu überlegen, wie die Daten konkret im Speicher abgelegt sind, um eben eine schnellstmögliche Abarbeitung zu erhalten. Und genau dieses Problem ist z.B. mit Java durchaus ein Problem, denn jedes Mal, wenn ich Daten als Objekte repräsentiere und mal eben neue Objekte erzeuge, die einfach eine Kopie der Daten im Memory erzeugen, dann wird mir die Anwendung ganz schnell den Speicher bis ans Maximum verbrauchen, denn der GC wird ja nicht sofort den Speicher bereinigen. Sprich Speicherallokierung und Anordnung der Daten im Ram sind durchaus Punkte, die zur einer effizienten Lösung wichtig sind. Man kann eben nicht einfach sagen "macht ja der Interpreter und wenn der Ram nicht reicht, dann schmeiss einfach mehr Speicher druff" Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lilith2k3 Geschrieben 8. Januar 2013 Teilen Geschrieben 8. Januar 2013 @Flash "macht ja der Interpreter und wenn der Ram nicht reicht, dann schmeiss einfach mehr Speicher druff" So war das ja nicht gemeint Obwohl es nicht in jedem Falle schädlich ist, noch ein bisschen mehr RAM zu haben... In dem Fall wäre evtl. zu überlegen, ob Java die richtige Sprache ist. Sprich Speicherallokierung und Anordnung der Daten im Ram sind durchaus Punkte, die zur einer effizienten Lösung wichtig sind. Damit wäre Java vom Tisch. Es geht ja mir ja nicht darum zu sagen, dass Speicherplatz heute kein Problem darstellt, sondern ein für viele Bereiche nicht besonders relevantes Problem darstellt. Und es gilt eben auch die Rechnung zu machen, wie ich eben angedeutet habe, was billiger wird: Entwicklerzeit oder Speicherbausteine. Und wenn ich meinen Tagessatz sehe, dafür kann man eine Menge an RAM-Riegeln kaufen. Btw. gibt's einen netten Vortrag von Herb Sutter, der gleich zu Beginn 3 schlagende Argumente für C++ bringt: C++ ist am besten dort, wo Performance/$ gefragt ist - performance / watt (datacenter), performance/Transistor, Performance/Cycle. C++ and Beyond 2011: Herb Sutter - Why C++? | Channel 9 Im Umkehrschluss heißt das: wo diese Faktoren vernachlässigbar sind, ist auch C++ vernachlässigbar. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pintman Geschrieben 8. Januar 2013 Teilen Geschrieben 8. Januar 2013 Ich kann dir in vielen Punkten zustimmen lilith2k3. Denkt nicht an Optimierung, wenn es noch nichts zu optimieren gibt. Sorgt für gut lesbaren, wartbaren und erweiterbaren Code. Dann kann man sich später an die Flaschenhälse machen. Viele Optimierungen werden auch schon automatisch vom Compiler erledigt. So findet man häufig Flaschenhälse an Stellen, wo man niemals mit gerechnet hätte: z.B. Stringkonkatenation in Java. Vermutlich bringt ein anderer Algorithmus und eine andere Datenstruktur meist mehr Speicher- und Zeitgewinn als Zeigerarithmetik. Hier dreht man meist im Promillebereich an der Statistik. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 8. Januar 2013 Teilen Geschrieben 8. Januar 2013 Obwohl es nicht in jedem Falle schädlich ist, noch ein bisschen mehr RAM zu haben... Da muss ich ja direkt zustimmen, das stimmt in den meisten Fällen In dem Fall wäre evtl. zu überlegen, ob Java die richtige Sprache ist. Ich denke um auch zum Thread zu kommen, dass das eigentlich der wichtigste Punkt ist: Ich wähle die Sprache anhand der Problemstellung und ich codiere nicht mein Problem in einer Sprache die ich kann (wenn ich z.B. logische Strukturen brauche, dann nehme ich sicher nicht C++, sondern Prolog). Es geht ja mir ja nicht darum zu sagen, dass Speicherplatz heute kein Problem darstellt, sondern ein für viele Bereiche nicht besonders relevantes Problem darstellt. Und es gilt eben auch die Rechnung zu machen, wie ich eben angedeutet habe, was billiger wird: Entwicklerzeit oder Speicherbausteine. Und wenn ich meinen Tagessatz sehe, dafür kann man eine Menge an RAM-Riegeln kaufen. Das ist auch klar und sehe ich ebenso, nur ist über die letzten Jahre bei mir der Eindruck, dass man lieber am "Entwickler spart und lieber Hardware drauf wirft". Ich denke der Punkt liegt in beiden Bereichen, ich muss für die Hardware, die ich habe, einen sinnvollen Algorithmus in einer dafür passenden Sprache entwerfen. Mein Eindruck ist leider, dass eben Sprachen wie PHP oder Java gerne genommen werden, weil es aktuell "state-of-the-art" ist oder weil sie eben im Moment eine Boomphase haben, anstatt zu überlegen ob es Sinn macht sie zu verwenden. C++ ist am besten dort, wo Performance/$ gefragt ist - performance / watt (datacenter), performance/Transistor, Performance/Cycle. [...] Im Umkehrschluss heißt das: wo diese Faktoren vernachlässigbar sind, ist auch C++ vernachlässigbar. Full Ack, wobei ich sagen muss, dass es "manchmal auch die Mischung" macht. Ich habe hier den Fall, dass der Algorithmus in C++ geschrieben ist, aber zusätzlich eine Anbindung via Java möglich ist, sprich Java callt die native Funktion aus der DLL. Die Daten werden lediglich von Java in C++ Datentypen übertragen (vice versa). Die Umwandlung sind bezüglich der Performance Konstanten und somit vernachlässigbar. Ich bin der Meinung, dass es heute wichtig ist, wie man ein gesamtes System / Modell so weit abstrahieren kann, dass man möglichst gute Performance und dazu auch eine gute Codebasis schafft. Z.B. wie in dem Fall, die Verbindung aus zwei Sprachen, wobei natürlich das ein wirtschaftlicher Aspekt ist, denn ich brauche hier das Know-How von Entwicklern, die beides können. Dann kann man sich später an die Flaschenhälse machen. Viele Optimierungen werden auch schon automatisch vom Compiler erledigt. Nein, der Compiler kann einen Algoritmus nicht optimieren, der Compiler kann nur den Code optimieren z.B. kann der Compiler Nebenläufigkeiten nicht automatisch erzeugen. Optimierung muss in erster Linie auf der obersten Algorithmusebene statt finden, der Compiler optimiert nur auf Maschinenebene. Vermutlich bringt ein anderer Algorithmus und eine andere Datenstruktur meist mehr Speicher- und Zeitgewinn als Zeigerarithmetik. Das ist definitiv so, Bitschubserei sollte man definitiv nicht machen. IMHO muss ich mir Gedanken machen, wie mein Problem strukturiert ist, danach die passende Sprache mit den passenden Datenstrukturen wählen, um das Problem zu lösen und darauf aufbauend, wenn das Problem gelöst werden kann, evtl eine passende API entwerfen, um die Anbindung flexibel zu halten Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pr0gg3r Geschrieben 8. Januar 2013 Teilen Geschrieben 8. Januar 2013 Was hier gerade ein wenig in den Hintergrund rückt: Der Threadersteller (der evtl. noch garkeine Programmiererfahrung hat) möchte nicht ein konkretes Problem lösen, sondern eine Sprache lernen. Also muss man versuchen, Kriterien zu definieren, nach der man die Sprache wählen möchte. Beispiele wären: - (Elektro-/Digital-)Technisches KnowHow (Assembler, C für Mikrocontroller, ...) - Plattformunabhängigkeit (Java, C++, eine Scriptsprache, evtl. mit SDL, GTK+, ...) - Spiele (C# (XNA-Framework), C++, Java, ...) - Datenbanken (SQL, Object Pascal / Delphi hat super DB-Komponenten, ...) - Webseiten (PHP, ASP.NET, JSP, Perl, Ruby, Puthon, JavaScript/NodeJS, ...) - Apple/iOS (Objective C, Cocoa Framework, ...) - Android-Anwendungen (Java, ...) - Berufliche Chancen (C#, Java, C++, PHP, ...) - Einfache Sprache bzw. schnelle Fortschritte (Pascal, VB, ...) - ... Solange man das nicht sagen kann, kann man auch keinen konkreteren Rat geben, als bisher gemacht wurde... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 9. Januar 2013 Teilen Geschrieben 9. Januar 2013 Was hier gerade ein wenig in den Hintergrund rückt: Der Threadersteller (der evtl. noch garkeine Programmiererfahrung hat) möchte nicht ein konkretes Problem lösen, sondern eine Sprache lernen. Wenn es wirklich um das Erlernen geht würde ich immer wieder Pascal (Programmiersprache) empfehlen, das unter Free Pascal - Advanced open source Pascal compiler for Pascal and Object Pascal - Home Page als freie Implementierung gibt. Gerade für einen Anfänger würde ich von einer GUI Arbeitsweise abraten, sondern wirklich das klassische EVA-Prinzip über die Konsole erlernen (Vielleicht dazu dann noch passend ein Buildsystem z.B. SCons: A software construction tool ). Ich sehe bei Pascal die sehr strenge Struktur inkl der daraus resultierenden Sicherheit durch den Compiler definitiv als Vorteil für einen Anfänger. FreePascal im speziellen ist für verschiedene Plattformen erhältlich, so dass man damit auch recht gut Code portabel gestalten kann. Möchte man später dann zu GUI gehen, wäre Lazarus dann eine Erweiterung. Ich habe selbst mit Pascal begonnen und auch sehr gute Erfahrung gemacht einem Anfänger damit relativ zügig ein Werkzeug an die Hand zu geben, mit dem man durchaus zu einem Ziel kommt und vor allem, das nicht überladen ist. Als Editor für Windows kann man ohne Probleme Notepad++ Home nehmen oder unter OSX z.B. XCode bzw Linux Geany : Home Page Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Aras Geschrieben 9. Januar 2013 Teilen Geschrieben 9. Januar 2013 Also ich programmiere im Betrieb ColdFusion. Das ist so suboptimal, das kann man garnicht glauben. Ein Wechsel zu Java wäre aber endlich der Befreiungsschlag. Gibt soviele Möglichkeiten guten Java-Code zu produzieren, wie z.B. Spring, Spring MVC, Checkstyle, Coburga, JUNIT etc. etc. dass man das alles nutzen sollte. Insbesondere der Fakt dass wir keine günstige ColdFusion-Programmierer finden ist schonmal das Totschlags-Argument schlechthin. Das Java schlecht sei, kann ich grade nicht nachvollziehen. Aber ich muss in dem Fakt zustimmen, dass Grundkenntnisse in anderen Programmiersprachen helfen kann um besser zu programmieren. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
GoaSkin Geschrieben 9. Januar 2013 Teilen Geschrieben 9. Januar 2013 Also ich programmiere im Betrieb ColdFusion. Das ist so suboptimal, das kann man garnicht glauben. Ein Wechsel zu Java wäre aber endlich der Befreiungsschlag. Gibt soviele Möglichkeiten guten Java-Code zu produzieren, wie z.B. Spring, Spring MVC, Checkstyle, Coburga, JUNIT etc. etc. dass man das alles nutzen sollte. Insbesondere der Fakt dass wir keine günstige ColdFusion-Programmierer finden ist schonmal das Totschlags-Argument schlechthin. Das Java schlecht sei, kann ich grade nicht nachvollziehen. Aber ich muss in dem Fakt zustimmen, dass Grundkenntnisse in anderen Programmiersprachen helfen kann um besser zu programmieren. Nicht zu vergessen ist dabei die Tatsache, dass man für Coldfusion eine Lizenz benötigt und dabei an einen Anbieter (Adobe) gebunden ist. Gestaltet Adobe irgendwann die Preise unattraktiver, muss man das so hinnehmen oder das Programm noch einmal neu entwickeln. Für C und Java gibt es haufenweise Compiler, Entwicklungsumgebungen und Frameworks, darunter auch viele Kostenlose, die man kommerziell nutzen darf. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pintman Geschrieben 9. Januar 2013 Teilen Geschrieben 9. Januar 2013 Noch eine Anmerkung. Nein, der Compiler kann einen Algoritmus nicht optimieren, der Compiler kann nur den Code optimieren z.B. kann der Compiler Nebenläufigkeiten nicht automatisch erzeugen. Optimierung muss in erster Linie auf der obersten Algorithmusebene statt finden, der Compiler optimiert nur auf Maschinenebene. Compiler können mit Hilfe von Datenflussanalyse ineffizienten Code entfernen oder vermeiden. Häufig passiert das auch schon in der IDE durch Markierungen von z.B. nicht genutzten Variablen. Tail-Recursion wird z.B. in Schleifen aufgelöst, um den Stack zu entlasten etc. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
GoaSkin Geschrieben 9. Januar 2013 Teilen Geschrieben 9. Januar 2013 Es gibt ja auch Stripper-Programme, die alles aus dem compilierten Code hinterher entfernen, was nicht benötigt wird. Je nach dem, mit welcher Entwicklungsumgebung man arbeitet, passiert das manchmal auch schon automatisch, aber je nach dem wie ein IDE arbeitet oder das Makefile aufgebaut ist, ist der Stripper auch manchmal nicht Bestandteil des normalen Build-Vorganges. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 9. Januar 2013 Teilen Geschrieben 9. Januar 2013 Compiler können mit Hilfe von Datenflussanalyse ineffizienten Code entfernen oder vermeiden. Bitte lies das was ich geschrieben habe genau. Der Compiler kann gewisse Punkte optimieren, aber das was Du anführst sind Optimierungen auf der "untersten" Ebene, sprich der Ebene der Speicherallokierung / -benutzung. Wenn ich dem Compiler z.B. eine Cluster (Informatik) Analyse in Code gebe, dann wird er mir das nicht automatisch auf mehrere Cores / Threads optimieren können. Die die Algorithmen hier iterativ sind, wird eine Datenflussanalyse nicht viel Optimierung sichtbar machen. Optimierung auf der Befehlsebene ist recht ineffizient, im Gegensatz dazu, was der Mensch auf Algorithmusebene leisten kann Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
spix Geschrieben 12. Januar 2013 Teilen Geschrieben 12. Januar 2013 Schon vor ein paar Jahren wurde immer wieder behauptet, Windows / MS sei auf dem absteigenden Ast. Mit Win 8 und Tablets sowie smartphones könnte diese "Vorahnung" sogar eintreffen. Marktforscher: Windows-Markt wird 2013 schrumpfen 11.01.2013 Einer Studie des Marktforschers Canalys zufolge wird sich im Verlauf des Jahres 2013 der Anteil von Wintel-PCs (Windows auf Intel) von 72 Prozent 2012 auf 65 Prozent verringern. Gewinner sind dagegen Tablets und Smartphones, mit denen viele alltägliche Aufgaben wie E-Mails lesen oder Browsen im Internet genauso gut erledigt werden können. Marktforscher: Windows-Markt wird 2013 schrumpfen » Linux-Magazin Online Seit dem ersten release von Win 8 Dev. Pr. überlege ich mir, auf Java zu wechseln oder mir zumindest Fundierte Java-Kenntnisse anzueignen. Zumindest ist bei mir die Zeit vorbei nur auf eine Plattform zu setzen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
pr0gg3r Geschrieben 14. Januar 2013 Teilen Geschrieben 14. Januar 2013 Seit dem ersten release von Win 8 Dev. Pr. überlege ich mir, auf Java zu wechseln oder mir zumindest Fundierte Java-Kenntnisse anzueignen. Zumindest ist bei mir die Zeit vorbei nur auf eine Plattform zu setzen. Ja so sehe ich das auch, wobei man neben neben Java auch auf C++ mit Qt (oder einer ähnliche Bibliothek) setzen kann. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.