Jakie wady ma Python 3?

Odpowiedz Nowy wątek
2019-09-30 12:26

Rejestracja: 3 lata temu

Ostatnio: 1 minuta temu

0

Zainspirowany tematem Jakie wady ma C# i .NET? chciałbym usłyszeć wasze opinie na temat wad Pythona :) Skupmy się na Pythonie 3.
Zaczynam:

Powszechne używanie metaklas (np. modele, formularze w Django) i dynamicznej modyfikacji obiektów (boto3) uniemożliwiają/bardzo utrudniają skuteczne otypowanie niektórych bibliotek.

Dict driven development. Widziałem wiele projektów w których budowanie dicta jest rozstrzelone w 10 różnych plikach, a potem interesująca nas funkcja jest wywoływana z parametrami **params, co strasznie utrudnia debugowanie - nie wiadomo skąd co się bierze. Dodajmy do tego wywoływanie metody na podstawie jej nazwy przekazanej gdzieś jako string i ni cholery bez przechodzenia krok po kroku w debuggerze nie dowiemy się co tam się dzieje.

Global Interpreter Lock w CPythonie.

Pozostało 580 znaków

2019-09-30 16:26

Rejestracja: 3 lata temu

Ostatnio: 6 godzin temu

4
Aventus napisał(a):

Ja pozwolę sobie podpiąć się pod pytanie, bo chodziło mi to po głowie od jakiegoś czasu. Mianowicie czemu uważa się że Python jest dobry do prototypowania ale nie do większych, produkcyjnych aplikacji? Co np. przemawia za tym żeby nie stosować Pythona do napisania jakiegoś Web API (podkreślam że większego a nie jakiś prosty CRUD)?

Tak zazwyczaj uważają programiści, którzy normalnego IDE nie widzieli i testów nigdy nie pisali. I w ogóle nie odróżniają pewnie problemów po stronie architektury, od problemów stricte z samym językiem. Oni od razu wiedzą, że będą walczyć w swoim crudzie o cenne nanosekundy i Python się nie nada.

Oni od razu wiedzą, że jest zbyt słabo typowalny (IDE+lintery+mypy właśnie), bo jak ich nie przypilnuje tak jak np. kompilator Rusta, to pewnie ich projekt na 100 linii w porywach, w którym piszą tylko oni sami, się posypie z nadmiaru błędów. I winny będzie wyłącznie Python, a nie architektura czy np. ich styl kodowania.

Pozostało 580 znaków

2019-09-30 16:41

Rejestracja: 15 lat temu

Ostatnio: 1 godzina temu

2
TurkucPodjadek napisał(a):

Oni od razu wiedzą, że jest zbyt słabo typowalny (IDE+lintery+mypy właśnie), bo jak ich nie przypilnuje tak jak np. kompilator Rusta, to pewnie ich projekt na 100 linii w porywach, w którym piszą tylko oni sami, się posypie z nadmiaru błędów. I winny będzie wyłącznie Python, a nie architektura czy np. ich styl kodowania.

Myślę, że typowy projekt w korpo ma > 100k linii kodu łącznie (nie wliczając komentarzy i pustych linii). Jeśli to jest np monolit to jest to wszystko w jednym projekcie. Przy takiej skali statyczne typowanie jest bardzo pomocne. Projekty na 100 linii to raczej skrypty do automatyzacji pewnych prostych powtarzających się czynności i te są zwykle w bashu czy Pythonie.

Zresztą możemy zrobić jakieś proste wyliczenia. Dla przykładu mamy 5 letni projekt z 5 programistami. Programista pracuje 200 dni w roku i codziennie dodaje efektywnie 20 linijek kodu (czyli jest to wartość netto = ilość linii dodanych - ilość linii usuniętych). Ostatecznie mamy: 5 * 5 * 200 * 20 = 100k linii kodu.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 2x, ostatnio: Wibowit, 2019-09-30 16:48
Pokaż pozostałe 11 komentarzy
@TurkucPodjadek: czy Twoim zdaniem nie ma różnicy między językami statycznie/dynamicznie typowanymi, kompilowanymi/interpretowanymi? - nullpt4 2019-09-30 19:09
@nullpt4: różnicy w czym dokładnie? - TurkucPodjadek 2019-09-30 21:18
w np. łatwości użytkowania, popełniania mniej błędów itp. - nullpt4 2019-10-01 07:28
@nullpt4: zatem odpowiadam: są różnice. - TurkucPodjadek 2019-10-01 09:21

Pozostało 580 znaków

2019-09-30 17:08

Rejestracja: 5 lat temu

Ostatnio: 38 sekund temu

Lokalizacja: Warszawa

1

@TurkucPodjadek: nie wiem po co ta złość, po prostu wyraziłem swoje zdanie że dynamiczne typowanie utrudnia pracę. Na pewno taki Python może być sensowny do pewnych zastosowań np. AI, skrypty jako alteratywa dla Bashu. Po prostu chodzi o to że napisanie List<products> products, zamiast po prostu products nie spowoduje że strace 20 godzin. Ok, może są narzędzia do analizy kodu, ale fajnie jest jak kod już jest w miare zrozumiały bez nich, np. jak widzisz zmiany na githubie.
Ja ogólnie nie wierze że jest coś takiego jak doskonały język ogólnego przeznaczenia i np. lubię Grooviego który jest bardziej dynamicznym językiem niż Python ale nie użyłbym go do stworzenia projektu na 20k kodu, tylko do testów, jakiś prostych skryptów czy małych projekcików :)


Nie pomagam przez PM. Pytania zadaje się na forum.
Jeszcze nie, ale kiedys pewnie spróbuje :) - scibi92 2019-09-30 17:12
Ja się nie denerwuję (skąd ten wniosek, za mało emotek?), tylko wyrażam swoje zdanie. :P - TurkucPodjadek 2019-09-30 17:19

Pozostało 580 znaków

2019-09-30 17:26

Rejestracja: 10 miesięcy temu

Ostatnio: 10 miesięcy temu

1

Jak dla mnie wady Pythona 3 to powolność, dynamiczne typowanie, nie jest kompilowany. Gdyby Crystal nie miał takiej składni jak Ruby z tym end które mi się nie podoba. Byłby idealnym zamiennikiem Pythona. Ma wszystko to czego brakuje Pythonowi.
https://crystal-lang.org

Pokaż pozostałe 5 komentarzy
Przeciez python od 3/4 lat to nakladka na C do obliczen numerycznych oraz milion bibliotek "ogólnego zastosowania" głownie do Data science i ML'a. Jak python mial byc alternatywą dla PHP'a skoro te dwa jezyki powstaly w zupelnie innym celu? Ile jezykow ma wielowatkowosc -> C, Rust, Julia, C#, Java, Erlang, Golang, Nim. Pewnie jeszcze pare przynajmniej się znajdzie ale to są te w których coś napisałem albo z czym pracowałem. - machineko 2019-09-30 19:47
@superdurszlak podnosi sie. jest concurrency-go-like, teraz https://stackoverflow.com/a/55873335 (super) wolno idzie. z tego co wiem teraz przepychaja GIL'a na wyzszy poziom. - Cr0w 2019-09-30 20:12
Ale Python w tamtych dziedzinach ma dobrą konkurencję jak Julia czy R. A w Polsce najwięcej pracy jest w Django jeżeli ktoś myśli o Pythonie. Do tego, żeby pracować w data science, sztucznej inteligencji, trzeba mieć łeb do matematyki i algorytmiki. Już widzę tych klepaczy kodu i tworzenia formatek, którzy przechodzą z webdev do takiej dziedziny tęgich umysłów. Pythona zazwyczaj wybierają ludzie ze słynnych bootcampów skuszeni łatwym zarobkiem 15k w reklamach tych kursów. Dlatego przeważnie wybierają najłatwiejszy język programowania do nauki, czyli prosty Python. - openindiana 2019-09-30 20:25
@machineko: jak się mają ostatnie 3-4 lata do dobrych 25 lat historii języka nim nastała moda na używanie go w ML / data science? - superdurszlak 2019-09-30 22:42
To już zależy od "sezonu" od nakładki na C po jezyk do nauczania oraz jakieś skrypty i QA przez jakies backendy kiedy na to był "hajp" (co do 5/6 lat temu to sporo tez bylo analizy danych nie czystego Data Science i od cholery skryptowania) - machineko 2019-10-01 00:04

Pozostało 580 znaków

2019-09-30 18:30

Rejestracja: 2 lata temu

Ostatnio: 1 minuta temu

Lokalizacja: Kraków

4

Ok, trochę będę s**ł do własnego gniazda bo choć już dawno nie babrałem zawodowo łapek w Pythonie to wciąż mam do niego sentyment:

  • dynamiczne typowanie - potrafi sprawić problemy, dlatego staram się je jako tako łatać type hintami i innymi takimi
  • wielowątkowość - żeby w 2019 domyślne interpretery dalej wycinały wykonanie równoległe... na szczęście Python ma całkiem znośne biblioteki do zrównoleglania na procesach. W każdym razie concurrent.futures są całkiem OK, bo multiprocessing to już tak sobie, w sumie nigdy nie wiesz (dosłownie) kiedy Ci umrze proces
  • wydajność - nie ma co się oszukiwać, jest powolny. Da się to podratować kompilując do binarki (tak, da się) czy używając JIT np. z numba albo hakując bibliotekami które pod spodem mają C / C++ / Fortran / Go / Ada (takie też chyba kiedyś znalazłem)...
  • ... ale im dalej w las i więcej kombinowania i hakowania w imię wydajności tym więcej problemów, bo np. mimo interpretowanego języka uzależniasz się nie dość od platformy, to jeszcze od kolejności dynamicznego importu N różnych skompilowanych libek, które pod spodem zaciągają wybiórczo Twoje dependencje. Mówię tu szczególnie o różnych geopandasach, shapely, fionach itp. które jak dobrze pamiętam narobiły mi z tym kiedyś rabanu.

Nie znam się, ale się wypowiem

Pozostało 580 znaków

2019-09-30 19:47

Rejestracja: 1 rok temu

Ostatnio: 2 miesiące temu

1

Python to mój ulubiony język, patrząc na estetykę i konsystencje kodu. Ale ma jedną kolosalną wadę tj szybkość, a raczej jej brak. Nie zawsze można to tolerować czy przeskoczyć, ostatnio np robiłem jakiś task w którym na końcu się okazało że konieczne jest sprawdzenie jednej listy i drugiej pod kątem wyłonienia permutacji, resztę kodu już miałem w pythonie no to już tylko wystarczyło dorzucić tam taki moduł, od razu sobie pomyślałem o itertools bo co może pójść źle, ale okazało się że zrobiłem taki interes że zyskałem ok godzinę przy pisaniu w pythonie zamiast w c++, a potem kod wykonania zamiast godziny wynosił jakoś ponad tydzień.

Tak więc jak jest szansa że będziesz musiał wykonywać w projekcie ciężkie komputacje to z samym pythonem możesz się przejechać. Niby spory jest za granicą hype na data science w pythonie i rubym ale oni o poważne dla komputera obliczenia tam się ocierają dosyć rzadko z tego co widziałem. Niestety do typowo webowych rzeczy Python to też nie jest optymalny język bo przeglądarki go nie używają, skutek taki że przy pisaniu botów gdzie miałem tysiące małych operacji typu document.query itp to python & selenium było też o dużo wolniejsze niż nodejs & puppeteer.

Moim zdaniem tragedia pythona jest taka że w niczym nie jest wyspecjalizowany i w niczym najlepszy i dlatego ludzie będą zawsze z niego przeskakiwać gdzieś dalej.

edytowany 1x, ostatnio: Ragnar Lothbrok, 2019-09-30 19:48
Ooooof Ruby do data science co ty piłeś xD - machineko 2019-09-30 19:49
Użyj Googla, jest na drugim miejscu po Pythonie w tej branży wg popularności. Nie mój to pomysł i nie moja brocha. - Ragnar Lothbrok 2019-09-30 19:55
Link or didnt happen serio pracuje w branzy "data science" od lat i jakoś nigdy nigdzie czegokoliwek w Rubym nie pisalem. A na 2 miejscu na 99% bedzie R pozniej Matlab/C/Julia zaleznie od niszy pozniej Swift - machineko 2019-09-30 19:57
A to R nie jest jakimś supersetem do rubiego? Jeśli to nie ma nic wspólnego no to wybacz, nie używałem jednego ani drugiego tylko widziałem statystyki ostatnio. - Ragnar Lothbrok 2019-09-30 20:01
Nope R to calkowicie inny jezyk. - machineko 2019-09-30 20:02
Była dyskusja na reddit, że Rust w takich dziedzinach przegrywa z R i Julia, bo nie ma odpowiednich bibliotek. W Ruby natomiast napisanych jest dużo narzędzi do hakingu, patrz metasploit czy inne programiki na Kali Linux. - openindiana 2019-09-30 20:32

Pozostało 580 znaków

2019-09-30 20:08

Rejestracja: 1 rok temu

Ostatnio: 7 miesięcy temu

1

Z mojej strony największe wady:3

  1. Performance szczególnie bolesne bardzo kosztowne pętle co automatycznie wyklucza pisanie czegoś sensownego w czystym pythonie i trzeba schodzic do Cythona. Ale największym problemem nie jest sam performance bo bez problemu można wykorzystać setki bibliotek które sprawiają że python staje się szybszy niż np. Java (w obliczeniach numerycznych) ale problemem jest okrutnie ujowa wielowątkowość i tutaj już nie ma za bardzo co zrobić.

Natomiast od jakiegoś czasu jest parę fajnych inicjatyw które się tym zajmują szczególnie numba i dask. numba

  1. Bardzo powolny rozwój samego języka od 3.5 praktycznie nie było żadnych przełomowych zmian w języku i przy 3.8 dalej nic "magicznego" nie wchodzi.

  2. Rozrośnięte zależności w bibliotekach coś w stylu noda tylko na mniejszą skalę ale dalej "toksyczne"

  3. Brak sensownego przywództwa w community, od jakiegoś czasu nastąpiła "demokratyzacja" języka i zajmowanie się sprawami typu master - slave i innym tego typu rakiem zamiast sprawami typu wydajność.

Od jakiegoś czasu mocno ograniczyłem pythona jako główny język na rzecz Juli oraz Rusta natomiast nie ma co ukrywać liczba genialnych bibliotek w Pythonie jest na tyle duża że język będzie rozwijał się przez najbliższe lata bo nie opłaca się pisać całego nowego środowiska w nowym jęzku o ile nie jesteś wielkim korpo.

edytowany 2x, ostatnio: machineko, 2019-09-30 20:10

Pozostało 580 znaków

2019-09-30 20:15

Rejestracja: 3 lata temu

Ostatnio: 6 miesięcy temu

0

wolny i strasznie dynamiczny (rzeczy typu monkey patching itp), ale mimo wszystko super jezyk.

edit. no i strasznie jezyk sie rozjezdza :( te cale the zen of python jest swietne, ale od 3.6 (?) powoli jezyk jest zasmiecany 'ladniejszymi' rozwiazaniami i puchnie w np 3 sposoby na printowanie stringa...

edytowany 1x, ostatnio: Cr0w, 2019-09-30 20:19

Pozostało 580 znaków

2019-09-30 20:28

Rejestracja: 1 rok temu

Ostatnio: 1 minuta temu

Lokalizacja: Warszawa

0

OT, sorry

Czy Python nie stał się de facto standardem w nauczaniu programowania? Nie tylko na świecie ale i w Polsce?


"Ktoś sobie uświadomił, że pisał pod pseudonimem rzeczy, które lepiej żeby w firmie nie wypatrzyli :-)"
"Kiedy wiedzieć czy zacząć nauke Springa? bo w czystej Javie to nic ciekawego nie zrobie chyba"
Może, staje się. - lion137 2019-09-30 22:08
Gdzieś widziałem nowe rankingi popularności języków i Python był #1, przed JSem. Ale nie ma co się oszukiwać 90% tego hypu to ludzie którzy się nim pobawią i zostawią więc jest on mocno napompowany. - Ragnar Lothbrok 2019-10-01 01:25

Pozostało 580 znaków

2019-09-30 22:11

Rejestracja: 3 lata temu

Ostatnio: 20 godzin temu

1

Widzę, że sporo piszących uważa za wadę dynamiczne typowanie; to chyba nie OK, język, który jest dynamiczny krytykować właśnie za to.


Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0