Python: Fullstack

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.
Antworten
DontWorry
User
Beiträge: 4
Registriert: Mittwoch 26. November 2014, 02:53

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
Benutzeravatar
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:

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 anderen Worten: auch in Python ist alles ein Objekt, und jedes Objekt hat einen Typ. Der Typ von type ist interessanterweise type.
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

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?
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:Ich möchte jetzt keine alten Wunden aufreissen mit der Frage "was ist besser?"
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.

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.
a fool with a tool is still a fool, www.magben.de, YouTube
DontWorry
User
Beiträge: 4
Registriert: Mittwoch 26. November 2014, 02:53

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?
DontWorry
User
Beiträge: 4
Registriert: Mittwoch 26. November 2014, 02:53

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.
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: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.
C oder C++ muss ich vom Studium aus so oder so machen, fällt also aus der Bewertung raus xD
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?
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

DontWorry hat geschrieben:wie soll man denn wirklich gut werden (immer im Hinterkopf die Gesamtlösung) wenn man überall ein bischen kann?
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.

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.
BlackJack

@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.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

DontWorry hat geschrieben:Gehört Django oder viele MiniFrameworks nicht zu denen mit welchen es schnell Möglich ist Webseiten zu gestalten?
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:
klein: PHP
groß: Java EE
(Beides aus eigener Erfahrung, Django habe ich mir nur kurz mal angeschaut)
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?
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.
a fool with a tool is still a fool, www.magben.de, YouTube
Benutzeravatar
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.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

MagBen hat geschrieben:...groß: Java EE...
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).
BlackJack

@jerch: Die armen Studenten. C++ ist ja noch schrecklicher als Java. :-)
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

jerch hat geschrieben:
MagBen hat geschrieben:...groß: Java EE...
Java ist halt das neue Cobol ;) Wobei ich glaube, dass die Verbreitung von Java in den nächsten Jahren zurückgehen wird.
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#.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Die interessante Frage ist, welche Sprach wird für neue Projekte genommen... Java?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

@jens: Alle möglichen Sprachen werden für neue Projekte genommen. Es gibt halt nicht *die* Sprache.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

BlackJack hat geschrieben:Die armen Studenten. C++ ist ja noch schrecklicher als Java.
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.
a fool with a tool is still a fool, www.magben.de, YouTube
BlackJack

@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. :-)
DontWorry
User
Beiträge: 4
Registriert: Mittwoch 26. November 2014, 02:53

An der Sache mit der Philosophie ist schon was drann, man kann letztendlich eine Sache am besten beurteilen, wenn man viel Wissen hat um es bestmöglich zu beleuchten.

Danke für Eure Anregungen.
Antworten