Hallo liebe Community,
ich habe mich über längere Zeit immer mal wieder mit Python beschäftigt und nun auch mal Ruby ausprobiert. Beides hat seine Vorteile, bei Ruby gefällt mir dass alles ein Objekt ist sehr gut, so dass auch Zahlen Methodenaufrufen durchführen können sehr gut. Als Gesamtlösung tendiere ich mehr zu Python als zu vielen anderen Lösungen. Allgemein möchte ich bei Sprachen wie Python oder Ruby bleiben, denn in der Syntax lässt sich sehr guten denken und arbeiten.
Ich möchte jetzt keine alten Wunden aufreissen mit der Frage "was ist besser?", aber ich stelle die Frage nach dem Gesamtpaket. Ich weiss, dass es für jedes Programmier-Problem viele Lösungen gibt, bzw. viele Sprachen die hier für oder für jenes Problem gut geeignet sind, jedoch denke ich dass eine "Meisterschaft" in einer Sprache eine ebenso gute Lösung sein kann. Wenn man genau weiss was man alles rausholen kann und viele Handkniffe, die einem einfach nur nach vielen Jahren der Praxis bekannt werden. Wenn dazu noch die Sprache selbst in viele Bereiche ausgebaut wird, also Embedded, Server, Desktop, Interoperatibilität etc.. Mit vielen Technologien zusammen arbeitet, mit vielen DB's verwendet werden kann und in der Gesamtheit, auch für die Zukunft, immer mehr Bereiche abdeckt.
Mein Frage ist nun folgende. Da mir selbst die Übersicht fehlt, hätte ich nun gerne gewusst wie ihr obige Angelegenheit seht, ist Python (auch im Vergleich zu Ruby oder andere Sprachen) als programmier technische Gesamtlösung geeignet, oder sehe ich das alles vielleicht von einem falschen Standpunkt?
Danke im Voraus
Python: Fullstack
- pillmuncher
- User
- Beiträge: 1484
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
Bisher habe ich nichts gefunden, was ich mit Python nicht habe tun können, wenn ich es tun wollte. Ich habe mir sogar eine EDSL zur Logikprogrammierung a la Prolog gebaut. Sicherlich ist bare metal programming etwas, wofür Python nicht direkt gemacht ist, aber dafür hat der liebe Gott ja C und Assembler erfunden. Objektorientierte Programmierung in Python ist so, wie sie IMO sein sollte. Funktionale Programmierung könnte besser integriert sein, zB. gibt es keine tail calls, aber die kann man sich ja selber bauen.
Bibliotheken für alles (und noch mehr) gibt es im sog. Cheese Shop.
Der BDFL sagte übrigens mal, von zehn Kilometern Höhe aus betrachtet seien Python, Perl und Ruby ein und dieselbe Sprache. Das fand ich sofort einleuchtend.
Ach ja, kuck mal hier:In anderen Worten: auch in Python ist alles ein Objekt, und jedes Objekt hat einen Typ. Der Typ von type ist interessanterweise type.
Bibliotheken für alles (und noch mehr) gibt es im sog. Cheese Shop.
Der BDFL sagte übrigens mal, von zehn Kilometern Höhe aus betrachtet seien Python, Perl und Ruby ein und dieselbe Sprache. Das fand ich sofort einleuchtend.
Ach ja, kuck mal hier:
Code: Alles auswählen
>>> dir(123)
['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__', '__delattr__',
'__div__', '__divmod__', '__doc__', '__float__', '__floordiv__', '__format__', '__getattribute__', '__getnewargs__', '__hash__', '__hex__', '__index__', '__init__', '__int__', '__invert__', '__long__', '__lshift__', '__mod__', '__mul__', '__neg__', '__new__', '__nonzero__', '__oct__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdiv__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'imag', 'numerator', 'real']
>>> (123).bit_length()
7
>>> def foo():
... pass
...
>>> dir(foo)
['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globals__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name']
>>> foo.func_name
'foo'
>>> class Bar(object):
... pass
...
>>> dir(Bar)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
>>> Bar.__module__
'__main__'
>>> type(123)
<type 'int'>
>>> type(int)
<type 'type'>
>>> type(foo)
<type 'function'>
>>> type(Bar)
<type 'type'>
>>> type(type)
<type 'type'>
In specifications, Murphy's Law supersedes Ohm's.
Du kannst richtig große GUI-Anwendungen mit Python und PyQt machen, z.B. dieser Matlab-GUI Nachbau: http://python-spyder.software.informer. ... ot/136162/DontWorry hat geschrieben:Mein Frage ist nun folgende. Da mir selbst die Übersicht fehlt, hätte ich nun gerne gewusst wie ihr obige Angelegenheit seht, ist Python (auch im Vergleich zu Ruby oder andere Sprachen) als programmier technische Gesamtlösung geeignet, oder sehe ich das alles vielleicht von einem falschen Standpunkt?
Besser ist immer die Programmiersprache, die in Deiner Domäne verbreitet ist, die mit der Deine Firma die Projekte macht, die Programmiersprache, die der Kunde fordert. Wenn das alles nicht gegeben ist, weil Du einfach nur so programmieren willst, dann solltest Du Dir trotzdem überlegen, was Dein Schwerpunkt sein wird: GUI, Mathe, Web, Grafik, ...? Bei Mathe ist Python ganz weit vorne. Bei Ruby fällt mir dagegen "on the Rails" ein und Web-Entwicklung mit Python braucht einen wichtigen Grund, einfach nur so, da bist Du mit PHP oder Ruby on Rails schneller beim Ergebnis und vorallem schneller beim Webhoster produktiv. Im Grafikbereich besitzen wichtige Programme eine Python-Schnittstelle (Gimp, Blender, MakeHuman, PhotoScan, ...), von einer Ruby Schnittstelle bei solchen Programmen habe ich dagegen noch nie gehört.DontWorry hat geschrieben:Ich möchte jetzt keine alten Wunden aufreissen mit der Frage "was ist besser?"
Besser sind auch immer mehrere Programmiersprachen, also zusätzlich zu Python noch Java, C# oder C++. Viele Python Module werden in C oder C++ programmiert.
Hey
ich habe aber noch keinen Fallschirmspringer gesehen der eine Anwedung erstellt wären er aus 10000 Meter Höhe fällt. Für mein Verständnis hingt das Beispiel etwas.
Die Feinheiten treten dann eben doch erst auf wenn man sich eine Sprache genau ansieht. So gibt es ein Haufen von Implementierungen für Python, um es eben auch überall verwenden zu können. Eine riesige Standard-Lib und viele Dritt-Module. Eine große Standard-Lib ermöglich für mein Verständnis ohne viel Vorkonfiguration, sich direkt auf das angestrebte Ziel zu stürzen, ohne vorerst sich um die Perepherie zu kümmern. Was ich bis jetzt von Ruby gesehen habe, ist das nicht so.
Ich habe mir auch die ein oder andere Statistik zu "Ruby vs. Python" angetan. Man kann gute Anstellungen finden wenn man Ruby beherrscht, aber ich behaupte einfach mal, dass Ruby zumeist im Webbreich eingesetzt wird und für andere die Libs dafür fehlen. Wenn ich ein Softwareprojekt plane, dann suche ich den effizientesten Weg und Programmiere nicht erst eine Menge Sitekicks bevor der Hauptteil läuft.
Mein winziger Ausflug in andere Gefilde war kurz, aber ich denke das Python als Gesamtlösung in Sachen Programmiersprachen, einfach die beste Lösung darstellt. Denn in Kooperation z. B. mit C ist es doch auch möglich laufzeitkritische Angelegenheit zu stemmen.
Kann jemand sagen wie diesbezüglich seine Erfahrungen sind?
ich habe aber noch keinen Fallschirmspringer gesehen der eine Anwedung erstellt wären er aus 10000 Meter Höhe fällt. Für mein Verständnis hingt das Beispiel etwas.
Die Feinheiten treten dann eben doch erst auf wenn man sich eine Sprache genau ansieht. So gibt es ein Haufen von Implementierungen für Python, um es eben auch überall verwenden zu können. Eine riesige Standard-Lib und viele Dritt-Module. Eine große Standard-Lib ermöglich für mein Verständnis ohne viel Vorkonfiguration, sich direkt auf das angestrebte Ziel zu stürzen, ohne vorerst sich um die Perepherie zu kümmern. Was ich bis jetzt von Ruby gesehen habe, ist das nicht so.
Ich habe mir auch die ein oder andere Statistik zu "Ruby vs. Python" angetan. Man kann gute Anstellungen finden wenn man Ruby beherrscht, aber ich behaupte einfach mal, dass Ruby zumeist im Webbreich eingesetzt wird und für andere die Libs dafür fehlen. Wenn ich ein Softwareprojekt plane, dann suche ich den effizientesten Weg und Programmiere nicht erst eine Menge Sitekicks bevor der Hauptteil läuft.
Mein winziger Ausflug in andere Gefilde war kurz, aber ich denke das Python als Gesamtlösung in Sachen Programmiersprachen, einfach die beste Lösung darstellt. Denn in Kooperation z. B. mit C ist es doch auch möglich laufzeitkritische Angelegenheit zu stemmen.
Kann jemand sagen wie diesbezüglich seine Erfahrungen sind?
Gehört Django oder viele MiniFrameworks nicht zu denen mit welchen es schnell Möglich ist Webseiten zu gestalten? Ich meine Scaffolds sind toll, ich hätte diese auch gerne bei Django, aber Generics sind auch gut. Ist der Umfang von Django nicht auch umfangreicher als der von Rails?DontWorry hat geschrieben:mit Python braucht einen wichtigen Grund, einfach nur so, da bist Du mit PHP oder Ruby on Rails schneller beim Ergebnis und vorallem schneller beim Webhoster produktiv. Im Grafikbereich besitzen wichtige Programme eine Python-Schnittstelle (Gimp, Blender, MakeHuman, PhotoScan, ...), von einer Ruby Schnittstelle bei solchen Programmen habe ich dagegen noch nie gehört.
C oder C++ muss ich vom Studium aus so oder so machen, fällt also aus der Bewertung raus xDDontWorry hat geschrieben:Besser sind auch immer mehrere Programmiersprachen, also zusätzlich zu Python noch Java, C# oder C++. Viele Python Module werden in C oder C++ programmiert.
Nein natürlich du hast vollkommen recht, aber ist es nicht so, dass man jeder Programmiersprache seine Zeit schenkt um gut darin zu werden? Es gibt da ja auch den Spruch "Viele Köche verderben den Brei", den man hier bei anwenden kann, wie soll man denn wirklich gut werden (immer im Hinterkopf die Gesamtlösung) wenn man überall ein bischen kann?
- pillmuncher
- User
- Beiträge: 1484
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
In den US-Amerikanischen Liberal Arts Colleges gilt die Maxime: Learn everything about something and something about everything. Ich finde, das lässt sich gut auf das Programmieren übertragen. Schau dir viele verschiede Sprachen/Technologien und deren Konzepte an und vertief dich in ein paar davon. Man sollte nicht davon ausgehen, dass das, was man in der Schule/Uni/FH lernt, dasjenige ist, mit dem man später im Berufsleben konfrontiert wird. Besser ist es, sich darin zu üben, schnell Konzepte zu verstehen und einordnen zu können.DontWorry hat geschrieben:wie soll man denn wirklich gut werden (immer im Hinterkopf die Gesamtlösung) wenn man überall ein bischen kann?
Was Sprachen angeht, ist Seven Languages in Seven Weeks von Bruce Tate zu empfehlen. Außerdem Scheme und The Structure and Interpretation of Computer Programs von Abelson und Sussman. Und The Art of Prolog von Sterling und Shapiro. Und natürlich C und Expert C Programming von Van Der Linden.
Welche konkreten Technologien derzeit in Mode sind ist dagegen nicht so wichtig. Die lernt man eben, wenn man sie braucht. Wobei natürlich auch hier gilt, dass man sich einige davon ansehen sollte um die Konzepte zu verstehen und ein paar davon vertieft, damit man lernt, auf was man achten muss, wenn eine neue Sau durchs Dorf getrieben wird.
Ach ja, PL1, Lambdakalkül und Mengen-, Modell- und Kategorientheorie sollte man auch mal gesehen haben.
<rant> Ich mache ja die Schule dafür verantwortlich, dass viele Studenten ihr Studium so "zielorientiert" angehen. In der Schule hat man als Ziel immer die nächste Ex/Schulaufgabe/Klausur wobei genau definiert ist, was man da zu können hat und das ist alles mehr oder weniger auswendig zu lernen. Ja, auch Mathe. Ein tieferes Verständnis wird idR. weder verlangt noch ermöglicht. Das darf man auf keinen Fall aufs Studium übertragen. Geisteswissenschaftler sind meist sehr viel besser darin als Ingenieure oder Naturwissenschaftler, Konzepte zu durchdringen und sie sich anzueignen. Am besten können das die Philosophen, die tun praktisch nichts anderes, als Konzepte zu analysieren und fluffige Probleme so zu systematisieren, dass sie am Ende analysierbar werden. Deswegen kann ein Philosoph überall erfolgreich sein, als Taxifahrer ebenso wie als Konzernmanager oder Programmierer.
Wenn ich mich als Kind oder Jugendlicher bei den Erwachsenen über die Schule beschwert habe, bekam ich unweigerlich zur Anwtort "Wart's nur ab, du wirst dich nochmal nach der Schule zurücksehnen". Aus der Schule bin ich jetzt seit knapp 30 Jahren draußen und, nein, nicht einen Tag habe ich mich danach zurückgesehnt. Nicht eine Millisekunde. </rant>
In specifications, Murphy's Law supersedes Ohm's.
@DontWorry: Das Beispiel ”hinkt” nur wenn man es tatsächlich wörtlich nimmt. Das ist eine Redewendung. Wie das deutsche „Aus der Vogelperspektive betrachtet …”. So einen Satz würdest Du doch auch nicht kritisieren weil sich Deines Wissens noch nie ein Programmierer in einen Vogel verwandelt und sich die Sprachen im Flug von oben angeschaut hat.
Klar ist es ein Problem in einer Sprache wirklich gut zu werden wenn man versucht sehr viele zu beherrschen, aber in der Praxis muss man fast immer mehrere Sprachen können, je nach Anwendungsgebiet. Da zählen ja schon reguläre Ausdrücke oder SQL dazu. Bei Webprogrammierung kommt man nicht mehr wirklich um JavaScript herum, egal in welcher Sprache man das Backend programmiert. C oder gar Assembler braucht man im hardwarenahen Bereich ziemlich schnell. Oder wenn man eine C-Bibliothek an Python anbinden möchte oder ein Erweiterungsmodul in C schreiben möchte oder muss. Selbst wenn man es in Cython schreibt, sind C-Kenntnisse von Vorteil.
Klar ist es ein Problem in einer Sprache wirklich gut zu werden wenn man versucht sehr viele zu beherrschen, aber in der Praxis muss man fast immer mehrere Sprachen können, je nach Anwendungsgebiet. Da zählen ja schon reguläre Ausdrücke oder SQL dazu. Bei Webprogrammierung kommt man nicht mehr wirklich um JavaScript herum, egal in welcher Sprache man das Backend programmiert. C oder gar Assembler braucht man im hardwarenahen Bereich ziemlich schnell. Oder wenn man eine C-Bibliothek an Python anbinden möchte oder ein Erweiterungsmodul in C schreiben möchte oder muss. Selbst wenn man es in Cython schreibt, sind C-Kenntnisse von Vorteil.
Wenn Du die Möglichkeiten von Django brauchst und ausnutzt, dann ist das sicher so, wenn nicht, dann bist Du mit PHP viel schneller bei einem 5 EUR/Monat Webhoster online. Beim Webzeugs hängt es ganz stark von der Größenordnung ab, wo das Optimum liegt:DontWorry hat geschrieben:Gehört Django oder viele MiniFrameworks nicht zu denen mit welchen es schnell Möglich ist Webseiten zu gestalten?
klein: PHP
groß: Java EE
(Beides aus eigener Erfahrung, Django habe ich mir nur kurz mal angeschaut)
Es sind ja nicht viele Köche, sondern Du bist der Koch und Du benutzt mehrere Töpfe. Ich glaube nicht, dass Du ohne mehrere Programmiersprachen ein guter Entwickler werden kannst.DontWorry hat geschrieben:Es gibt da ja auch den Spruch "Viele Köche verderben den Brei", den man hier bei anwenden kann, wie soll man denn wirklich gut werden (immer im Hinterkopf die Gesamtlösung) wenn man überall ein bischen kann?
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Also ich denke, wenn man etwas haben möchte was man breit flächig einsetzten kann, dann ist es Python.
Natürlich geht damit aber nicht alles bzw. es ist nicht für alle Anwendungsfälle das optimale Werkzeug. Dennoch denke ich, ist Python die Sprache für die meisten Einsatzgebiete. Darüber hinaus ist es IMHO auch eine der einfachsten und schönste Sprache.
Vielleicht ist es Sinnvoller zu Fragen, für was eignet sich Python nicht besonders gut... Einige Punkte wurden aber schon genannt.
Natürlich geht damit aber nicht alles bzw. es ist nicht für alle Anwendungsfälle das optimale Werkzeug. Dennoch denke ich, ist Python die Sprache für die meisten Einsatzgebiete. Darüber hinaus ist es IMHO auch eine der einfachsten und schönste Sprache.
Vielleicht ist es Sinnvoller zu Fragen, für was eignet sich Python nicht besonders gut... Einige Punkte wurden aber schon genannt.
Java ist halt das neue Cobol Wobei ich glaube, dass die Verbreitung von Java in den nächsten Jahren zurückgehen wird. So wurde z.B. bei uns an der Unni Java aus den Programmierpraktika rausgenommen und für den OOP-Teil tatsächlich durch C++ ersetzt. Insgesamt hat sich das Lehrspektrum zur funktionalen Programmierung hin verschoben (Haskell kam dazu).MagBen hat geschrieben:...groß: Java EE...
Dass Java sehr häufig eingesetzt wird, wo man früher Cobol genommen hätte, stimmt schon. Ich sehe aber nicht, dass in dieser Domäne (kaufmännischer / verwaltungstechnischer Bereich) der Einsatz von Java in naher Zukunft zurückgehen wird. C++ ist jedenfalls in diesem Bereich kein geeigneter Ersatz. Höchstens C#.jerch hat geschrieben:Java ist halt das neue Cobol Wobei ich glaube, dass die Verbreitung von Java in den nächsten Jahren zurückgehen wird.MagBen hat geschrieben:...groß: Java EE...
@jens: Alle möglichen Sprachen werden für neue Projekte genommen. Es gibt halt nicht *die* Sprache.
Macht aber Sinn. Römische Legionäre haben z.B. mit Holz-Schildern trainiert, die doppelt so schwer waren wie die Richtigen. Wenn sie dann im echten Einsatz waren, kamen ihnen die Schilder nicht mehr so schwer vor.BlackJack hat geschrieben:Die armen Studenten. C++ ist ja noch schrecklicher als Java.
@MagBen: Naja aber sie hatten halt Schilde und keine Fischernetze. Wenn man für funktional schon Haskell verwendet, dann würde ich ja erwarten das für OOP auch eine ”reine” Sprache verwendet wird, die auch das Konzept umsetzt und nicht eine Perversion davon die nachträglich auf C draufgetackert wurde. Smalltalk oder so etwas halt. Irgendwas wo dem Erfinder des OOP-Begriffs nicht die Tränen in die Augen kommen.