Ich🐮🐍🖥️iel

2 years ago by da_cow (she/her) to c/ich_iel

Kontext: Ich kann bis jetzt nur Java und will ein Programm schreiben um die Metadaten meiner Musikbibliothek zu verändern. Die Bibliothek die das Möglich macht unterstützt nur Python. Anfangs war ich echt positiv von der Einfachheit überrascht, aber mittlerweile kann ich den Hass auf Python sehr stark verstehen. Spätestens bei den Ersten Typisierungsfehlern lernt man stark typisierte Sprachen wie Java zu schätzen.

pulsey 34 points 2 years ago

Mit Java fängt man beim rechten Bild an und es bleibt auch dabei.

path: 0 13805234, hotness: undefined, score: 34, children: 6
Black616Angel 3 points 2 years ago

Ich lerne grade die (Programmier-)Arbeit an einem Tool, welches zwar in Java geschrieben ist, aber Python als Skriptsprache verwendet... Python 2.

Außerdem muss man den Testserver für das Testen von Änderungen rebooten, wir haben aber nur einen Server für ca. 6 Leute.

Ich freue mich schon auf die Arbeit.

path: 0 13805234 13813015, hotness: undefined, score: 3, children: 5
___qwertz___ 4 points 2 years ago

Jython?

Ich hasse Jython, wie kann man den so viele Jahre den Sprung auf Python 3 verpassen? >_>

path: 0 13805234 13813015 13822924, hotness: undefined, score: 4, children: 1
Black616Angel 1 point 2 years ago

Das kann sein. Aber das ist nur in dem Tool integriert, das wir eingekauft haben... Vor ca. 5 Jahren... Als Python 2 schon fast eol war.

path: 0 13805234 13813015 13822924 13826201, hotness: undefined, score: 1, children: 0
Randelung 3 points 2 years ago

(Eigene) VM und automatisierte Tests für beste Ergebnisse.

path: 0 13805234 13813015 13817614, hotness: undefined, score: 3, children: 1
Black616Angel 2 points 2 years ago

Ja aber die Lizenzen...

path: 0 13805234 13813015 13817614 13822390, hotness: undefined, score: 2, children: 0
pulsey 3 points 2 years ago

Das klingt als wärst du in der Hölle. Hoffentlich wird's bald besser.

path: 0 13805234 13813015 13814422, hotness: undefined, score: 3, children: 0
bjoern_tantau 21 points 2 years ago

Was ich gelernt habe ist, dass du Python so schreiben solltest als wäre es typisiert. Hab bisher nur Godot Script geschrieben, aber das ist stark an Python angelehnt, deshalb hoffe ich, dass sich das übertragen lässt.

Du kannst so ziemlich allem einen Typ geben und das so forcieren. Dann solltest du nicht durcheinander kommen.

path: 0 13799822, hotness: undefined, score: 21, children: 2
mogoh 9 points 2 years ago

Hilft einem wenig, wenn man libraries verwendet.

path: 0 13799822 13800282, hotness: undefined, score: 9, children: 0
UnfortunateShort 6 points 2 years ago

Das Type-Checking kann aber leider nicht mit strikt typisierten Sprachen mithalten und erfordert oft manuelle Checks, die eigentlich komplett überflüssig sind. Liegt natürlich auch daran, dass man die Typen theoretisch ständig ändern kann, egal was dran steht.

Und was schlimmer ist: Fehler in den Annotations führen teilweise dazu, dass dir vermeintliche Folgefehler an komplett anderen Stellen angezeigt werden, als sie wirklich liegen. Z.B. dass deine Variable an gegebener Stelle den falschen Typ hat, was aber eigentlich daran liegt, dass an anderer Stelle was kompatibles aber verkehrtes zugewiesen wurde, wobei du ursprünglich die Annotation vergessen hast, weil an der Stelle ein Type-Hint aufgeplopt ist, was den ersten Fehler widerum unsichtbar macht.

Klingt vielleicht konstruiert, aber eine Annotation vergisst man schnell und wenn, dann wird es schnell ärgerlich.

path: 0 13799822 13800227, hotness: undefined, score: 6, children: 0
jenesaisquoi 18 points 2 years ago

Du brauchst mypy in deinem Leben.

Oder die Hartkern-Variante: in Rust schreiben und via Python konsumierbar machen mit PyO3

path: 0 13804663, hotness: undefined, score: 18, children: 3
runiq 6 points 2 years ago

Im Prinzip ja, aber für ein One-Off-Skript zum Anpassen von Metadaten wären mir das dann wahrscheinlich doch zuviele Typen.

path: 0 13804663 13806773, hotness: undefined, score: 6, children: 0
muelltonne 3 points 2 years ago

Was macht das denn genau?

path: 0 13804663 13806145, hotness: undefined, score: 3, children: 1
wasabi 6 points 2 years ago

Python kann mittlerweile statische type hints. Dabei schreibst du nur die intention ("ein int geht rein, ein bool kommt raus"). Mypy warnt dich dann wenn du in irgendeine Funktion Daten reinstecken willst, die nicht reinpassen. Zur Laufzeit werden die type gibts ignoriert. Je nachdem wen man fragt ist das entweder eine total flexible Art Typen so stark oder so lax wie man möchte in seinen code zu integrieren, oder es ist nutzlos da es keine laufzeitsicherheit bietet.

path: 0 13804663 13806145 13811318, hotness: undefined, score: 6, children: 0
Diplomjodler3 17 points 2 years ago

Du machst es falsch. Sorry, wenn ich hier pauschal werde. Aber so eine Aufgabe ist wirklich trivial in Python. Ich verstehe, das man da verwirrt ist, wenn man von anderen Sprachen kommt, aber du musst einfach ein bisschen umdenken.

path: 0 13806058, hotness: undefined, score: 17, children: 4
cows_are_underrated 2 points 2 years ago

Das ganze Ding ist nicht enorm schwer, aber Python hat einfach nicht die Komplexität die ich brauche um mich wohl zu fühlen. Zudem finde ich das ganze Syntax teils sehr komisch.

path: 0 13806058 13807836, hotness: undefined, score: 2, children: 3
Diplomjodler3 5 points 2 years ago

Da kann Python nun aber nix dafür.

path: 0 13806058 13807836 13809112, hotness: undefined, score: 5, children: 2
cows_are_underrated 4 points 2 years ago

Das ist so. Sorgt trotzdem dafür, dass ich Python auf keinen Fall für Größere Projekte nutzen werde.

path: 0 13806058 13807836 13809112 13810033, hotness: undefined, score: 4, children: 1
Diplomjodler3 2 points 2 years ago

Das ist dein gutes Recht, Brudi.

path: 0 13806058 13807836 13809112 13810033 13810108, hotness: undefined, score: 2, children: 0
redxef 13 points 2 years ago
path: 0 13807766, hotness: undefined, score: 13, children: 2
d_k_bo 4 points 2 years ago

Python ist stark typisiert (aber dynamisch), aber booleans sind trotzdem integer

Das ist kein Widerspruch, bool ist eine Subklasse von int.

assert issubclass(bool, int)
path: 0 13807766 13808806, hotness: undefined, score: 4, children: 1
redxef 5 points 2 years ago
path: 0 13807766 13808806 13811263, hotness: undefined, score: 5, children: 0
5W_lzxEP 12 points 2 years ago

Python ist stark Typisiert. Was du meist ist dynamisch - statisch.

path: 0 13804683, hotness: undefined, score: 12, children: 10
Saleh 10 points 2 years ago

Ich mag dynamische Typisierung. Ich möchte nicht an jeder Stelle dem Programm erklären müssen, dass ich eine Fließkommazahl speichern möchte, wenn ich eine Ganzzahl mit einer Fließkommazahl multipliziert habe. Ich möchte auch nicht bei großen 2D-Arrays Speicherplatz fressen, weil keine Spalten mit verschiedneen Typen zugelassen werden und alles in Fließkomma, oder noch schlimmer in Text umgewandelt werden muss.

path: 0 13804683 13804831, hotness: undefined, score: 10, children: 9
aaaaaaaaargh 16 points 2 years ago

Provokativer Nimm: Wenn du dynamische Typisierung in einer Matrix brauchst, ist dein Programm vermutlich nicht besonders performant.

Genau wegen sowas würde ich Python nie für mehr als einfache Skripte nehmen, aber da stehe ich vermutlich eher allein auf weiter Flur.

path: 0 13804683 13804831 13805194, hotness: undefined, score: 16, children: 4
gandalf_der_12te 2 points 2 years ago

dynamische Typisierung

"Spalten mit verschiedenen Typen" klingt für mich stark nach Tabelle, a.k.a. Excel-Tabelle oder ne Art Datenbank-Table.

path: 0 13804683 13804831 13805194 13813752, hotness: undefined, score: 2, children: 1
aaaaaaaaargh 3 points 2 years ago

In einer strikten Typisierung wäre der Typ des Feldes einer n-dimensionalen Matrix bereits bekannt, was natürlich deutliche Vorteile hinsichtlich ihrer Abarbeitung in kritischen Bereichen erlauben würde. Bei "Spalten mit verschiedenen Typen" klingt das eher nach einem generischen Datenmodell.

path: 0 13804683 13804831 13805194 13813752 13816052, hotness: undefined, score: 3, children: 0
wasabi 2 points 2 years ago

Sowas macht in modernem Python auch niemand. Dem type checker für solche Konstrukte einen Typ beizubringen ist quasi unmöglich. Wer außerhalb von winzigen skripten keine type hints nutzt, machts mMn falsch.

path: 0 13804683 13804831 13805194 13811425, hotness: undefined, score: 2, children: 1
aaaaaaaaargh 3 points 2 years ago

Naja, ich habe ja direkt auf jemanden reagiert, der das offensichtlich tut, also so ganz niemand stimmt wohl nicht.

path: 0 13804683 13804831 13805194 13811425 13811836, hotness: undefined, score: 3, children: 0
froh42 11 points 2 years ago

a) Bei statisch typisierten Sprachen geht der Trend auch stark dort hin, dass der Complier für Dich die Typen ermittelt - zur Compile-Zeit. Auch haben viele davon auch die Möglichkeit punktuell dynamisch zu arbeiten, an genau den Stellen, wo man es braucht.

b) Oh wow, du möchtest nicht "Speicherplatz fressen". Dann nimm eine Sprache / Werkzeug / Library, die nicht pro gespeichertem Wert einzeln tracken muss, von welchem Typ sie ist. Hier zahlst Du in dynamischen Sprachen immer einen Performance-Overhead. Deswegen wird z. B. in Python viel Number crunching auch nicht in Python selbst gemacht, sondern in NumPy

path: 0 13804683 13804831 13805176, hotness: undefined, score: 11, children: 3
aaaaaaaaargh 5 points 2 years ago

ad b) nicht nur Performance-Overhead, sondern eine dynamisch typisierte Sprache macht das ja auch nicht umsonst, da wird irgendwo ein Typen-Bit oder Byte rumfliegen.

Ich glaube, dass hinter der vorangehenden (also nicht deiner) Aussage, die Unkenntnis über effiziente Speichermodelle steht. Ein auf fp32 basiertes Modell ist für hohen Durchsatz garantiert geeigneter als irgendwas gemischtes. Deswegen ist der Speicherplatz egal, das wird eh alles in den Cache gerammelt und die sind groß genug. Und bei Nudelmaschinen (SIMD) muss man eh Homogenität gewährleisten.

path: 0 13804683 13804831 13805176 13811015, hotness: undefined, score: 5, children: 2
froh42 4 points 2 years ago

Fünfzehn Extrapunkte für den Begriff Nudelmaschine für SIMD

path: 0 13804683 13804831 13805176 13811015 13813407, hotness: undefined, score: 4, children: 1
eunieisthebus 11 points 2 years ago

Python ist doch angenehm. Und die meisten typfehler sagt dir schon die Entwicklungsumgebung noch vor dem run.

Für kleinere Sachen ist python sowieso spitze weil wortarm und für größeres solltest du sowieso Tests schreiben um Fehler auszuschließen. Ob Python oder Java ist dann auch wurst

path: 0 13806869, hotness: undefined, score: 11, children: 0
aaaaaaaaargh 8 points 2 years ago

[Zensierte abfällige und zynische Bemerkungen über Python]

path: 0 13804697, hotness: undefined, score: 8, children: 3
Diplomjodler3 8 points 2 years ago

[Sarkastisch formulierter Vorwurf des mangelnden Verständnisses von Python]

path: 0 13804697 13806167, hotness: undefined, score: 8, children: 2
aaaaaaaaargh 4 points 2 years ago

[Patzige Antwort über GIL, furchtbare Syntax und brechende Veränderungen]

path: 0 13804697 13806167 13808774, hotness: undefined, score: 4, children: 0
fairchild 1 point 2 years ago
path: 0 13804697 13806167 13808204, hotness: undefined, score: 1, children: 0
death_to_carrots 8 points 2 years ago path: 0 13801053, hotness: undefined, score: 8, children: 0
trollercoaster 7 points 2 years ago

Python ist eigentlich ganz nett. Man muss nur pragmatisch rangehen und auf jeden Fall die Community und die merkwürdigen Säue, die die regelmäßig durchs Dorf treiben, ignorieren...

Gerade für kleinere Sachen ist das so sperrigen Sprachen wie Java deutlich überlegen, wenn man sich erstmal reingefunden hat.

Wie bei allen Programmiersprachen, ist es natürlich sinnvoll, gescheite Werkzeuge zu benutzen.

path: 0 13805090, hotness: undefined, score: 7, children: 5
cows_are_underrated 2 points 2 years ago

Für kleine Sachen ist Python geil, da hört es aber auch schon auf.

path: 0 13805090 13805296, hotness: undefined, score: 2, children: 4
fallingcats 4 points 2 years ago

Sag das Home Assistant, es scheint für die recht gut zu funktionieren.

path: 0 13805090 13805296 13806532, hotness: undefined, score: 4, children: 0
Gladaed 1 point 2 years ago

Papperlapap, für fast alles was scripting ist ist python toll.

E.g. conan2 ist pythonbasiert. Testsuites kann man damit auch betreiben. Und es erlaubt dir z.b.PS nicht zu können wenn du plattformunabhängigkeit brauchst.

path: 0 13805090 13805296 13823682, hotness: undefined, score: 1, children: 2
cows_are_underrated 2 points 2 years ago

Für simple Sachen ist es gut, aber komplexe Sachen machen absolut keinSpaß, einfach weil Python zu blöd ist zu verstehen was ich tue wenn ich meine ganzen Klassen nicht an den Anfang schreiben will. Das macht das ganze Ding einfach u übersichtlicher und zwingt einen dazu eventuell Sachen umzustrukturieren, obwohl es dadurch dann unübersichtlicher wird.

path: 0 13805090 13805296 13823682 13824695, hotness: undefined, score: 2, children: 1
nett_hier 2 points 2 years ago

Du kannst am Anfang from __future__ import annotations machen und dann Klassen vor ihrer Deklaration verwenden. Siehe auch dieser StapelÜberlauf Faden: https://stackoverflow.com/...

path: 0 13805090 13805296 13823682 13824695 13835042, hotness: undefined, score: 2, children: 0
polle 5 points 2 years ago

Ich sehe, selbst nicht checken und dann ist die Programmiersprache das Problem, nice.

path: 0 13805630, hotness: undefined, score: 5, children: 0
NotAnonymousAtAll 3 points 2 years ago

Wisst ihr eigentlich wie gut es sich anfühlt durch eine Kommentarsektion zu blättern bei der bei fast jedem Unter-Faden etwas steht zu dem mensch sich äußern könnte; aber dann bewusst zu entscheiden, dass das echt nicht nötig ist und auch andere Menschen das genau so gut unter sich ausdiskutieren können; und dann halt einfach nicht auf irgendwelche Details eine Reaktion zu pfostieren, sondern einfach nur zu chillen (und vielleicht einen Meta-Kommentar abzusetzen, aber mehr nicht)?

path: 0 13818869, hotness: undefined, score: 3, children: 0
random 3 points 2 years ago

durchschnittlicher pyton benutzer gegen umschreiben in rost chad

path: 0 13823539, hotness: undefined, score: 3, children: 0
wasabi 2 points 2 years ago

Warum nimmst du nicht einfach taglib? Die library hat bindings für viele sprachen

path: 0 13811558, hotness: undefined, score: 2, children: 1
cows_are_underrated 1 point 2 years ago

Das ist das erste mal, dass ich überhaupt mit libraries Arbeite, also kenne ich den ganzen Kram noch nicht. Wenn ich mein script final fertiggestellt habe kommt das ganze vielleicht noch in Java, wo ich dann taglib nutze.

path: 0 13811558 13814316, hotness: undefined, score: 1, children: 0
Gladaed 1 point 2 years ago

Python hat viele tolle Eigenschaften, manchmal fällt es nur schwer sie zu sehen.

path: 0 13823643, hotness: undefined, score: 1, children: 0
ich_iel
ich_iel

@feddit.org

login for more options
5091
9960
1961

Die offizielle Zweigstelle von ich_iel im Fediversum.

Alle Pfosten müssen den Titel 'ich_iel' haben, der Unterstrich darf durch ein beliebiges Symbol oder Bildschriftzeichen ersetzt werden. Ihr dürft euch frei entfalten!


Matrix


📱 Empfohlene Schlaufon-Applikationen für Lassmich


Befreundete Kommunen:

!wir_iel@feddit.org

!i_itrl@feddit.org

!ich_ial@lemmy.world

!zunftgemeinde@feddit.org

!ki_iel@feddit.org


Sonstiges:

Zangendeutsch-Wörterbuch


Regeln:

1. Seid nett zueinander

Diskriminierung anderer Benutzer, Beleidigungen und Provokationen sind verboten.

2. Pfosten müssen den Titel 'ich_iel' oder 'ich iel' haben

Nur Pfosten mit dem Titel 'ich_iel' oder 'ich iel' sind zugelassen. Alle anderen werden automatisch entfernt.

Unterstrich oder Abstand dürfen durch ein beliebiges Textsymbol oder bis zu drei beliebige Emojis ersetzt werden.

3. Keine Hochwähl-Maimais oder (Eigen)werbung

Alle Pfosten, die um Hochwählis bitten oder Werbung beinhalten werden entfernt. Hiermit ist auch Eigenwerbung gemeint, z.b. für andere Gemeinschaften.

4. Keine Bildschirmschüsse von Unterhaltungen

Alle Pfosten, die Bildschirmschüsse von Unterhaltungen, wie beispielsweise aus WasistApplikaton oder Zwietracht zeigen, sind nicht erlaubt. Hierzu zählen auch Unterhaltungen mit KIs.

5. Keine kantigen Beiträge oder Meta-Beiträge

ich_iel ist kein kantiges Maimai-Brett. Meta-Beiträge, insbesondere über gelöschte oder gesperrte Beiträge, sind nicht erlaubt.

6. Keine Überfälle

Wer einen Überfall auf eine andere Gemeinschaft plant, muss diesen zuerst mit den Mods abklären. Brigadieren ist strengstens verboten.

7. Keine Ü40-Maimais

Maimais, die es bereits in die WasistApplikation-Familienplauderei geschafft haben oder von Rüdiger beim letzten Stammtisch herumgezeigt wurden, sind besser auf /c/ichbin40undlustig aufgehoben.

8. ich_iel ist eine humoristische Plattform

Alle Pfosten auf ich_iel müssen humorvoll gestaltet sein. Humor ist subjektiv, aber ein Pfosten muss zumindest einen humoristischen Anspruch haben. Die Atmosphäre auf ich_iel soll humorvoll und locker gehalten werden.

9. Keine Polemik, keine Köderbeiträge, keine Falschmeldungen

Beiträge, die wegen Polemik negativ auffallen, sind nicht gestattet. Desweiteren sind Pfosten nicht gestattet, die primär Empörung, Aufregung, Wut o.Ä. über ein (insbesonders, aber nicht nur) politisches Thema hervorrufen sollen. Die Verbreitung von Falschmeldungen ist bei uns nicht erlaubt.


Bitte beachtet auch die Regeln von Feddit.org

go to feed...