Wie überzeuge ich einen Zweifler?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
CrasherAtWeb
User
Beiträge: 8
Registriert: Samstag 17. Januar 2009, 19:08

Hallo zusammen,

ich bin noch relativ unerfahren was Python betrifft, aber nach den ersten Kapitel von "A Byty of Python" bin ich schon ziemlich begeistert von der Sprache und ihrer Effizienz beim Programmieren.

Nun habe ich das Problem, dass ich gerade in einem Studienprojekt bin, wo ich u.a. einen PC-Client zur Kommunikation mit einem Medienserver implementieren muss, der natürlich ein GUI haben soll und ich fand da Python recht passend, weil es mir schien, dass wir damit schnell zu einem ansehnlichen Ergebnis kommen könnten. Problem ist nun, dass ich Kommilitonen habe die nun auf Teufel komm raus alles in C++ oder Java schreiben wollen, weil das ja richtige Programmiersprachen sein und viel performanter usw..

Ich meine C++ mit einzuarbeiten in besonders Ressourcenintensiven Prozessen kann ich ja noch verstehen. Aber ansonsten sehe ich C++ und noch weniger Java im Vorteil gegenüber Python. C++ ist viel aufwändiger zu Programmieren, besonders wenn das ganze auf multiplen Plattformen laufen soll und daher dauert es da länger bis wir was vorzeigbares liefern können und die Zeit in unserem Projekt ist leider stark beschränkt. Java erzeugt mit AWT und Swing hässliche GUIs und ist mit seiner VM auch net wirklich freundlicher zu den Ressourcen als ein Python-Interpreter.

Könnten mir ein paar erfahrene Python-Programmierer vielleicht noch ein paar gute Argumente liefern, die ich in der Diskussion in meinem Projekt einbringen könnte?

EDIT: Ach ja, ein Argument das mir besonders stark entgegen geschlagen wurde ist, dass Python-Code sehr schnell sehr unübersichtlich werden würde. Und, dass es daher in größeren Projekten nicht sinnvoll sei. Ich sah Python-Code aber als ziemlich gut verständlich an und wenn er zudem noch gut dokumentiert ist, kam es mir nicht wirklich problematisch vor ihn mit unterstützender Lektüre nachzuvollziehen. Was sagt ihr dazu?
Mehr Licht!
bremer
User
Beiträge: 109
Registriert: Sonntag 25. Mai 2008, 00:13

Auch daran wurde in der Dokumentation gedacht: http://docs.python.org/3.0/howto/advocacy.html


Im Übrigen sind Java und C++ keine "richtigeren" Programmiersprachen. :lol:
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hallo CrasherAtWeb, willkommen im Forum,
CrasherAtWeb hat geschrieben:Problem ist nun, dass ich Kommilitonen habe die nun auf Teufel komm raus alles in C++ oder Java schreiben wollen, weil das ja richtige Programmiersprachen sein und viel performanter usw..
Ich kann nur betrübt den Kopf schütteln und mich wundern, was Studenten heutzutage so lernen. Gerade bei der Kommunikation über Sockets hilft einem ein schnelles Programm genau gar nichts, wenn dieses sowieso auf IO warten muss. Das kann Python genausogut wie C++ oder Java. Ich hatte eigentlich gehofft, dass Java den typischen C++-Fehler nicht macht: annehmen dass es immer auf die Performance ankommt. Schließlich war Java nicht immer so schnell und gerade auf Desktopsystemen war es fürchterlich träge, besonders wenn dann noch GUIs ins Spiel kamen.
CrasherAtWeb hat geschrieben:Ich meine C++ mit einzuarbeiten in besonders Ressourcenintensiven Prozessen kann ich ja noch verstehen. Aber ansonsten sehe ich C++ und noch weniger Java im Vorteil gegenüber Python. C++ ist viel aufwändiger zu Programmieren, besonders wenn das ganze auf multiplen Plattformen laufen soll und daher dauert es da länger bis wir was vorzeigbares liefern können und die Zeit in unserem Projekt ist leider stark beschränkt.
Wobei ich bei begrenzter Zeit nicht weiß, wie sinnvoll es ist auch noch eine weitere Sprache zu lernen. Klar, im Gesamtbild spart man sich Zeit aber der Aufwand eine Sprache richtig zu lernen ist nicht zu unterschätzen. Insbesondere von Java-Leuten, die dazu tendieren von Java einen Schaden im Kopf davonzutragen der nur durch lange und schwere Überzugungsarbeit und einige Erfolgserlebnisse gelindert werden kann.
CrasherAtWeb hat geschrieben:EDIT: Ach ja, ein Argument das mir besonders stark entgegen geschlagen wurde ist, dass Python-Code sehr schnell sehr unübersichtlich werden würde. Und, dass es daher in größeren Projekten nicht sinnvoll sei. Ich sah Python-Code aber als ziemlich gut verständlich an und wenn er zudem noch gut dokumentiert ist, kam es mir nicht wirklich problematisch vor ihn mit unterstützender Lektüre nachzuvollziehen. Was sagt ihr dazu?
Das könnte man über Java auch sagen, weil dort die Algorithmen und die eigentlichen Vorgängen in Abstraktionen und Patterns ertrinken.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
CrasherAtWeb
User
Beiträge: 8
Registriert: Samstag 17. Januar 2009, 19:08

Leonidas hat geschrieben:Hallo CrasherAtWeb, willkommen im Forum,
Dankeschön!
Leonidas hat geschrieben:Ich kann nur betrübt den Kopf schütteln und mich wundern, was Studenten heutzutage so lernen.

Ja, ich finde es auch sehr bedauerlich, dass alle Unis sich so auf Java und C(++) versteifen und moderne Skriptsprachen kaum eine Rolle spielen.
Leonidas hat geschrieben:Schließlich war Java nicht immer so schnell und gerade auf Desktopsystemen war es fürchterlich träge, besonders wenn dann noch GUIs ins Spiel kamen.
Die Erfahrung durfte ich ja bereits in einem anderen Projekt machen. Und der Feadreader auf Java-Basis den ich ne zeitlang benutzt habe war auch alles andere als performant.
Leonidas hat geschrieben:Wobei ich bei begrenzter Zeit nicht weiß, wie sinnvoll es ist auch noch eine weitere Sprache zu lernen. Klar, im Gesamtbild spart man sich Zeit aber der Aufwand eine Sprache richtig zu lernen ist nicht zu unterschätzen. Insbesondere von Java-Leuten, die dazu tendieren von Java einen Schaden im Kopf davonzutragen der nur durch lange und schwere Überzugungsarbeit und einige Erfolgserlebnisse gelindert werden kann.
Naja, um das Erlernen einer neuen Sprache kommen wir eigentlich so oder so nicht rum, weil wir wohl kaum allein C++ oder Java für die Webdienste nutzen werden die wir im Rahmen unserer Medienserver implementieren werden. Etliche von uns belegen z.B. auch ein Seminar über Agile Webentwicklung auf Basis von Ruby on Rails.
Mehr Licht!
lunar

CrasherAtWeb hat geschrieben:
Leonidas hat geschrieben:Schließlich war Java nicht immer so schnell und gerade auf Desktopsystemen war es fürchterlich träge, besonders wenn dann noch GUIs ins Spiel kamen.
Die Erfahrung durfte ich ja bereits in einem anderen Projekt machen. Und der Feadreader auf Java-Basis den ich ne zeitlang benutzt habe war auch alles andere als performant.
Es ist ein Faktum, dass die Ausführungsgeschwindigkeit der JVM weitaus höher ist als die von CPython. Wenn man das bestreitet, schadet man nur der eigenen Glaubwürdigkeit.

Sicherlich sind AWT und Swing auch nicht die besten GUI-Toolkits, allerdings gibt es schon seit langem eine Alternative in Form von SWT. Und wem das noch nicht reicht, der hat seit der Veröffentlichung von QtJambi kaum noch einen Grund, Java einen Mangel an guten GUI-Toolkits zu unterstellen, den Qt4 ist mit das beste der existierenden GUI-Toolkits und dem Großteil der Konkurrenz weit voraus.

Wie man es auch dreht und wendet, die JVM ist schneller als CPython und hinkt auch bei GUI-Toolkits nicht länger hinterher. Die Frage ist natürlich, ob die reine Ausführungsgeschwindigkeit der JVM bzw. von CPython in deinem Projekt eine Rolle spielt. Meistens tut sie das nicht.
Naja, um das Erlernen einer neuen Sprache kommen wir eigentlich so oder so nicht rum, weil wir wohl kaum allein C++ oder Java für die Webdienste nutzen werden.
Wieso? Man kann Java auch mehr oder weniger gut für Webdienste verwenden. Aus der Java-Welt stammt schließlich auch der "SOA"-Hype samt all den schönen Buzzwords.

Versteh mich nicht falsch, ich halte von Java als Sprache wenig und würde Python immer vorziehen. Ich möchte dir Java auch nicht als die beste Sprache für dein Projekt nahelegen.

Allerdings ist es ja nicht "dein" Projekt, sondern eine Gruppenarbeit. Daher sollte man auch die Sprache nutzen, die bei allen Beteiligten bekannt ist. Alles andere ist wenig zielführend, besonders, wenn man schnell Ergebnisse erzielen will. Python zu erlernen, bedeutet ja wesentlich mehr, als nur alle geschweiften Klammern aus dem Quelltext zu löschen. Idiomatisches, "gutes" Python verwendet mitunter völlig andere Ansätze und Paradigmen, die Java-Programmierer möglicherweise völlig unbekannt sind.

Bis alle Mitglieder deiner Gruppe Python ausreichend gut beherrschen, vergeht also möglicherweise mehr Zeit als die Umsetzung des Projekts in Java veranschlagen würde.

Natürlich könnte man jetzt argumentieren, man kann Python ja "nebenbei" lernen. Das führt aber besonders in der Anfangsphase zu entsprechend schlechtem Code, und steht somit dem eigentlichen Zweck der Wahl Pythons – bessere Verständlichkeit und Wartbarkeit – diametral entgegen. Besser guter Code in einer schlechten Programmiersprache als schlechter Code in einer guten Programmiersprache.
CrasherAtWeb
User
Beiträge: 8
Registriert: Samstag 17. Januar 2009, 19:08

Hmm, ok. Also lunar du hast mir mal wieder deutlich vor Augen geführt wie gering meine Erfahrungen sind....
lunar hat geschrieben:Es ist ein Faktum, dass die Ausführungsgeschwindigkeit der JVM weitaus höher ist als die von CPython. Wenn man das bestreitet, schadet man nur der eigenen Glaubwürdigkeit.
Ok, danke für den Hinweis. Habe ich wohl falsch eingeschätzt. Hatte gedacht, das nimmt sich nicht viel
lunar hat geschrieben:Sicherlich sind AWT und Swing auch nicht die besten GUI-Toolkits, allerdings gibt es schon seit langem eine Alternative in Form von SWT. Und wem das noch nicht reicht, der hat seit der Veröffentlichung von QtJambi kaum noch einen Grund, Java einen Mangel an guten GUI-Toolkits zu unterstellen, den Qt4 ist mit das beste der existierenden GUI-Toolkits und dem Großteil der Konkurrenz weit voraus.
Aha, gut zu Wissen. Da war mein Blick wohl etwas eingeschränkt, weil wir in unserem Grundstudiumsprojekt auf AWT und Swing festgesetzt wurden und wir daher gar nicht geguckt haben, ob es noch andere, bessere Toolkits gibt. Danke für den Hinweis!
lunar hat geschrieben:Wie man es auch dreht und wendet, die JVM ist schneller als CPython und hinkt auch bei GUI-Toolkits nicht länger hinterher. Die Frage ist natürlich, ob die reine Ausführungsgeschwindigkeit der JVM bzw. von CPython in deinem Projekt eine Rolle spielt. Meistens tut sie das nicht.
Joa, ich bezweifle es auch, ob das bei unserem Client eine Rolle spielen wird. Zumal unser Client sich nur in wenigen Punkten von Miro unterscheiden wird, was ja auch weitest gehend in Python geschrieben wurde.
lunar hat geschrieben:Wieso? Man kann Java auch mehr oder weniger gut für Webdienste verwenden. Aus der Java-Welt stammt schließlich auch der "SOA"-Hype samt all den schönen Buzzwords.
Wieso? Also mir kam es so vor, als ob Ruby und Python da wesentlich geeigneter sind um die Webdienste zu entwickeln. Ich meine bei Google findet es ja z.B. auch viel Verwendung. Bei Java wirkt das mit Java Server Pages, Java EE und haste nicht gesehen in meinen Augen ziemlich Aufwändig alle Hilfsmittel erstmal zu erlernen.
lunar hat geschrieben:Versteh mich nicht falsch, ich halte von Java als Sprache wenig und würde Python immer vorziehen. Ich möchte dir Java auch nicht als die beste Sprache für dein Projekt nahelegen.

Allerdings ist es ja nicht "dein" Projekt, sondern eine Gruppenarbeit. Daher sollte man auch die Sprache nutzen, die bei allen Beteiligten bekannt ist. Alles andere ist wenig zielführend, besonders, wenn man schnell Ergebnisse erzielen will. Python zu erlernen, bedeutet ja wesentlich mehr, als nur alle geschweiften Klammern aus dem Quelltext zu löschen. Idiomatisches, "gutes" Python verwendet mitunter völlig andere Ansätze und Paradigmen, die Java-Programmierer möglicherweise völlig unbekannt sind.

Bis alle Mitglieder deiner Gruppe Python ausreichend gut beherrschen, vergeht also möglicherweise mehr Zeit als die Umsetzung des Projekts in Java veranschlagen würde.

Natürlich könnte man jetzt argumentieren, man kann Python ja "nebenbei" lernen. Das führt aber besonders in der Anfangsphase zu entsprechend schlechtem Code, und steht somit dem eigentlichen Zweck der Wahl Pythons – bessere Verständlichkeit und Wartbarkeit – diametral entgegen. Besser guter Code in einer schlechten Programmiersprache als schlechter Code in einer guten Programmiersprache.
Tja, danke für die Hinweise. Also uns als Java-Programmierer zu bezeichnen wäre wohl etwas weit gegriffen, siehe meine Defizite was GUI-Programmierung betrifft. Es ist lediglich die Programmiersprache mit der wir bisher am meisten gearbeitet haben. Aber etliche von uns müssen sich wohl auch da in etliche Teilbereiche neu einarbeiten. JSP und Java EE haben wir z.B. noch gar nicht benutzt. Natürlich hast du Recht, dass guter Code sehr wichtig ist. Und ich sehe das ganze ja auch nicht als mein höchstpersönliches Projekt an, dass ich auf jeden Fall nach meinen Wünschen formen muss. Deswegen suche ich hier ja auch nach Argumenten um das Thema auszudiskutieren und dann auf der Basis dieser Diskussion zu einer guten Lösung zu kommen. Wir müssen ja auch irgendwann in einem Projektbericht erklären warum wir uns für die und die Lösung entschieden haben und da wäre es doch blöd zu schreiben, dass wir Java und C++ nur verwendet haben, weil mit Python oder Ruby bisher noch nicht gearbeitet hatten...
Mehr Licht!
lunar

CrasherAtWeb hat geschrieben:
lunar hat geschrieben:Wieso? Man kann Java auch mehr oder weniger gut für Webdienste verwenden. Aus der Java-Welt stammt schließlich auch der "SOA"-Hype samt all den schönen Buzzwords.
Wieso? Also mir kam es so vor, als ob Ruby und Python da wesentlich geeigneter sind um die Webdienste zu entwickeln. Ich meine bei Google findet es ja z.B. auch viel Verwendung. Bei Java wirkt das mit Java Server Pages, Java EE und haste nicht gesehen in meinen Augen ziemlich Aufwändig alle Hilfsmittel erstmal zu erlernen.
Sicher ist Java da in mancher Hinsicht etwas überkompliziert. Allerdings müsstest du auch bei einem Python-Projekt erst die entsprechenden Bibliotheken kennen lernen. Im Unterschied dazu musst du bei einem Python-Projekt allerdings noch die Sprache lernen, bevor du in die Bibliotheken einsteigen kannst.
JSP und Java EE haben wir z.B. noch gar nicht benutzt.
Genauso, wie ihr es tun müsstet, wenn ihr Python nutzt. Auch da gilt es die entsprechenden Bibliotheken kennen zu lernen ;)
Deswegen suche ich hier ja auch nach Argumenten um das Thema auszudiskutieren und dann auf der Basis dieser Diskussion zu einer guten Lösung zu kommen.
Argumente für Python lassen sich viele finden. Größere Ausdrucksstärke, kürzerer Code, bessere Lesbarkeit, etc.

Am schnellsten sieht man den Unterschied allerdings, wenn man Python-Code mit äquivalentem Java-Code vergleicht. Für eine Diskussion könntest du ja eine der Java-Programmieraufgaben, die ihr mal lösen musstet, in Python implementieren. In der Diskussion könntest du anhand passender Code-Stellen die Unterschiede zwischen beiden Versionen erklären und daran dann Vorteile von Python herausstellen.
Wenn du wirklich überzeugen willst, ist das meiner Meinung nach der beste Weg. Argumente wie "bessere Lesbarkeit" sind Schall und Rauch, da viel zu wage, Quellcode dagegen ist ein Faktum, dem man Lesbarkeit, Ausdrucksstärke oder Kürze nicht wegdiskutieren kann.

Kommilitonen, die Python nicht als "echte" Programmiersprache erachten, solltest du auf jeden Fall vorher mal eine Runde Googlen schicken, mit dem Hinweis, dass es für dich untragbar wäre, mit dermaßen ungebildeten und beschränkten Programmierern zusammen zu arbeiten ;)
Wir müssen ja auch irgendwann in einem Projektbericht erklären warum wir uns für die und die Lösung entschieden haben und da wäre es doch blöd zu schreiben, dass wir Java und C++ nur verwendet haben, weil mit Python oder Ruby bisher noch nicht gearbeitet hatten...
Das ist aber ein Grund, und noch dazu ein guter. Programmieren ist zu einem großen Teil schlicht und einfach Erfahrung. Daher ist "Erfahrung" in einer bestimmten Sprache eine unschätzbare Ressource für ein Projekt, die es natürlich entsprechend auszunutzen gilt.
BlackJack

@CrasherAtWeb: Als Python-Fan würde ich hier wohl auch zu Java raten. Ganz ungeachtet der Frage ob das geeigneter wäre als Python oder nicht. Denn bei solch einem Projekt werden auf jeden Fall Probleme auftauchen, die knifflig zu lösen sind. Unabhängig von der gewählten Sprache! Wenn Du denen jetzt Python "aufschwatzt", wird sicher einiges davon Dir und Python angelastet werden. Das heisst am Ende laufen nicht nur ein paar Leute herum, die Python nicht für eine "richtige" Programmiersprache halten, sondern auch noch für eine schlechte.

So etwas sollte nur jemand in Angriff nehmen, der sowohl in Python als auch in der anderen Sprache fit ist, falls bei Problemen die andere Sprache als besser dargestellt wird.

Das Argument, das Python-Quelltext schnell unübersichtlich wird, kann ich übrigens nicht nachvollziehen. Klar kann man auch unübersichtlichen Quelltext in Python schreiben, aber das geht mit den ganzen Features, die C++ bietet, oder zig Schichten von Abstaktionen und Entwurfsmustern bei Java auch problemlos. IMHO gibt es nichts was Python-Quelltext anfälliger für unübersichtlichen Quelltext macht. Es gibt Packages und Module um die Klassen und Funktionen ordentlich in Namensräume zu gliedern. Und wenn man alles ordentlich dokumentiert, hat man zum Beispiel mit Epydoc die Möglichkeit API-Dokumentation a la Doxygen für C++ oder JavaDoc für Java zu erstellen.

So etwas wie Miro ist übrigens für Leute mit wenig Erfahrung sicher ein ganz schöner Hammer. Da werden eine Menge Techniken verwendet, die für sich genommen schon komplex sind. Mozilla als Basis für eine GUI mit XUL zur Beschreibung der Oberfläche, Python für Programmlogik, ein Bittorrent-Client, und je nach Plattform unterschiedliche Techniken um die Mediadaten abzuspielen.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Vielleicht wäre Jython in dem Fall ein möglicher Weg:
Deine Kollegen arbeiten mit Java, du nimmst Jython.
CrasherAtWeb
User
Beiträge: 8
Registriert: Samstag 17. Januar 2009, 19:08

lunar hat geschrieben:
CrasherAtWeb hat geschrieben: Wieso? Also mir kam es so vor, als ob Ruby und Python da wesentlich geeigneter sind um die Webdienste zu entwickeln. Ich meine bei Google findet es ja z.B. auch viel Verwendung. Bei Java wirkt das mit Java Server Pages, Java EE und haste nicht gesehen in meinen Augen ziemlich Aufwändig alle Hilfsmittel erstmal zu erlernen.
Sicher ist Java da in mancher Hinsicht etwas überkompliziert. Allerdings müsstest du auch bei einem Python-Projekt erst die entsprechenden Bibliotheken kennen lernen. Im Unterschied dazu musst du bei einem Python-Projekt allerdings noch die Sprache lernen, bevor du in die Bibliotheken einsteigen kannst.
JSP und Java EE haben wir z.B. noch gar nicht benutzt.
Genauso, wie ihr es tun müsstet, wenn ihr Python nutzt. Auch da gilt es die entsprechenden Bibliotheken kennen zu lernen ;)
Ja, aber ich dachte, dass das bei Python im Zweifelsfall schneller gehen würde, weil die Bibliotheken da eben nicht so überkompliziert und zielgerichteter sind.
lunar hat geschrieben:Argumente für Python lassen sich viele finden. Größere Ausdrucksstärke, kürzerer Code, bessere Lesbarkeit, etc.

Am schnellsten sieht man den Unterschied allerdings, wenn man Python-Code mit äquivalentem Java-Code vergleicht. Für eine Diskussion könntest du ja eine der Java-Programmieraufgaben, die ihr mal lösen musstet, in Python implementieren. In der Diskussion könntest du anhand passender Code-Stellen die Unterschiede zwischen beiden Versionen erklären und daran dann Vorteile von Python herausstellen.
Wenn du wirklich überzeugen willst, ist das meiner Meinung nach der beste Weg. Argumente wie "bessere Lesbarkeit" sind Schall und Rauch, da viel zu wage, Quellcode dagegen ist ein Faktum, dem man Lesbarkeit, Ausdrucksstärke oder Kürze nicht wegdiskutieren kann.

Kommilitonen, die Python nicht als "echte" Programmiersprache erachten, solltest du auf jeden Fall vorher mal eine Runde Googlen schicken, mit dem Hinweis, dass es für dich untragbar wäre, mit dermaßen ungebildeten und beschränkten Programmierern zusammen zu arbeiten ;)
Das klingt gut. Sollte die Diskussion nicht klar und ohne ernsthafte Argumente geführt werden, werde ich sicher mal diese Methoden ergreifen, damit das ganze mal ein erwachsenes Niveau erhält ;) .
lunar hat geschrieben:
Wir müssen ja auch irgendwann in einem Projektbericht erklären warum wir uns für die und die Lösung entschieden haben und da wäre es doch blöd zu schreiben, dass wir Java und C++ nur verwendet haben, weil mit Python oder Ruby bisher noch nicht gearbeitet hatten...
Das ist aber ein Grund, und noch dazu ein guter. Programmieren ist zu einem großen Teil schlicht und einfach Erfahrung. Daher ist "Erfahrung" in einer bestimmten Sprache eine unschätzbare Ressource für ein Projekt, die es natürlich entsprechend auszunutzen gilt.
Hmm, ok. Ich dachte jetzt nicht, dass der Rückstand, den wir bei Python aufholen müssten nicht soo groß ist, dass er nicht in angemessener Zeit zu überwinden ist. Weil wir, wie bereits erwähnt, die wichtigsten Elemente die wir für die Webservices brauchen werden, in Java ebenso noch nie angewendet haben und daher ebenso komplett neu lernen müssen. Und da dachte ich, dass die Einarbeitung in diese Elemente bei Java auf Grund ihrer Komplexität, in etwa dem Aufwand entsprechen würde, welcher anfallen würde, wenn wir uns in Python und die dort benötigten Bibliotheken einarbeiten würden. Zumal etliche von uns jetzt auch Ruby und Ruby on Rails und somit ähnliche Paradigmen lernen. Und ich dachte, dass wir dann mit Python wesentlich schneller und effizienter voran kämen, als wenn wir uns jetzt mit Java einen abbrechen würden.

Aber nungut, du hast mir aufgezeigt, dass es da für Java durchaus Alternativen gibt, welche eine GUI etc. da durchaus erträglich lassen werden. Bin gerade über SWT auf die Eclipse RCP gestoßen und das ganze klingt ganz interessant. Manchmal stößt man eben über Umwege auf die Möglichkeiten die sich einem so bieten ^^ .

Naja, ich werde das ganze jetzt mal ganz in Ruhe mit meiner Gruppe ausdiskutieren und dann wird sich zeigen wie wir weiter verfahren werden. Auf jeden Fall recht herzlichen Dank an euch, bremer, Leonidas und lunar, für eure Tipps!
Mehr Licht!
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Programmiersprachen sind wie Religion. Man glaubt und hat Überzeugungen. Rationale Argumente wirken da wenig. Daher ist das Thema müßig zu diskutieren.

Mit Worten zu überzeugen, ist schwerer als mit Taten.

Mein Tipp wäre daher, statt zu lange diskutieren, ob es Java, C++ oder Python sein, einfach der Reihe nach alle Sprachen gemeinsam auszuprobieren. Wer sich nicht in der Lage sieht, diesen Test offen und ohne Vorurteile durchzuführen, verdient dann die geballte Verachtung (wo ich leider auch Leonidas Java-Bashing einbeziehen muss). Der Test wird zeitlich beschränkt, je nach Aufgabe vielleicht ein Tag, eine Woche, ein Monat.

Ihr seit Studenten, nutzt die Zeit, die ihr später nicht mehr haben werdet.

Man kann, da es natürlich das zweite Mal einfacher ist (was man aber nur weiß, wenn man gelernt hat, dass die Wahl der Programmiersprache fast unerheblich ist), entweder losen, in welcher Reihenfolge man's macht oder aber als Anhänger von Python bietet man großzügig an (wissend, dass ein gemeinsames Scheitern unausweichlich ist) erstmal mit C++ zu beginnen.

Falls das kein Ansatz ist, würde ich eher Java als C++ wählen, da dies aus meiner Erfahrung die produktivere Sprache ist. Doch das wäre wieder der Beginn einer Diskussion und die wollte ich ja vermeiden.

Die meisten dieser Diskussionen lassen sich eigentlich abwürgen, indem man vehement darauf hinweist, dass die Laufzeitperformance bis auf in wenigen Sonderfällen unerheblich ist. Entscheidend ist die Entwicklungsperformance.

Dieses setzt sich aus zwei Dingen zusammen: Erfahrung und Werkzeugen. Werkzeuge sind die Programmiersprache und die Entwicklungsumgebung.

Wer mit einer Programmiersprache Erfahrung hat, ist prinzipiell bedingt damit schneller als mit einer, die er nicht kennt. Somit kann jemand, der schon 10 Jahren C++ macht, einen Anfänger in Python schlagen, selbst wenn er 10x mehr Code schreibt und länger debuggen muss. Da kann dann Python in der Theorie noch so viel besser sein. Wenn man's nicht auch 10 Jahre kennt, hat man möglicherweise einen Nachteil.

Noch wichtiger ist, mit Problemen und ihren Lösungen und verschiedenen Programmierparadigmen Erfahrung zu haben (etwas, was man IMHO statt Programmiersprache X an Unis aber auch schon an Schulen lernen sollte) und diese dann umsetzen zu können.

Stefan

PS: Wie wäre es mit Ruby ;)
CrasherAtWeb
User
Beiträge: 8
Registriert: Samstag 17. Januar 2009, 19:08

Hmm, also was soll ich da antworten?
Ihr seit Studenten, nutzt die Zeit, die ihr später nicht mehr haben werdet.
Soo viel Zeit haben wir Projekt jetzt auch nicht, dass wir erstmal ein paar Tage verschiedene Programmiersprachen großartig auf Eignung durch Praxisnahe Implementierung testen können.

Wenn wir uns aber nicht für Python entscheiden sollten, wäre ich auch klar für Java, denn C++ macht mir so überhaupt keinen Spaß zu programmieren. Ist mir einfach zu ungelenk und ist bei so nem einfachen Client auch einfach zu viel des Guten.

Das mit den Programmierparadigmen ist wirklich schwierig. Wir sollen mit Java imperative und objektorientierte Programmierung kennen lernen. Mit C sollen wir Systemnahe Programmierung lernen. Und dann gibt es noch mit Haskell und Prolog etwas funktionale Programmierung. Für mehr bleibt dann im Pflichtprogramm kaum noch Zeit. Würde mich freuen, wenn Skriptsprachen da ne größere Rolle spielen würden, insbesondere auf Grund ihrer immer stärkeren Verbreitung, allerdings ist da halt das Problem, das eine was man kann, weil man bestimmte Sachen muss und das andere was man will...

Zu einer Sache kann ich aber etwas klar entgegnen:
Wie wäre es mit Ruby ;)
Fände ich im Moment herzlich müßig damit neu einzusteigen und dann gleich noch großartig darin etwas für ein 2 Jähriges Projekt zu implementieren, da man dort ja gerade noch vor dem Versionssprung steht, den Python mit 3.0 gerade geschafft hat, wo die neue Version nicht mehr abwärtskompatibel sein wird. Zumal finde ich, dass das freie Lernmaterial für Ruby äußerst beschränkt bis suboptimal ist gegenüber Python.
Mehr Licht!
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Würde mich freuen, wenn Skriptsprachen da ne größere Rolle spielen würden, insbesondere auf Grund ihrer immer stärkeren Verbreitung,
Wenn du weißt, was imperativ, prozedural, funktional, deklarativ (Prolog ist eher deklarativ und logisch als funktional), objektorientiert, aspektorientiert, nebenläufig usw. ist, kannst du das doch mehr oder weniger direkt auf eine Skriptsprache übertragen. In Python kannst du imperativ, funktional oder objektorieniert arbeiten. Mit passenden Bibliotheken auch nebenläufig oder (qasi)deklarativ. In Ruby fällt objektorientiert und (qasi)deklarativ leichter als funktional oder nebenläufig, geht aber auch alles. Wäre Scala im Lehrplan schon angekommen, könnte man fast die gesamte Bandbreite mit nur einer Sprache abdecken. Worauf ich hinaus will: Wenn du die Paradigmen kennst, bleibt bei den Sprache "nur noch" die Fleißarbeit, die Bibliotheken zu lernen.

Und bei einem längeren Projekt (du sagst zwei Jahre) mit dem Argument, keine Zeit zu haben, sich am Anfang nicht mit den Alternativen auseinandergesetzt (du sagst einige Tage) zu haben und stattdessen lieber einen Abbruch aufgrund einer Fehlentscheidung zu riskieren, scheint mir ein recht merkwürdiges Argument zu sein.

Stefan

PS: Na gut, dann schlage ich Objective-C (als das bessere C++) vor.
BlackJack

Python 3.0 ist für euer Projekt übrigens nicht brauchbar. Also wenn Python, dann 2.x.
CrasherAtWeb
User
Beiträge: 8
Registriert: Samstag 17. Januar 2009, 19:08

sma hat geschrieben:Und bei einem längeren Projekt (du sagst zwei Jahre) mit dem Argument, keine Zeit zu haben, sich am Anfang nicht mit den Alternativen auseinandergesetzt (du sagst einige Tage) zu haben und stattdessen lieber einen Abbruch aufgrund einer Fehlentscheidung zu riskieren, scheint mir ein recht merkwürdiges Argument zu sein.
Das kann ich ganz schnell begründen.

1. Haben nicht alle von uns 2 Jahre Zeit. Wir müssen bereits nach einem knappen Jahr (also im Juli) konkrete Ergebnisse vorweisen können, weil dann die Bachelor-Studenten im Projekt ihren Bachelorreport schreiben müssen und teilweise auch von der Uni abgehen bzw. das Projekt nicht fortsetzen.

2. Ist der PC-Client ein ziemlich kleiner Bestandteil des Projekts, sodass wir halt noch sehr viel Zeit für andere Elemente brauchen, die teilweise auch wesentlich wichtiger für das Projektziel sind.

3. Glaube ich nicht, dass es wegen dem PC-Client zu einem Projektabbruch kommen wird. Zumal er ja sowohl in Java, als auch in Python oder auch C++ implementierbar ist und sich für uns "nur" die Frage stellt wie man das nun am effizientesten umsetzt.
sma hat geschrieben:PS: Na gut, dann schlage ich Objective-C (als das bessere C++) vor.
Und wieso das nun? Ich meine, das ist ja auch ne Sprache wo wir uns erstmal komplett neu einarbeiten müssten. Wieso sollten wir das also statt Python verwenden?
BlackJack hat geschrieben:Python 3.0 ist für euer Projekt übrigens nicht brauchbar. Also wenn Python, dann 2.x.
Und wieso? Die Unterschiede sind doch klar dokumentiert und mit "A Byte of Python" gibt es auch einführende Lektüre basierend auf Python 3.0. Was spricht also gegen 3.0?
Mehr Licht!
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

CrasherAtWeb hat geschrieben:Was spricht also gegen 3.0?
Python 3 ist bei den Bibliotheken noch nicht angekommen. Allerdings hat man mit 2.6 fast alle Vorteile - eben die kompatiblen - von Python 3.
CrasherAtWeb
User
Beiträge: 8
Registriert: Samstag 17. Januar 2009, 19:08

cofi hat geschrieben:
CrasherAtWeb hat geschrieben:Was spricht also gegen 3.0?
Python 3 ist bei den Bibliotheken noch nicht angekommen. Allerdings hat man mit 2.6 fast alle Vorteile - eben die kompatiblen - von Python 3.
Ah, ok. Das ist natürlich wirklich zwingend zu berücksichtigen. Danke für den Hinweis!
Mehr Licht!
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Da noch keine Reaktion darauf gekommen ist: Was spricht denn gegen Jython? Ich habe bisher nur kleine Experimente damit gemacht, aber das sah für mich ganz vielversprechend aus. Programmieren in Python, Zugriff auf die ganze Java-Klassenbibliothek, dadurch u.a. Möglichkeit GUIs mit Swing mittels Python zu programmieren (und zwar erheblich angenehmer und mit weniger Code als in Java selbst, wobei Swing ja hier offenbar nicht unbedingt angestrebt wurde). Und man kann sogar alles in eine jar-Datei verpacken, so dass das Python-Programm auf jedem Rechner mit JVM ausführbar ist.

Ob Jython möglicherweise Begrenztheiten hat, die es für euer Projekt unbrauchbar macht, weiß ich nicht. So tief bin ich da noch nicht eingestiegen.
BlackJack

Ich denke sma meinte Objective-C nicht als Alternative zu Python, sondern zu C++. Das Objektmodell von Objective-C entspricht eher dem, was sich die "Pioniere" wie zum Beispiel die Smalltalk-Entwickler unter OOP vorgestellt haben. Ich würde da noch D in den Ring werfen, aber das ist vielleicht noch ein klein wenig zu exotisch. :-)

Wenn ihr übrigens wirklich die Sprachfrage am Anfang stellt und wissen wollt, ob und welche Sprache geeignet ist, kommt ihr IMHO um ein wenig Recherche nicht herum. Also so etwas wie, welche quelloffenen Vorbilder gibt es, welche Bibliotheken kann man nutzen, und wie sähe zum Beispiel ein minimaler Client in der jeweiligen Sprache aus, sollte man sich schon anschauen.

Und Python könnte man auch sowohl bei C++ mit CPython, als auch bei Java mit Jython ins Spiel bringen, wenn man einen Prototyp in Python schreibt. Kann auch gut sein, dass die Beteiligten am Ende gar nicht neu implementieren wollen, sondern bei Python bleiben.

Was Python 3.0 angeht: Das betrifft ja nicht nur die Bibliotheken die ganz oder teilweise in C geschrieben sind, wie sonst immer bei Versionswechseln, sondern diesmal sind auch reine Python-Bibliotheken nicht kompatibel und müssen erst portiert werden. Mein persönliches Kriterium wann ich Python 3.0 frühestens produktiv einsetze, ist die Verfügbarkeit als Standardpython in den grossen Linux-Distributionen. Bis dahin bleibe ich bei Python 2.x. Natürlich immer mit einem Blick auf die 3.0 und dass der Code möglichst so geschrieben ist, dass er mit 2to3.py einfach portiert werden kann, und so eine Quelltextbasis für 2.x und 3.x dient, aber es sollte halt immer noch unter 2.x laufen.

Dem Prozess würde ich so ungefähr 1 bis 2 Jahre geben.
CrasherAtWeb
User
Beiträge: 8
Registriert: Samstag 17. Januar 2009, 19:08

@ numerix: Entschuldige bitte. Ich hatte deine erste Einlassung aus Versehen nicht wahrgenommen, weil sie kam während ich ne Antwort geschrieben habe und dann nur noch ab meiner Antwort gelesen habe.

@ numerix und BlackJack: CPython und Jython wären durchaus eine Option, wenn es z.B. darum ginge Teile aus anderen Programmen wie z.B. Miro zu übernehmen. Aber die Alternative, dass ich in Python schreibe und alle anderen in einer anderen Programmiersprache schreiben sehe ich nicht so wirklich, da ja nicht nur ich meinen Code lesen und editieren können muss. Es müssten sich also fast alle in Python einarbeiten, sodass man auch gleich Python nehmen und den Zwischenschritt übergehen könnte. Swing möchte ich übrigens nur sehr ungern anwenden. Wenn wir uns für Java entscheiden sollten, dann hoffentlich im Zusammenhang mit SWT oder gleich der Eclipse RCP.

@ BlackJack: Also ich sehe jetzt nicht wirklich so den wirklichen Sinn und Zweck sich in Objective-C oder D einzuarbeiten um dann damit den Client zu coden. Ist ja schön, dass das Objektmodell da besser ist, aber so wirklich relevant sehe ich das jetzt bei der Auswahl für unser Projekt nicht.
BlackJack hat geschrieben:Wenn ihr übrigens wirklich die Sprachfrage am Anfang stellt und wissen wollt, ob und welche Sprache geeignet ist, kommt ihr IMHO um ein wenig Recherche nicht herum. Also so etwas wie, welche quelloffenen Vorbilder gibt es, welche Bibliotheken kann man nutzen, und wie sähe zum Beispiel ein minimaler Client in der jeweiligen Sprache aus, sollte man sich schon anschauen.
Das ist natürlich klar, dass man da recherchieren muss. Aber es ist ja wohl ein großer Unterschied ob man "nur" recherchiert, oder ob man dann gleich ein paar Testimplementierungen in den verschiedenen Programmiersprachen anfertigt, wie es sma vorgeschlagen hat.

Auf jeden Fall nochmal Danke was die Ausführungen zu 2.x vs. 3.x betrifft. Werde das auf jeden Fall berücksichtigen, falls Python zum Einsatz kommen sollte.
Mehr Licht!
Antworten