Python als Skill - Mangelware in Deutschland?

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
poker
User
Beiträge: 146
Registriert: Donnerstag 20. September 2007, 21:44

Leonidas hat geschrieben:Die Sache ist eben, dass Haskell ein anderes Konzept vertritt als andere Sprachen. Es wurde mal als pythonischste Sprache neben Python selbst bezeichnet - wobei inwieweit das stimmt, darf man natürlich selbst feststellen.
Ich finde ja Haskell nicht besonders pythonisch - Herausragend in seinem Gebiet, bestimmt; pythonisch, eher nein. ABC oder Lisp sind da für mein empfinden "pythonischer".

Wobei, ich finde die Bezeichnung - einfach im raum geworfen - auch total unpassend, weil kaum eine der Sprachen dem "zen of python" folgt, wenn man das als Definitionsgrundlage nehmen würde.

Lisp verstößt schon alleine gegen das "flat is better than nested", dass nicht nur auf eine Klassenhierarchie beschränkt sein muss, sondern auch auf die Verschachtelten klammern angewendet werden kann.

Haskell wird zu schnell komplex, wenn man versucht imperative Probleme Funktional auszudrücken (Stichwort: Monaden). Das Zen "Complex is better than complicated." kann dann oft nicht wirklich eingehalten werden.

Letztendlich vereint Python die ganzen Vorzüge dieser und anderer Sprache und Pakt es in eine saubere, übersichtliche und kompakte Art und weiße; Python bedient sich also derer Ideen/Konzepte, aber diese Tatsache macht die anderen Sprachen noch lange nicht dadurch "pythonisch".

Leonidas hat geschrieben: Probleme die in-the-wild auftreten mit Python besser lösbar, das ist alles.
Nein, Lufias "Profis" vertreten ihre unfundierte Vorstellungen über eine andere Sprache ohne sie *richtig* zu kennen. Damit sind sie nicht allein, in dem Thread hat auch wieder jemand unfundierte Äußerungen über eine Sprache gegeben, die er nicht genug kennt um das richtig einzuschätzen.
Damit sind sie aber nicht alleine. Du gehörst auch dazu so wie der größte teil auch (und ich schließe mich garnicht davon aus!), oder kennst du Haskell und Prolog so gut um eine "fundierte" Meinung zu haben?

Dass das oft nicht geht liegt einfach in der Natur der Sache. Man müsste sich ausgiebig mit den Sprachen auseinander setzen (Studium), Erkenntnisse nieder schreiben und am ende hätte man dann schon eine "Doktorarbeit" in der alle Konzepte, vergleiche und was weiß ich noch niedergeschrieben sind ;) Der nächste Punkt wäre dann das paper mit der Fachwelt durchzukauen und erst ab dem punkt kann man seiner Meinung die Etikette "Fundiertes Wissen" daraufkleben, weil anerkannt und daher halt fundiert.
Leonidas hat geschrieben: Ja. Aber die Aufgabenstellungen die für Java so anfallen können genauso gut in Python gelöst werden. Bei C sieht es etwas anders aus, denn damit kann man Treiber programmieren, was so in Python nicht geht.
Nein, auch die Aufgabenstellungen (So lange OOP nicht als Realisierung gefragt ist) können auch in C gelöst werden. Zugegeben mein C-Skills sind nicht besonders herausragend, aber sie reichen dennoch um die Allgemeinen Probleme die ich mit Python löse auch damit lösen zu können. -- Wozu ein C-Guru dann erst in der Lage ist, braucht man dan nicht weiter ansprechen.
Leonidas hat geschrieben: Aber was KI angeht oder andere Programmierbereiche die radikal andere Anforderungen haben (Haskell, Prolog) ist man mit Java und python ähnlich schlecht beraten.
KI, lässt sich sicherlich auch in Haskell bis zu einem gewissen grad elegant bewerkstelligen, aber dennoch ist das eher das Gebiet der logisch angesiedelten Sprachen wie Prolog.

mfg
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

poker hat geschrieben:Ich finde ja Haskell nicht besonders pythonisch - Herausragend in seinem Gebiet, bestimmt; pythonisch, eher nein. ABC oder Lisp sind da für mein empfinden "pythonischer".
Ich habe mich mit Haskell nicht so besonders stark befasst, aber diese Aussage habe ich irgendwo gelesen. Konnte sie aber zumindest mit meinen Haskell-Kenntnissen auch nicht nachvollziehen, aber ich bin davon ausgegangen, dass der jemand der das gesagt hat, über bessere Haskell-Kenntnisse hat als ich (nicht schwer). Ich habe mehr mit Scheme gemacht, was mir eigentlich auch gut gefallen hat und was viele Dinge mit Python gemeinsam hat. Leider war der Umfang der Dokumentation keine Gemeinsamkeit. Für weiteres lernen bräuchte es eine stärkere Motivation und am besten Leute die es wirklich auch praktisch zu etwas nutzen.
poker hat geschrieben:Wobei, ich finde die Bezeichnung - einfach im raum geworfen - auch total unpassend, weil kaum eine der Sprachen dem "zen of python" folgt, wenn man das als Definitionsgrundlage nehmen würde.
Das mag sein, der Zen wäre wohl ein Maßstab aber sicher nicht der einzige.
poker hat geschrieben:Lisp verstößt schon alleine gegen das "flat is better than nested", dass nicht nur auf eine Klassenhierarchie beschränkt sein muss, sondern auch auf die Verschachtelten klammern angewendet werden kann.
Das könnte man über Python auch sagen. Wenn wir uns strikt daran halten würden, dann müssten wir Rekursion entfernen und die ``if``-Ebenen stark einschränken. Das ``with``-Statement, so praktisch es auch ist, verstößt meiner Meinung nach auch gegen diesen Grundsatz.
poker hat geschrieben:Damit sind sie aber nicht alleine. Du gehörst auch dazu so wie der größte teil auch (und ich schließe mich garnicht davon aus!), oder kennst du Haskell und Prolog so gut um eine "fundierte" Meinung zu haben?
Nein, "gut genug" kenne ich sie sicher nicht, aber ich versuche anderen Sprachen die ich kenne nichts abzusprechen was sie könnten oder zu leisten in der Lage wären. In der Regel muss man sich eben informieren, ggf. auch auf den Menschen hören, der einem von der Sprache erzählt hat. Sich zu Informieren ist in Zeiten von Wikipedia und Co. keine große Sache mehr. Was aber ein Problem ist, ist die Beratungsresistenz einiger Leute (das gilt jetzt nicht nur für Computer). Das ist mitunter auch ein Grund für Hypes wie Rails (wobei ich Rails nicht schlechtmachen will, aber Rails ist nicht immer die Lösung, genauso wie XML oder REs immer die Lösung sind).
poker hat geschrieben:Dass das oft nicht geht liegt einfach in der Natur der Sache. Man müsste sich ausgiebig mit den Sprachen auseinander setzen (Studium)
Ok, das geht natürlich weit über das alltagstaugliche hinaus, aber oft reicht es auch offen für neues zu sein. Das das mit Zeitaufwand verbunden ist, stimmt, aber es kann sich im Endeffekt auch wieder rechnen, wenn man hinterher viel Zeit spart.
poker hat geschrieben:Nein, auch die Aufgabenstellungen (So lange OOP nicht als Realisierung gefragt ist) können auch in C gelöst werden. Zugegeben mein C-Skills sind nicht besonders herausragend, aber sie reichen dennoch um die Allgemeinen Probleme die ich mit Python löse auch damit lösen zu können. -- Wozu ein C-Guru dann erst in der Lage ist, braucht man dan nicht weiter ansprechen.
Das war auch gar nicht meine Aussage. Es ist schon klar, dass man mit C die gleichen Probleme lösen kann wie in Python. Ich bin sogar noch weiter gegangen und habe gemeint, dass es im Falle C Probleme gibt, die man mit Python im Moment einfach nicht lösen kann. Jedoch stimmen wir wohl überein dass man die Probleme mit Python in der Regel eleganter (aus Programmierersicht gesehen) lösen kann. Die größeren sprachlichen Möglichkeiten die Python da bietet ermöglichen eine Lösung die in vielen anderen Sprachen nur komplexer zu erreichen wäre.

Es ist oft eine Sache von "use the right tool for the task" - gestern musste ich einige Zeilen in vielen Dateien ersetzen. Das hat zur Konstruktion von ``grep -lR myproject.transdigest * | grep .html | xargs sed -i 's/myproject.transdigest/transdigest/`` geführt. Klar, wäre mit Python auch möglich gewesen, aber es wäre länger.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
poker
User
Beiträge: 146
Registriert: Donnerstag 20. September 2007, 21:44

Leonidas hat geschrieben: Das mag sein, der Zen wäre wohl ein Maßstab aber sicher nicht der einzige.
Das ist eben das Problem: "Nicht der einzige". Also, ist die definierung von "pythonisch" doch (mutmaßlich) nicht in allen Köpfen gleich. Deshalb halte ich die Verwendung des Begriffes, übertragen auf andere Sprachen als Python, die keinerlei Ähnlichkeiten haben (nur marginal), für etwas problematisch.
Leonidas hat geschrieben: Das könnte man über Python auch sagen. Wenn wir uns strikt daran halten würden, dann müssten wir Rekursion entfernen und die ``if``-Ebenen stark einschränken. Das ``with``-Statement, so praktisch es auch ist, verstößt meiner Meinung nach auch gegen diesen Grundsatz.
Da gebe ich dir recht. Auch die neue Einführung des trinäre Operators (Ja ich weiß, das Guido das nicht als so einen ansieht) lässt ja wilde Lisp ähnliche Konstrukte zu :D

Code: Alles auswählen

self.foo = (((state.inner(),) + state.sentinel()
                 if state.inner() != state.sentinel()[0] else state.inner())
                if state.sentinel() else (state.inner(),))
Zugegeben, ich nutze das häufiger wenn es geht, weil ich mich doch recht mit wohl fühle, als mit der implizierten Rückgabe des letzen ``and`` Vergleiches wo die Semantik nicht gleich auf Anhieb klar wird.
Triviales Beispiel:

Code: Alles auswählen

In [14]: count = 1
In [15]: "%d page%s" % (count, (count > 1 and "s" or ""))
Out[15]: '1 page'
In [16]: count = 10
In [17]: "%d page%s" % (count, (count > 1 and "s" or ""))
Out[17]: '10 pages'
Leonidas hat geschrieben: Was aber ein Problem ist, ist die Beratungsresistenz einiger Leute (das gilt jetzt nicht nur für Computer). Das ist mitunter auch ein Grund für Hypes wie Rails (wobei ich Rails nicht schlechtmachen will, aber Rails ist nicht immer die Lösung, genauso wie XML oder REs immer die Lösung sind).
ACK
Leonidas hat geschrieben: Ok, das geht natürlich weit über das alltagstaugliche hinaus, aber oft reicht es auch offen für neues zu sein. Das das mit Zeitaufwand verbunden ist, stimmt, aber es kann sich im Endeffekt auch wieder rechnen, wenn man hinterher viel Zeit spart.
Aber du sprachst ja gerade das Thema des "Fundierten Wissens" an. Und ich wüsste nicht wie man ohne intensives Studium (Ob selbststudium oder Lesen von Sekundär- oder Primärliteratur + Tests und Evaluierung) an fundiertes Wissen kommen sollte. Die Wikipedia und ein par tuts von Gurus zu lesen reicht da IMO nicht für aus um von fundiert zu reden. Gerade die Wikipedia ist nur eine Enzyklopädie und Enzyklopädien habe nicht den Status einer Sekundärliteratur; geschweige den tuts.
Leonidas hat geschrieben: Das war auch gar nicht meine Aussage. Es ist schon klar, dass man mit C die gleichen Probleme lösen kann wie in Python. Ich bin sogar noch weiter gegangen und habe gemeint, dass es im Falle C Probleme gibt, die man mit Python im Moment einfach nicht lösen kann.
Fehlinterpretation von mir.
Leonidas hat geschrieben: Jedoch stimmen wir wohl überein dass man die Probleme mit Python in der Regel eleganter (aus Programmierersicht gesehen) lösen kann. Die größeren sprachlichen Möglichkeiten die Python da bietet ermöglichen eine Lösung die in vielen anderen Sprachen nur komplexer zu erreichen wäre.
Absolut.
Leonidas hat geschrieben: Es ist oft eine Sache von "use the right tool for the task" - gestern musste ich einige Zeilen in vielen Dateien ersetzen. Das hat zur Konstruktion von ``grep -lR myproject.transdigest * | grep .html | xargs sed -i 's/myproject.transdigest/transdigest/`` geführt. Klar, wäre mit Python auch möglich gewesen, aber es wäre länger.
Sehe ich genauso.

mfg
BlackJack

@Leonidas: Das mit ``with`` kann ich nicht nachvollziehen. Schau Dir das ``try``/``except``/``finally``-Äquivalent an, das man dadurch einspart und das die meisten Leute gar nicht erst machen weil's so kompliziert ist. Insbesondere wenn man berücksichtigt, dass vor Python mit ``with`` noch eine Ebene mehr erforderlich war für das ``try``/``finally``.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

poker hat geschrieben:Also, ist die definierung von "pythonisch" doch (mutmaßlich) nicht in allen Köpfen gleich. Deshalb halte ich die Verwendung des Begriffes, übertragen auf andere Sprachen als Python, die keinerlei Ähnlichkeiten haben (nur marginal), für etwas problematisch.
Wenn nur Python pythonisch sein kann, dann braucht es das Adjektiv ja eigentlich gar nicht. Ist ja klar, dass Python pythonisch ist und C eben C-like, und Haskell meinetwegen haskellesk. Ich denke nicht dass man das Wort "pythonisch" nur auf Python begrenzen kann.
Ein Beispiel. Ich habe mir vor einiger Zeit eine JS-Library gesucht, weil ich einige Dinge mit JS machen wollte. Und auch weil das Herade gehyped wurde. Da habe ich mir also erstmal viele Libs angeschaut, von Rails' Liebling Prototype.js über Dojo, mootools und wie sie alle heißen. Mit dabei war auch Mochikit, welches in TG eingesetzt wird und von einem Python-Programmierer gemacht wird. Aber letztendlich bin ich an jQuery hängengeblieben, weil es einfach zu nutzen ist und man damit im Handumdrehen tolle Dinge machen kann (auch wenn es einige Kritikpunkte gibt). Das geht sogar so weit, dass ich seitdem ich JQuerys Query-Syntax kenne, die von BeautifulSoup gar nicht mehr so genial finde wie früher. Daher würde ich jQuery als pythonischer einstufen als BeautifulSoup.

Aber ich denke den Begriff "pythonisch" kann man eigentlich auch gar nicht objektiv sehen, weil er ja nicht objektiv ist. Man könnte ihn wohl mit "fits my mind" umschreiben.

Was den ternären Operator angeht ist das natürlich auch schon so ein Problem, aber irgendwo habe ich eine LC mit zwei Zählindexen gepostet, die noch eine LC einbettet. Sie ist absolut unlesbar und vollständig unverständlich (auch für mich, ich habe sie aus Stückchen zusammengesetzt).
poker hat geschrieben:Aber du sprachst ja gerade das Thema des "Fundierten Wissens" an. Und ich wüsste nicht wie man ohne intensives Studium (Ob selbststudium oder Lesen von Sekundär- oder Primärliteratur + Tests und Evaluierung) an fundiertes Wissen kommen sollte. Die Wikipedia und ein par tuts von Gurus zu lesen reicht da IMO nicht für aus um von fundiert zu reden. Gerade die Wikipedia ist nur eine Enzyklopädie und Enzyklopädien habe nicht den Status einer Sekundärliteratur; geschweige den tuts.
Gut, gut, ich ziehe den Begriff zurück und ersetze ihn gegen "ausreichendes". Ich denke, wenn man sich mal mit Leuten zusammensetzt die eine Ahnung haben, und sich mit dem Thema sagen wir mal einen Monat beschäftigt (muss auch gar nicht Vollzeit sein), dann würde ich sagen, reicht das um eine no-nonsense Meinung zu etwas abgeben zu können. Um mehr geht es doch erst einmal nicht. Wenn man feststellt, dass es unbrauchbar ist dann kann man Aufhören sich damit zu beschäftigen, wenn man aber feststellt dass es hilfreich ist, kann man weitermachen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
poker
User
Beiträge: 146
Registriert: Donnerstag 20. September 2007, 21:44

Leonidas hat geschrieben: Wenn nur Python pythonisch sein kann, dann braucht es das Adjektiv ja eigentlich gar nicht. Ist ja klar, dass Python pythonisch ist und C eben C-like, und Haskell meinetwegen haskellesk. Ich denke nicht dass man das Wort "pythonisch" nur auf Python begrenzen kann.
Flasche Schlussfolgerung. Man kann anscheinend, der vorherrschenden Meinung einiger pythonista, auch sehr wohl in Python programmieren, bei dem Code entsteht der **nicht** pythonisch ist. Daher braucht man das Adjektiv anscheinend sehr wohl, um zu beschrieben ob der geschriebene Python code eben auch der Ideologie der pythonista folgt, die sich ja zum größten Teil dem Zen und PEP8 verschrieben haben und auch um python-like elegantere Konstrukte Wissen und nur diese dann anwenden (=Siehe unteres Beispiel).

Die frage ist nur warum brauchen das viele "pythonista" und was genau verstehen die unter diesem Begriff?

Ich z.B. verstehe den Begriff so, das man sich (unter anderem) die eleganteren Mittel Python zu nutze machen sollte, anstatt gewohntes aus einer anderen Sprache in Python zu nutzen. Dazu gehört z.B. das folgende triviale Beispiel:

Code: Alles auswählen

In [28]: stack = ["eggs", "spam"]
In [29]: for elem in stack:
   ....:     print elem
   ....:
   ....:
eggs
spam
In [30]: for idx in xrange(len(stack)):
   ....:     print stack[idx]
   ....:
   ....:
eggs
spam
[29] würde ich hier als "pythonisch" bezeichnen, da es nicht erforderlich ist wie z.B. in C mit Indexen auf array zu hantieren.

Das heißt für mich aber nicht, dass wenn $SPRACHE das gleiche Konstrukt bietet es automatisch "pythonisch" bzw. "$SPRACHE`isch" ist. In Ruby z.B. ist das alles andere als rubysch ;) Das einzige was man sagen kann ist, $SPRACHE bietet für X die gleiche Syntax an, dadurch wird sie aber noch lange nicht "pythonisch".

Kannst du mir ungefähr folgen, worauf ich hinaus will?
Leonidas hat geschrieben: Aber ich denke den Begriff "pythonisch" kann man eigentlich auch gar nicht objektiv sehen, weil er ja nicht objektiv ist. Man könnte ihn wohl mit "fits my mind" umschreiben.
Du näherst dich mir langsam aber stätig an. Was ist also die Schlussfolgerung aus deiner durchaus richtigen Aussage? ... Es ist immer ein Problem Begrifflichkeiten zur Wertung einer Sache(lage) zu benutzen, deren definierung nicht eindeutig ist. Das ist ein allgemeines Problem dessen wir Tagtäglich ausgesetzt sind.

Das Fachvokabular macht es da ein wenig einfacher, weil (hoffentlich) exakt definiert, dessen Definition in allen Köpfen des Fachs gleich ist/sein sollte. Aber auch auf Bezug dessen ist es leider in der Fachwelt nicht immer gewährleistet.

Als Beispiel könnte man nun meine obige definition von "pythonisch" betrachte oder auch deine usw. Ist sie den auch wirklich richtig? Bestimmt nicht da rein Subjektive und gebildet aus Meinungsaustausch mit anderen.
Leonidas hat geschrieben: Das geht sogar so weit, dass ich seitdem ich JQuerys Query-Syntax kenne, die von BeautifulSoup gar nicht mehr so genial finde wie früher. Daher würde ich jQuery als pythonischer einstufen als BeautifulSoup.
Das mang gut sein und ich glaube dir auch an dieser stelle, da ich mich mit jQuery noch nicht beschäftigt habe :)
BTW: Ich finde und fand ehrlich gesagt BeautifulSoup alles andere als Pythonisch. Auch das es sich nicht an PEP8 hält was die Namensgebung anbelangt finde ich alles andere als schön. Aber, es ist relative einfach zu nutzen und fürs schnelle gut zu gebrauchen. In einer echten Anwendung würde ich BeautifulSoup aufgrund der Geschwindigkeit und des Speicherverbrauchs nicht mehr benutzen wollen. Dafür reicht IMO auch ein eigener geschriebener Scanner der ``re`` auf ein komfortables Minimum abstrahiert :) Und mit einigen Prüfungen kann man sehr leicht überprüfen ob die Seite noch der gleichen Syntax folgt ;) Der mehrgewinn ist geringer Speicherverbrauch und eine "top" Geschwindigkeit. Der nachteil eben das sich nicht jeder mit RE's wohlfühlt.
Leonidas hat geschrieben: Was den ternären Operator angeht ist das natürlich auch schon so ein Problem, aber irgendwo habe ich eine LC mit zwei Zählindexen gepostet, die noch eine LC einbettet. Sie ist absolut unlesbar und vollständig unverständlich (auch für mich, ich habe sie aus Stückchen zusammengesetzt).
Ja LCs oder GCs könne verschachtelt zu wirklich "hässlichen" code führen. Ist aber IMO nicht schlimmer als Lisp code zu lesen :D Editoren mit syntax highliting von klammern helfen da schon ungemein.
Leonidas hat geschrieben: Gut, gut, ich ziehe den Begriff zurück und ersetze ihn gegen "ausreichendes". Ich denke, wenn man sich mal mit Leuten zusammensetzt die eine Ahnung haben, und sich mit dem Thema sagen wir mal einen Monat beschäftigt (muss auch gar nicht Vollzeit sein), dann würde ich sagen, reicht das um eine no-nonsense Meinung zu etwas abgeben zu können. Um mehr geht es doch erst einmal nicht. Wenn man feststellt, dass es unbrauchbar ist dann kann man Aufhören sich damit zu beschäftigen, wenn man aber feststellt dass es hilfreich ist, kann man weitermachen.
Jo, das klingt besser.
Imperator
User
Beiträge: 275
Registriert: Montag 20. August 2007, 14:43
Kontaktdaten:

@Leonidas: Ich hab einen Smiley dahinter gesetzt.
@poker: Mit der Aussage, dass Python ABC ähnelt hast du recht. Guido schreibt selbst, dass viele Konzepte aus Python ABC nachempfunden sind.
Antworten