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.
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Sonntag 18. Januar 2009, 12:43

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

Sonntag 18. Januar 2009, 12:47

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

Sonntag 18. Januar 2009, 12:58

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

Sonntag 18. Januar 2009, 13:05

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

Sonntag 18. Januar 2009, 13:42

@ 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!
BlackJack

Sonntag 18. Januar 2009, 15:14

Der Sinn von Objective-C oder D wäre es eine "bessere" Sprache als C++ zu verwenden. Aber ausser PHP könnte man da ja fast alles nehmen. :twisted:

Und der Unterschied beim "nur" recherchieren ist, dass das keine grosse Aussagekraft hat. Ich habe auch Implementierungen vorgeschlagen!
abgdf

Sonntag 18. Januar 2009, 19:21

Hi,

bei Jython bin ich nicht sicher, ob man damit direkt Java-Bytecode erzeugen kann. Soll wohl gehen, ich hab's aber nicht geschafft :(. Mit Groovy

http://groovy.codehaus.org/

soll das besser gehen. Es soll wohl noch etwas besser in die Java-Welt integriert sein.

Ansonsten wollt ihr mit C++, Java oder Python offenbar in jedem Fall eine objektorientierte Sprache verwenden. GUI-Toolkits drängen einem das ja auch auf.

Aus dem (hier allerdings gelegentlich auch kritisierten) Buch "Python GE-PACKT" nehme ich zum Ausprobieren anderer Sprachen immer dieses primitive Beispiel einer Lampe, das in Python z.B. so ausehen kann:

Code: Alles auswählen

#!/usr/bin/env python
#-*- coding: iso-8859-1 -*-

class Lamp:

    def __init__(self):

        self.itsStatus = "off"

    def showStatus(self):

        print "The lamp is " + self.itsStatus + " now."

    def switchOn(self):

        print "Click."
        self.itsStatus = "on"

    def switchOff(self):

        print "Click."
        self.itsStatus = "off"

myLamp = Lamp()

myLamp.showStatus()

myLamp.switchOn()

myLamp.showStatus()

myLamp.switchOff()

myLamp.showStatus()
Das versuche ich dann, in anderen objektorientierten Sprache nachzubilden.
Macht das doch mal in C++ und Java (hab' ich schonmal gemacht) und vergleicht dann, welches euch am besten gefällt.
Meiner Meinung nach ist Python-Code am klarsten und übersichtlichsten und bei in den meisten Fällen akzeptabler Ausführungsgeschwindigkeit am einfachsten und schnellsten zu schreiben.
Deshalb ist Python meine bevorzugte Sprache.

Viele Grüße
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Sonntag 18. Januar 2009, 19:30

Und hier meine Version der Lampe:

Code: Alles auswählen

In [28]: class Lamp(object):
    def __init__(self, on=True):
        self.on = on
    def __str__(self):
        return 'Lamp is %s' % ('on' if self.on else 'off')
    def switch(self):
        self.on = not self.on
   ....:         
   ....:         

In [35]: lamp = Lamp()

In [36]: print lamp
Lamp is on

In [37]: lamp.switch()

In [38]: print lamp
Lamp is off
In Zeile 5 musste ich den ternären Operator einklammern, weil sonst (wenn die Lampe aus ist) nur 'off' und nicht 'Lamp is off' zurückgegeben wird.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Sonntag 18. Januar 2009, 19:31

abgdf hat geschrieben:bei Jython bin ich nicht sicher, ob man damit direkt Java-Bytecode erzeugen kann. Soll wohl gehen, ich hab's aber nicht geschafft
Mit der aktuellen stable version 2.2 funktioniert das problemlos. Dazu gibt es das Tool jythonc: Die richtigen Parameter angeben und fertig ist alles in einem jar-Archiv.

Bei den derzeitigen Beta-Versionen von 2.5 fehlt das Tool allerdings noch.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Sonntag 18. Januar 2009, 19:32

abgdf hat geschrieben: Aus dem (hier allerdings gelegentlich auch kritisierten) Buch "Python GE-PACKT" nehme ich zum Ausprobieren anderer Sprachen immer dieses primitive Beispiel einer Lampe, das in Python z.B. so ausehen kann:
Wobei genau dieses Beispiel irgend wie häßlich ist und nun genau mal nicht zeigt, worin Pythons Stärken liegen:

- kein PEP8
- ein Haufen sinnloser Methoden
- "Thema" dieser Klasse ist sinnfrei! (Wieso sollte man aus einem Boolschen Problem eine Klasse gießen?)

Generell ist es ja durchaus sinnvoll, sich einzelne kleine Use-Cases zu definieren und das in anderen Sprachen nachzubauen, aber dieses Beispiel ist da imho wenig sinnvoll!

EDIT: Ok, sehe grad "derdon" hat hier gleich mal konstruktiv gekontert ;-)
abgdf

Sonntag 18. Januar 2009, 20:00

Hi,
Hyperion hat geschrieben:Wieso sollte man aus einem Boolschen Problem eine Klasse gießen?
Damit soll gezeigt werden, daß man in der objektorientierten Programmierung versucht, Gegenstände aus dem wirklichen Leben abzubilden. Ich glaube, das weißt Du aber.

@Hyperion, derdon: Auch wenn der Code von derdon kürzer ist und bestimmt auch funktioniert, finde ich die ursprüngliche Version dennoch besser, weil sie verständlicher ist und damit besser gewartet werden kann. Wer versucht, möglichst kurz zu schreiben und dabei in Kauf nimmt, sich kryptisch auszudrücken, ist im Herzen eigentlich Perl-Programmierer (was ja nichts Schlechtes ist). Er muß dann aber auch mit Perls Fluch leben, daß größere Projekte so kaum zu realisieren sind, weil nach einiger Zeit keiner mehr den Code versteht.

Viele Grüße
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Sonntag 18. Januar 2009, 20:03

Ist meine Klasse so schwer zu lesen? Außenstehende können das ja besser beurteilen, aber ich könnte die ohne Kommentare auch in einem Jahr verstehen :roll:
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Sonntag 18. Januar 2009, 20:13

@abgdf

Deine Version verwendet doch nur mehr Methoden und Strings statt einem (boolschen) Zustand. Man könnte derdon's Klasse auch mit einer on und off Methode oder ähnlichem ausstatten, wenn man wollte. Das benutzen von boolschen Werten für mehr oder weniger einfache Zustände würde ich mir aber nicht nehmen lassen und empfinde derdon's Klasse auch als besser. Genau für solche Dinge sind boolsche Operationen und Werte mitunter vorgesehen, sollte man nicht nur bei "if" benutzen.
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Sonntag 18. Januar 2009, 20:20

Wir bekehren keine Ungläubigen! Wir verbrennen sie!

- Jonas
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
BlackJack

Sonntag 18. Januar 2009, 20:27

@abgdf: Bei OOP versucht man nicht Gegenstände aus dem "wirklichen Leben" 1:1 abzubilden. Es geht beim Programmieren immer darum das "wirkliche Leben" zu abstrahieren und nur die Teile zu modellieren die wichtig sind. Und wenn die Aspekte einer Lampe, die man abbilden möchte, abstrakt gesehen einfach nur ein Boolean sind, dann bastelt man da nicht künstlich eine Klasse drum herum.

Das kann man natürlich mit "Spielzeugbeispielen" nicht zeigen. Mit solchen OOP-Beispielen kann man eigentlich fast nur die Syntax demonstrieren. Der fast wichtigere Aspekt, wann und wie man OOP sinnvoll einsetzt ist schwieriger zu zeigen, weil man da ein Problem mit einer gewissen Komplexität für braucht.

Das Beispiel von derdon ist kürzer aber nicht so kurz das es unverständlich wäre. Der Vergleich mit Perl hinkt gewaltig. Dort ist der Schalter auch mit dem passenden Datentyp modelliert. An- und Ausschalten kann man durch direktes Zuweisen, da braucht man keine Methoden für. Und die Klasse weiss wie sie sich selbst als Zeichenkette darstellt, aber nicht so etwas spezielles wie eine Ausgabe.
Antworten