Czy jest hejt na Pythona?

Czy jest hejt na Pythona?
cerrato
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 9072
2

Czy ja wiem, w dobie AI i BigData też nie jest to jakiś margines, zwłaszcza że duże zbiory to zwykle jakaś potężna mieszanina różnych typów danych

Ok, to może inaczej - nawet jeśli tego jest dużo, to jest to jedna konkretna dziedzina/nisza, a w pozostałych nadal uważam, że brak typowania jest proszeniem się o kłopoty a nie ułatwieniem. W przypadku parsowania JSON'ów o bliżej nieokreślonej zawartości - masz rację, takie dynamiczne podejście do tematu jest plusem. A jakiś inny scenariusz? Inne zastosowanie, gdzie są konkretne argumenty inne niż lenistwo/wygoda/preferencje programisty na rzecz języków bez typów?

domyślnie masz dynamiczne typowanie i możesz symulować statyczne

Czyli nadal jest to udawanie czegoś lepszego: języki bez typów starają się naśladować takie z typami. Rozumiem, że jest to krok w dobrą stronę, ale jeśli można mieć język typowany to po co brać taki bez typów i potem robić jakieś namiastki typowania?

cały ekosystem, który wyrósł wokół Pythona, ilość frameworków (tych popularnych) oraz bibliotek jest bardzo duża.

OK, ale pytanie - czy ekosystem wyrósł oraz czy język zdobył taką popularność PRZEZ brak typów, czy może MIMO TEGO? Bo wydaje mi się, że jest wiele argumentów na rzecz Pythona (tak samo jak na rzecz każdego innego języka), są też argumenty przeciw. I nie szedłbym na takie mocne uproszczenie, że skoro Pytong jest taki popularny to z pewnością dlatego, że nie ma typów. Wydaje mi się, że te dwie rzeczy niekoniecznie muszą z siebie wynikać/być połączone ze sobą.

mam wrażenie, że dyskusja schodzi na tory Linux vs Windows, Taby vs Spacje.

W żaden sposób mnie nie urażasz, nie bój się. Różnica między pisaniem z Tobą a niektórymi osobami jest taka, że ładnie trzymasz poziom (ja zresztą staram się też) i gadamy o jakichś konkretnych argumentach/scenariuszach a nie jesteś głupi bo tego nie czaisz, pewnie jesteś przekwalifikowanym na programistę maszynistą ;) Ogólnie tak, masz rację - to jest kwestia preferencji. Ja mam swoje argumenty i swoje podeście, Ty masz swoje i raczej nikt drugiego nie przekona ;)

Tylko zauważ jedną rzecz - to wszystko się zaczęło wiele postów wyżej, kiedy @lion137 napisał statyczne typy w programowaniu wręcz utrudniają!. Wtedy poprosiłem o konkretny przykład, kiedy takie typowanie jest problemem, ale nie dostałem żadnej sensownej odpowiedzi (poza Twoją - przetwarzanie JSON'ów). Także jedną rzeczą jest to, że mam swoje preferencje i akurat dla mnie typy są ważne i pożyteczne, ale drugą jest to, że dostałem informację o tym, że typy bywają kulą u nogi, ale nie doczekałem się sensownego wyjaśnienia.

Pyxis
  • Rejestracja: dni
  • Ostatnio: dni
1

Inne zastosowanie, gdzie są konkretne argumenty inne niż lenistwo/wygoda/preferencje programisty na rzecz języków bez typów?

Trochę pejoratywne określenia wybrałeś. Motywacją była łatwość czytania/pisania kodu i elastyczność jego użycia (podmiana typów danych). Powiedzmy coś jak przejście z języka asemblera do C. Po prostu stworzono bardziej abstrakcyjną warstwę. Jakbym miał to przerysować, to promptowanie z LLM-em jest jeszcze poziom wyżej, możesz napisać zrób mi kalkulator dla liczb zespolonych w Pythonie. Nic Cię nie obchodzi, dostajesz działający kod. A z jakimś tam agentem możesz ten kod zapisać do pliku i mieć exe kalkulatora na pulpicie z GUI. Wiadomo, że pojawiają się wątpliwości o jakość takich produktów, choć na tym forum są osoby, które są pewne tych rozwiązań już dziś.

Czyli nadal jest to udawanie czegoś lepszego: języki bez typów starają się naśladować takie z typami. Rozumiem, że jest to krok w dobrą stronę, ale jeśli można mieć język typowany to po co brać taki bez typów i potem robić jakieś namiastki typowania?

To dodano później, w momencie gdy Python stał się coraz powszechniej używany. Type hinty mają wspierać IDE czy checkery, by podczas pisania kodu informować o typach. Ale wciąż jest zachowana kompatybilność wsteczna i niezgodne typy będą rzucać wyjątkami.

OK, ale pytanie - czy ekosystem wyrósł oraz czy język zdobył taką popularność PRZEZ brak typów, czy może MIMO TEGO?

No z tego co zawsze gdzieś czytałem, to stał się popularny przez prostotę. Zresztą jest polecany do nauki programowania. A to prostota bierze się z jego mechanizmów wewnętrznych, jak i prostej składni, często jakiś problem rozwiązuje się one-linerem.

to wszystko się zaczęło wiele postów wyżej, kiedy @lion137 napisał statyczne typy w programowaniu wręcz utrudniają!

Po części się zgadzam. Jak mam napisać coś wydajnego, to wybiorę kod kompilowany. Jak chcę sobie napisać aplikację, która coś tam przekonwertuje, to wezmę Pythona, bo napiszę to szybko. Nawet jak chcę przekształcić plik tekstowy/wyciągnąć jakieś kolumny to szkoda mi czasu na Pythona i robię to AWK, bo jest szybciej i nie muszę myśleć o otwieraniu pliku open (nawet w Pythonie ten boilerplate jest), tylko robię jedną linijkę z poziomu konsoli. I z tej perspektywy @lion137 ma rację.

cerrato
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 9072
2

Trochę pejoratywne określenia wybrałeś

Masz rację, ale w mojej ocenie wybieranie języka bez typów (poza podanymi przez Ciebie sytuacjami, w których rzeczywiście ma to sens, aczkolwiek - jak pisałem, w językach typowanych można także skorzystać z "typów bez typów" - np. dynamic w Dart) jest właśnie objawem lenistwa. Dla mnie to jest podobna sytuacja do kolesia na budowie, który nie zakłada kasku albo szelek na rusztowaniu bo mu one krępują ruchy, czuje się ograniczany, niewygodnie jest po coś sięgnąć, głowa się latem bardziej poci itp. Skoro są różne elementy/mechanizmy bezpieczeństwa - czy dot. produkowanego kodu czy BHP na budowie, a ktoś z nich nie korzysta i nie dlatego, że ma jakieś sensowne argumenty, tylko mówi o wygodzie - to dla mnie jest to lenistwo i brak zakładania kasku, bo on przeszkadza w pracy.

elastyczność jego użycia (podmiana typów danych)

I jak już parę razy napisałem - rozumiem Twój przypadek/Twój scenariusz, ale nadal uważam, że jest on niszowy. Jest jedna czy kilka gałęzi, w których masz do wykonania jakieś analizy albo do przemielenia dużą ilość danych i chcesz wiedzieć, że jak dostaniesz "12" oraz 12 to będzie to ta sama liczba. I tutaj się to broni. Ale gdy piszesz aplikację, w której masz w zmiennej height trzymać wysokość czegoś, to całkowicie logiczne i słuszne jest zastosowanie środka bezpieczeństwa w postaci określenia, że ma to być wartość liczbowa. W ten sposób nie ma opcji podstawienia tam tekstu. I tak, jak pisaliście wiele razy w tym wątku - można stosować testy lub inne mechanizmy pilnujące tego, żeby w tej zmiennej zawsze były numerki. Tylko to jest wynajdywanie koła na nowo - skoro mamy języki typowane, a potem na siłę chcecie z nietypowanych zrobić typowane przez jakieś protezy. To po prostu nie ma sensu ;)

prostota bierze się z jego mechanizmów wewnętrznych, jak i prostej składni, często jakiś problem rozwiązuje się one-linerem

To wszystko rozumiem, ale nadal - nie wyciągałbym z tego wniosku, że jakby Python był typowany to by nie osiągnął takiego sukcesu. Być może w oczach wielu osób to jest duży plus tego języka, ale nie tylko to zaważyło na popularności, raczej wypadkowa tego plus wielu innych cech.

Jak mam napisać coś wydajnego, to wybiorę kod kompilowany. Jak chcę sobie napisać aplikację, która coś tam przekonwertuje, to wezmę Pythona, bo napiszę to szybko

Pełna zgoda, że należy dobierać narzędzia do zadania. Tylko znowu - czy jakby Python miał typy to dużo by u Ciebie zmieniło? Dodanie int przy deklarowaniu zmiennej nie jest (moim zdaniem) dużym problemem. A jeśli chcesz przetwarzać dane niewiadomego typu to można skorzystać z typów dynamicznych.

A poza tym tak, jak napisałeś parę postów wcześniej - zaczyna się tutaj robić wojna w stylu taby/spacje. Nie chodzi mi o to, jedyne o co prosiłem to konkretny przykład, kiedy brak typów jest plusem (albo kiedy i w jaki sposób typy przeszkadzają) i jedyne co dostałem to parsowanie niewiadomego pochodzenia JSON'ów. Czy to jest jedyny realny scenariusz ?

Pyxis
  • Rejestracja: dni
  • Ostatnio: dni
1

Drugim jest szybkość pisania. Podobnie jak z użyciem awk czy grep-a zamiast klepać obsługiwanie plików, parsowanie ich itp. I ok, grep jest programem, ale awk jest językiem skryptowym, przy czym w awk nie mogę stworzyć rozbudowanej aplikacji, a w Pythonie mogę.

cerrato
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 9072
2

w awk nie mogę stworzyć rozbudowanej aplikacji, a w Pythonie mogę```

I może to jest klucz do tego tematu - czyli typowania. Odpowiedni dobór narzędzia do zadania.

Do jakiegoś prostego przetwarzania masz szybkie (pisząc "szybkie" nie mam na myśli prędkości kompilacji/wykonania tylko czas potrzebny na naklepanie czegoś na kolanie) języki skryptowe, które coś pobiorą, przemielą i wyplują i tak, jak Polański nie pyta o wiek, tak samo taka apka nie pyta o typ, tylko bierze i przetwarza. Ale w przypadku bardziej zaawansowanych systemów/aplikacji lepiej jest skorzystać z "lepszych" narzędzi?

Ty piszesz o tym, że sobie coś-tam potraktujesz GREP'em czy AWK, a ja myślę raczej o jakiejś aplikacji na komórkę albo desktop, gdzie masz użytkowników, logowanie, SQL, elementy UI na ekranie itp. Po prostu - chyba mamy w głowach całkowicie odmienne user-case'y i stąd jak napisałem wcześniej, raczej się nie dogadamy :(

Pyxis
  • Rejestracja: dni
  • Ostatnio: dni
1

nie dostałem żadnej odpowiedzi, tylko jakieś ogólniki o szybkości pisania (dodanie int przed zmienną dużo w tym zakresie nie zmienia)

To nie chodzi o sam typ konkretnej danej. Upraszcza Ci się o wiele więcej dzięki duck typingowi i polimorfizmowi funkcji wbudowanych jak wywołanie len() dla różnych typów danych. To nie jest ogólnik, to jest konkretny zysk czasowy dla osoby piszącej i analizującej kod podczas review.

a myślę raczej o jakiejś aplikacji na komórkę albo desktop, gdzie masz użytkowników, logowanie, SQL, elementy UI na ekranie itp.

Ja też o tym piszę. Kodowałem kilka aplikacji desktopowych, które złożone były z wielu modułów (oczywiście w zespołach wieloosobowych).

RU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 309
1

Pisałem kiedyś backend web aplikacji największego banku w Polsce w pythonie bez typów i jakoś dawało radę. Ale to były dawne czasy, jak jeszcze Type-driven Design Obsession nie wszedł na ostro (przed 3.5).

Ale my pisaliśmy testy i przypadki brzegowe, więc niezgodność typów wychodziła w CI/CD.

cerrato
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 9072
2

@Pyxis - Ponownie pojawił się wątek duck typing - więc tym razem się do tego odniosę.
Po pierwsze - takie coś można (z bardzo małym dodatkiem boilerplate) osiągnąć chociażby przez dziedziczenie. Ale nawet to nie jest konieczne.

Poniżej przykładowy kod w Pajtonie, który pokazuje "kaczkowatość" (nie pisałem sam, tylko na szybko znaleziony w necie):

Kopiuj
class Duck:
    def quack(self):
        print("Quack!")

class Person:
    def quack(self):
        print("I'm imitating a duck!")

def make_it_quack(obj):
    obj.quack()  

duck = Duck()
person = Person()
make_it_quack(duck)   # Output: Quack!
make_it_quack(person) # Output: I'm imitating a duck!

A niżej mamy to samo w Dart - czyli języku domyślnie bardzo pilnującym typów oraz nulli:

Kopiuj
class Duck {
  void quack() => print("Quack!");
}

class Person {
  void quack() => print("I'm imitating a duck!");
}

void makeItQuack(dynamic obj) {
  obj.quack(); 
}

void main() {
  var duck = Duck();
  var person = Person();
  
  makeItQuack(duck);   // Output: Quack!
  makeItQuack(person); // Output: I'm imitating a duck!
}

Jakby dać nawiasy klamrowe na koniec linii z treścią funkcji/deklaracji klasy to liczba linii jest taka sama. Także wytłumacz mi proszę (pytam serio, nie trolluję, tylko nie rozumiem) na czym polega zysk w przypadku korzystania z Pythona? Jest to prawie ten sam kod, bardziej kwestia trochę innego zapisu, ale robi dokładnie to samo i w baaaaardzo podobny sposób, co jego odpowiednik z nietypowanego Pythona.

Pomijam też fakt, że w/w kod może się wywalić jak przekażesz int do kwaczącej funkcji, ale można to zrobić bezpieczniej - z wykorzystaniem interfejsów/klas abstrakcyjnych i wtedy takie coś zostanie wyłapane na etapie kompilacji.

@ruskaonuca - wiesz.. argument że się dało jest słaby, bo tak samo 30 lat temu dało się w 5 osób jechać maluchem do Chorwacji na wakacje. Ludzie też mieszkali w wiejskich chatach, bez bieżacej wodu i z kiblem w postaci sławojki. I jakoś żyli. Co nie znaczy, że obiektywnie to było dobre i teraz ktoś by chciał do tego wracać. Poza tym Ale my pisaliśmy testy i przypadki brzegowe, więc niezgodność typów wychodziła w CI/CD - to jest to, o czym cały czas piszę: są języki typowane, ludzie wybierają nietypowane, a potem muszą robić protezy, żeby język nietypowany miał to, co typowany daje w standardzie. Totalnie nie rozumiem takiej logiki :(

RU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 309
1

Porównanie do malucha jest efektowne, ale chybione. Python bez typów to nie maluch, tylko lekki samochód sportowy bez elektronicznych asystentów. Tak, wymaga od kierowcy więcej umiejętności i uwagi, ale w zamian daje szybkość manewrowania i brak zbędnej masy. Języki statycznie typowane to w tej metaforze wielki SUV z kompletem czujników, bezpieczniejszy dla początkującego, ale ociężały i parkujesz go 15 minut.

Typy sprawdzają tylko strukturę danych, a testy sprawdzają ich poprawność. Tylko test powie Ci, czy ten Decimal nie jest ujemny po naliczeniu prowizji. Nawet w najbardziej typowanych językach świata (Haskell, Rust) i tak musisz pisać te same testy logiczne, które pisaliśmy w banku. Typy nie zwalniają z myślenia, one tylko dają złudne poczucie bezpieczeństwa.

Nadmierne typowanie w Pythonie drastycznie zwiększa Cognitive Load. Zamiast skupiać się na logice przelewu, programista spędza 30% czasu na walce z typami. Problem polega na tym, że próbujesz zmienić Pythona w gorszą wersję Javy :(

Pyxis
  • Rejestracja: dni
  • Ostatnio: dni
1

Także wytłumacz mi proszę (pytam serio, nie trolluję, tylko nie rozumiem) na czym polega zysk w przypadku korzystania z Pythona?

W takim przypadku musisz to definiować lub dociągać, a w Pythonie masz to wbudowane i po zainstalowaniu interpretera masz te mechanizmy od razu. Znikają więc zbędne zależności. Porównałbym to do nauki latania samolotem RC. Możesz kupić gotowca z pianki i uczyć się latać, a możesz też kupić półprodukt i go najpierw złożyć. Owszem, w drugim przypadku poznajesz konstrukcję samolotu, musisz go wyważyć i podłączyć wszystkie serwa. To jest wartość dodana dla Ciebie, poznajesz te wszystkie niuanse kosztem dłuższej drogi do nauki latania.

I celowo nie wspominam o bezpieczeństwie. Z mojego i tylko mojego punktu widzenia + doświadczenia, takie sytuacje, że podstawiasz str pod zmienną, która operuje na int i masz rzucany wyjątek są bardzo rzadkie.

Pomijam też fakt, że w/w kod może się wywalić jak przekażesz int do kwaczącej funkcji, ale można to zrobić bezpieczniej - z wykorzystaniem interfejsów/klas abstrakcyjnych i wtedy takie coś zostanie wyłapane na etapie kompilacji.

Pamiętam, że na etapie nauki C udawało mi się napisać takie programy, które się kompilowały, a wywalały na etapie wykonywania.

Nadmierne typowanie w Pythonie drastycznie zwiększa Cognitive Load. Zamiast skupiać się na logice przelewu, programista spędza 30% czasu na walce z typami.

@ruskaonuca : dzięki, to jest bardzo dobre podsumowanie. Być może trzeba właśnie dłużej popisać w Pythonie, by to dostrzec. Przy czym większość osób z którymi rozmawiałem/czytałem ich wpisy traktuje Pythona jako klej łączący inne programy/coś tam konwertujący.

AQ
  • Rejestracja: dni
  • Ostatnio: dni
0

image

lion137
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5056
1
cerrato napisał(a):

Ja pytałem o coś innego - gdzie jest taka sytuacja, że niemożliwość podstawienia liczby 8 to zmiennej, która obecnie ma wartość ala ma kota jest blokadą. W mojej ocenie - pilnowanie typów jest jak pasy bezpieczeństwa w samochodzie - pilnuje żebyś nie zrobił czegoś głupiego a jak popełnisz błąd to Cię ratuje. Nie widzę żadnego sensownego scenariusza w którym brak typów jest plusem. Chyba, że masz jedną zmienną globalną $moja_zmienna i do niej wrzucasz wszystko, co się da. Ale w takim razie kwestia typów jest najmniejszym problemem, z jakim mamy do czynienia.

Nie pisałem, że czegoś sie nie da napisać w języku typowanym, (co się da w dynamic) tylko, że jest łatwiej, podalem przykłady, jak i całą prezentację. Na upartego wszystko napiszesz w dowolnym sensownym języku.

@cerrato:

cerrato
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 9072
1

W takim przypadku musisz to definiować lub dociągać, a w Pythonie masz to wbudowane i po zainstalowaniu interpretera masz te mechanizmy od razu

Ale co... bo wydaje mi się, że pokazałem iż "kaczkotypy" masz praktycznie identycznie wyglądające w Darcie.
Typ variant działa tak samo w Dart i Python, praktycznie jedyna różnica jest że w Dart trzeba jawnie napisać przy deklaracji zmiennej dynamic. Poza tym - nie widzę różnic. Więc co takiego masz OOTB w Pajtonie/jakie mechanizmy trzeba dodawać? O czym piszesz? Bo naprawdę - nie rozumiem. Chyba, że chodzi o jakieś biblioteki standardowe - ale to nie ma nic wspólnego z typami/brakiem typów i uciekamy w rozważania czy Pyton jest spoko czy bleeeee.

Z mojego i tylko mojego punktu widzenia + doświadczenia, takie sytuacje, że podstawiasz str pod zmienną, która operuje na int i masz rzucany wyjątek są bardzo rzadkie.

OK, zdarza się rzadko, zwłaszcza jak jesteś ogarnięty i wiesz, co robisz, masz porządek w kodzie, przemyślane struktury danych itp. Ale potem do projektu przyjdzie jakiś głupi świeżak, który nie ma pojęcia co i jak się robi i namiesza. Wiem, wiem - są testy, podpowiedzi IDE itp, - ale można takie ryzyko wyeliminować poprzez stosowanie typów. Poza tym nie przemawia do mnie argument na ogól to działa. Jakbym powiedział że regularnie w klubie wyrywam laski, biorę do hotelu i się bawimy bez zabezpieczeń, ale póki co nie złapałem żadnego grzyba ani AIDS'a to byś raczej uznał, że jestem nieodpowiedzialny. Albo od 20 lat jeżdze po paru piwkach, nigdy mnie nie złapali, więc nie wiem o co jest całe zamieszanie - czy takie zachowanie pochwalasz? A tutaj wydaje mi się, że zastosowałeś taką samą logikę - rzadko wywala błąd, więc nie widzę sensu korzystania z zabezpieczeń, które mi oferuje język typowany.

Pamiętam, że na etapie nauki C udawało mi się napisać takie programy, które się kompilowały, a wywalały na etapie wykonywania.

Oczywiście, zawsze jest ryzyko. Wracając do analogii z poprzedniego akapitu - stosowanie prezerwatywy nie daje 100% pewności, tak samo jak pasy bezpieczeńśtwa i poduszki nie gwarantują, że z każdej kolizji wyjdziesz bez szwanku. ALE znacząco zwiększają one szanse, że będzie OK. Tak samo z typami - wiadomo, że da się napisać coś, co się kompiluje, ale potem rzuci wyjątkiem czy jakimś segfault'em, ale dzięki stosowaniu typów takie ryzyko jest znacznie mniejsze.

Porównanie do malucha jest efektowne, ale chybione. Python bez typów to nie maluch, tylko lekki samochód sportowy bez elektronicznych asystentów.

Chyba się nie zrozumieliśmy. Nie porównywałem Pajtona do malucha, ale odniosłem się do Twojego argumentu że Pisałem kiedyś backend web aplikacji największego banku w Polsce w pythonie bez typów i jakoś dawało radę. i chodziło mi o pokazanie błędu w takim założeniu. Oczywiście, że tak, jak napisał @lion137 Na upartego wszystko napiszesz w dowolnym sensownym języku i tak samo możesz wkrętarką wbijać gwoździe. Ale lepiej wziąć do tego młotek. To, że kiedyś coś się dało zrobić nie oznacza, że to jest najlepsza opcja. I o to mi chodziło o jechanie po pythonie, tylko o pokazanie błedu w takiej logice. Bo dało się mieszkać w lepiance na wsi, ale mile się mieszka w apartamencie.

Nadmierne typowanie w Pythonie drastycznie zwiększa Cognitive Load. Zamiast skupiać się na logice przelewu, programista spędza 30% czasu na walce z typami. Problem polega na tym, że próbujesz zmienić Pythona w gorszą wersję Javy

Nie chce zmieniać pythona, całe zamieszanie zaczęło się od tego, że ktoś (chyba @lion137 ) napisał,że typy mu przeszkadzają. I z tym się nie zgodziłem. Chyba żyjemy w innych światach, bo nie wyobrażam sobie jak można 30% czasu poświęcić na zastanawianie się, czy coś będzie int czy double. Nie mówię, że kłamiesz albo piszesz głupoty, skoro tyle czasu Ci to zajmuję - przyjmuję to do wiadomości i szanuję (serio - nie odbierz tego że Cie wyśmiewam albo po Tobie jadę). Dla mnie po prostu ustalenie tego, jakie dane będę przetwarzać jest częścią wymyślania logiki aplikacji. To trochę jak z TDD - osoby z tego korzystające mówią, że to odwraca sposób tworzenia. Najpierw myślisz o testach, zastanawiasz się jak to ma działać, ustalasz warunki brzegowe i tworzysz testy, a potem dopiero bierzesz się za implementację. I tutaj jest podobnie. OK, jeśli dostajesz jakieś losowe dane z tyłka i potem musisz na bieżąco kombinować jak do nich dobrać typy to rzeczywiście może być problem, ale jeśli wyjdziesz z innego założenia - najpierw zastanowisz się CO chcesz przetwarzać i do tego dopasujesz struktury danych, to potem nie powinno być niespodzianek. Zresztą nawet przykład podany przez @Pyxis czyli przetwarzanie liczb w różnych formatach - tak naprawdę to i tak możesz mieć 2-3 (a moze 3-4) sposoby ich zapisu. Jeśli pobierasz dane w jakimś JSON to możęsz mieć 13, "13" albo 13.0. I te wartości można przetworzyć na liczbę w formacie, który Ci pasuje. Można to ogarnąć dosłownie 2-3 linijkową lambdą albo jakąś funkcją pomocniczą. Jeśli masz wykonać obliczenia na takich danycn, ale zamiast (w jakikolwiek sposób zapisanego) numerka dostaniesz "Litfo ojczyzno moya" to i tak się apka wychrzani/wywali jakiś wyjątek, albo przekonwertuje (pozdrawiam serdecznie JS :D ) na jakąś wartość z czapy. Także nie widzę tutaj za bardzo zysku, raczej możliwość błedów i losowych wartości.

Typy sprawdzają tylko strukturę danych, a testy sprawdzają ich poprawność. Tylko test powie Ci, czy ten Decimal nie jest ujemny po naliczeniu prowizji. Nawet w najbardziej typowanych językach świata (Haskell, Rust) i tak musisz pisać te same testy logiczne, które pisaliśmy w banku. Typy nie zwalniają z myślenia, one tylko dają złudne poczucie bezpieczeństwa.

OK, ale nie mieszajmy dwóch rzeczy. To, że w zmiennej która ma być int masz liczbę całkowitą to jest kwestia... nazwijmy to "merytoryczna". A to, czy rabat albo saldo może być ujemne to już logika biznesowa. To tak samo jak z obsługą narzędzia - jak masz np. szlifierkę kątową to podczas jej używania powinno się przestrzegać pewnych zasad: odpowiednio trzymać, mieć okulary ochronne, nie dotykać tarczy jak jest wpięta do zasilania itp. I to jest odpowiednik pilnowania typów. Ale możesz poprawnie trzymając piłę rzucić się na kolegę i mu obciąć rękę. To są dwie osobne rzeczy. Tak samo tutaj - pilnowanie typów oznacza jedynie, że masz pewność, że w miejscu przeznaczonym na liczbę masz liczbę a nie tekst. Ale co z tą liczbą zrobisz to już osobna kwestia, której (tutaj pełna zgoda) kompilator za Ciebie nie ogarnie i zgadzam się - nadal musisz myślec nad tym co i jak aplikacja robi.

Miang
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1824
1
Pyxis napisał(a):

nie dostałem żadnej odpowiedzi, tylko jakieś ogólniki o szybkości pisania (dodanie int przed zmienną dużo w tym zakresie nie zmienia)

To nie chodzi o sam typ konkretnej danej. Upraszcza Ci się o wiele więcej dzięki duck typingowi i polimorfizmowi funkcji wbudowanych jak wywołanie len() dla różnych typów danych. To nie jest ogólnik, to jest konkretny zysk czasowy dla osoby piszącej i analizującej kod podczas review.

zaraz, chyba właśnie opisałeś C++ ? 😉

co do łatwości pisania i czytania - mi się łatwiej i szybciej pisze i czyta teksty nietechniczne po polsku niż po angielsku. Czy to oznacza że angielski jest trudniejszy od polskiego? Czy może jednak nie jest dla mnie językiem ojczystym po prostu?

a co do braku typowania - ten typ zmiennej chyba w dalszym ciągu jest wewnętrznie zapisany, po prostu go nie widzisz?

SB
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
0

Lepszy Python w garści niż (*) na dachu 😀
*wstaw inny język, nie wiem który wybrać
W Pythonie łatwiej zacząć się uczyć, najłatwiej wgrać bibliotekę przez pip (ale czasem też nie wszystko działa)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.