Czy jest hejt na Pythona?

Czy jest hejt na Pythona?
cyber_sheikh
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
0

Znalazłem wczoraj znalezisko na pewnym portalu ze śmiesznymi obrazkami, o 70 urodzinach twórcy Pythona, Guido van Rossuma. Zaskoczyła mnie liczba negatywnych komentarzy w kierunku samego języka programowania. Zastanawiam się skąd ten hejt i czy jest uzasadniony. Jak myślicie?

Ja zawsze miałem pragmatyczne podejście. Używałem odpowiednich narzędzi do rozwiązania danego problemu. Przez wiele lat programowałem w Objective-C, potem w Swifcie, bo te języki służą do tworzenia natywnych aplikacji na iOS i macOS. Natomiast od pewnego czasu zajmuję się rozwijaniem projektu dotyczącego sztucznej inteligencji i stąd moje zainteresowanie Pythonem. Do tej pory używałem raczej Ruby i to w zasadzie tylko do automatyzacji i CI/CD.

Projekt nad którym pracuje wygląda w porządku, tematyka bardzo ciekawa, kod wygląda na przemyślany i nowoczesny, mamy sensowne testy. Na początku trochę mi brakowało kompilatora, który by mi sprawdził czy nie mam błędy w kodzie, ale przyzwyczaiłem się do nowego flow i mam pre-commit sprawdzający kod.

cerrato
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 9072
2
  1. dasz link do tego portalu o którym wspomniałeś?
  2. co do hejtu - zawsze ktoś się dowali. Pytanie - czy były jakieś sensowne argumenty, czy teksty w stylu w pajtonie piszą dzieciaki i idioci? Bo nie wiem, czy w ogóle jest sens się odnosić do sprawy
  3. Zauważ, że na większość technologii z niskim progiem wejścia (JS, PHP, pajton, Delphi) jest hejt. I to głównie frustraci narzekają, którzy mają kompleksy i braki w poczuciu własnej wartości. Skoro ja X lat się uczyłem Javy albo szlifowałęm SQL, a teraz jakiś taki pół-amator sobie pisze w "prostej" technologii to dla mnie jest to policzek. Także jak wyśmieję taki język, to poczuję się lepiej i nadal mogę starać się pozować na lepszego i więcej wartego. To jest podobny mechanizm jak z markowymi ciuchami albo kupowaniem ajfona - w ten sposób się zaspokaja własne deficyty i leczy rany na psychice.
Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7000
7

Ja bym nie chciał pracować w Pythonie, bo skoro w języku dynamicznie typowanym i tak miałbym używać type hints, to już wolę użyć języka statycznie typowanego, który od początku tak był projektowany i tego pilnuje.

Nie obrażam się na Pythona.
Jakieś skrypty w nim napisałem i używam.
Np. pluginy do Blendera, albo helpery do przetwarzania plików.
Tylko nie chciałbym w nim pracować nad poważnymi, większymi projektami ;)

lion137
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5056
1

Wykop, popaczałem na to, głównie tam pisze trole albo lamerzy, nie umieją venva ustawić, itp. A jak jest na temato głównie aj aj dynamicznie typowany, czyli błędy, łatwo pisać g*wnokod, ciężko się debuguje, itp. Odpowiadam im zbiorczo, jak śpię programując to idę się zdrzemnąć lub po herbatę:) bo jako programiście typy do niczego nie są mi potrzebne

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

bo jako programiście typy do niczego nie są mi potrzebne

Oj bluźnisz Panie, bluźnisz 😛

To, że dasz radę bez tego to spoko, tylko pogratulować. Ale jednak dobrze jest, jak kompilator, IDE czy jakiś inny magik patrzy nam na ręce i poprawia ewentualne pomyłki. To, co napisałeś jest tak samo sensowne jak jestem kierowcą od 20 lat, żadne ABS czy ESP nie są mi potrzebne. To, że pewnie bym sobie poradził bez tego nie znaczy, że nie zdarzy się sytuacja, w której uratują mi one tyłek. Tak samo jak różne inne systemy zwiększające bezpieczeństwo. Mam w samochodzie system ostrzegania przed kolizją. Kiedy przewiduje, że jadąc w tym kierunki i z taką prędkością za chwilę walnę - mruga na czerwono oraz zaczyna piszczeć. Póki co nie przydał się ani razu, na ogół się odpala jak chcę np. wyminąć prawą stroną samochód czekający na skręt w lewo, albo mam w planach zmienić pas bo na moim ktoś się wlecze i dość szybko się do tego kogoś zbliżam. Ale nie wyłączam tego systemu, bo kiedyś może będę zmęczony albo rozkojarzony i takie ostrzeżenie się przyda. Dla tego jednego razu warto kilka razy w tygodniu słyszeć niepotrzebne ostrzeżenia. I tak samo jest z typowaniem zmiennych - dasz radę sobie bez tego, ale kiedyś może coś się pochrzani i będzie problem. A jak masz typ jawnie wskazany to nie ma opcji.

SL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1062
3

Python jest popularny, bo jest popularny. Łatwo wytknąć mu wiele problemów (dynamiczne typowanie, słabe zarządzanie zależnościami, wydajność), więc i wiele ludzi się niego czepia

Używałem odpowiednich narzędzi do rozwiązania danego problemu.

To jest cope. O każdej technologii można tak powiedzieć:

  • Java powstała do rozwiązań enterprise, więc korpo powinny pisać w Javie
  • Ada powstała to apliacji krytycznych i rządowych, więc takie apki powinny być pisane w Adzie
  • Python jest wolny co oznacza, że pisanie w nim musi być dużo lepsze niż w innych językach, bo po coś ludzie wybierają tego Pythona.

Oczywiście w wielu przypadkach wybory są oczywiste np. C nie będzie dobry do napisania CRUDa a Python do napisania wydajnej bazy danych. Cała reszta to rozmyte terytorium, gdzie w zasadzie wszystko pasuje i czego byś nie użył to będzie to jakoś działało a i argumentację będzie się dało wymyślić. Prawdą jest, że ludzie wybierają technologie głównie z przyzwyczajenia albo dlatego, że inni tak robią co napędza spiralę sukcesu, bo popularna technologia ma dużo toolingu, bibliotek i wsparcia.

KamilAdam
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Silesia/Marki
  • Postów: 5595
6

Pythong wygrał bo był pierwszym językiem skryptowym który:

  • nie był Lispem
  • nie był tylko do zapisu : bash
  • nie wyglądał jak potwór Frankensteina : Perl
  • nie był zrobiony na odpi'rdol : TCL

i na tym w zasadzie liczba jego zalet się kończy. Ludzie w 1991 potrzebowali języka skryptowego. I tak samo dziś potrzebują

CZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2615
1

Z AI możesz wszystko w C pisać, więc w zasadzie te języki wysokiego poziomu są już bezużyteczne.

lion137
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5056
0

@cerrato: ciekawa próba, ale kompletnie nie trafiona; otóż, rzeczywiście, ABS itp. Pomagają kierowcy, ale statyczne typy w programowaniu wręcz na odwrót utrudniają! Peter Norvig:
https://norvig.com/design-patterns/
Również Gary Bernhardt umieszcza Ruby i Python najwyżej w ekspresywnosci, co mogę potwierdzić.

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

Ale co utrudniają?

Gdy masz potrzebę zamienić to masz wbudowane różne konwersje/rzutowania albo funkcje typu .toString itp. Masz typy wariantowe/dynamic (w różnych językach to się różnie nazywa), masz generyki i wiele innych mechanizmów. Także wydaje mi się, że cokolwiek będziesz potrzebował osiągnąć - osiągniesz w sposób JAWNY a nie podstawiając 25 do zmiennej, która aktualnie posiada wartość "bleblelblebleeee". Jeśli dla kogoś jest problemem to, że nie może nadpisać stringa wartością liczbową to wydaje mi się, że problem leży gdzieś indziej, ma coś źle przemyślane - że w ogóle do takiej sytuacji doszło.

Albo inaczej - możesz podać jakiś realny scenariusz, w którym:

  1. potrzebny jest taki brak typowania
  2. nie da się tego zrobić jawnie - poprzez jakaś funkcję konwertującą (czy to wbudowaną, czy własną) ani rzutowanie?
jarekr000000
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: U krasnoludów - pod górą
  • Postów: 4718
2

Czy jest hejt na pythons?

Teraz już jest.

lion137
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5056
0

@cerrato: programowanie utrudniają, przejrzyj dokladnie prezentację Norviga. Nie w tym rzecz, zd czegoś się nie da napisać, ale jest trudniej i język jest mniej ekspresywny.

KamilAdam
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Silesia/Marki
  • Postów: 5595
3
lion137 napisał(a):

@cerrato: programowanie utrudniają, przejrzyj dokladnie prezentację Norviga. Nie w tym rzecz, zd czegoś się nie da napisać, ale jest trudniej i język jest mniej ekspresywny.

kiedyś na X, może jeszcze na twiterze była rozmowa po angielsku

  • programista pythong - większośc moich testów to proste testy, czy wartość jest dodatnia, czy wartość jest stringiem, czy wartość jest mapą. Czy jest na to jakiś framework żeby wygenerować te testy?
  • programista java - tak, nazywa się system typów

ten twój guru/lama/sensei/rabi od prezentacji pisze też testy czy tylko kod produkcyjny którego potem nie musi utrzymywać? bo jak piszesz kod bez testów którego nie musisz utrzymywać to pythong, lub dowolny inny w miarę popularny jezyk skryptowy, jest świetnym rozwiazaniem. No może za wyjątkiem JavaZKrypty

Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7000
0
KamilAdam napisał(a):
  • programista pythong - większośc moich testów to proste testy, czy wartość jest dodatnia, czy wartość jest stringiem, czy wartość jest mapą. Czy jest na to jakiś framework żeby wygenerować te testy?

Teraz to pewnie AI by ogarnęło sprawę ;)

lion137
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5056
1

@KamilAdam: ? Chodzi o ilość testów, ze więcej jest w dynamicznym języku? Szczerze, nie pamiętam w Javie c++ pracowałem ponad 5 lat temu; chociaż pewnie tak jest, tylko co z tego?
@Spine nawet "stare" tabnine sprzed llm ów dużo pomagało:)

KamilAdam
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Silesia/Marki
  • Postów: 5595
3
lion137 napisał(a):

@KamilAdam: ? Chodzi o ilość testów, ze więcej jest w dynamicznym języku? Szczerze, nie pamiętam w Javie c++ pracowałem ponad 5 lat temu; chociaż pewnie tak jest, tylko co z tego?

O co chodzi? wy tak na poważnie? Nawet jeśli statyczny system typów spowalnia development to ułatwia utrzymanie. A większość systemów, jeśli odniesie sukces, będzie utrzymywana. Więc jeśli nie piszemy demo do wyrzucenia to wybór pythonga czy innego języka dynamicznego jest błędem

SL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1062
1
lion137 napisał(a):

@KamilAdam: ? Chodzi o ilość testów, ze więcej jest w dynamicznym języku? Szczerze, nie pamiętam w Javie c++ pracowałem ponad 5 lat temu; chociaż pewnie tak jest, tylko co z tego?

@lion137 tutaj chodzi o czasy przed type hintami, gdzie dobry zwyczajem jest pisaniem kodu jak i testu, który sprawdza jak dany kawałek kodu ogarnia różne typy tj. rzuca jakieś czytelne błędy a nie losowe błędy tam gdzie duck typing się wywali

Statyczne typowanie ze sprawdzaniem typów to właśnie takie "testy"

veneficus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 403
0

Jak zaczynałem programować też się śmiali z tego ważne, że $$ się zgadza.

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

Python to bardzo przyjemny język, cenię go np. za duck typing czy brak silnego typowania.

Podejrzewam, że hejterzy chcieliby nowego języka o nazwie Typeon zamiast Python.

Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7000
2

Mi Python bardzo pomógł nauczyć się programowania na wyższym poziomie..
Mimo lat klepania jakiegoś tam kodu w C++, nie ogarnąłem go do tego stopnia, żeby w nim wygodnie mi się pisało.
W Pythonie techniki programowania są znacznie przystępniejsze do zrozumienia.
Więc doceniam ten język ze względu na jego zastosowania dydaktyczne.

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

Ale co utrudniają?

Gdy masz potrzebę zamienić to masz wbudowane różne konwersje/rzutowania albo funkcje typu .toString itp. Masz typy wariantowe/dynamic (w różnych językach to się różnie nazywa), masz generyki i wiele innych mechanizmów. Także wydaje mi się, że cokolwiek będziesz potrzebował osiągnąć - osiągniesz w sposób JAWNY a nie podstawiając 25 do zmiennej, która aktualnie posiada wartość "bleblelblebleeee". Jeśli dla kogoś jest problemem to, że nie może nadpisać stringa wartością liczbową to wydaje mi się, że problem leży gdzieś indziej, ma coś źle przemyślane - że w ogóle do takiej sytuacji doszło.

Albo inaczej - możesz podać jakiś realny scenariusz, w którym:

  1. potrzebny jest taki brak typowania
  2. nie da się tego zrobić jawnie - poprzez jakaś funkcję konwertującą (czy to wbudowaną, czy własną) ani rzutowanie?

@cerrato: Co znaczy, że się nie da, pewnie większość rzeczy da się napisać we wszystkich sensownych językach, dynamic typing i first class functions (citizens) dają to, że pisze się łatwiej, kod jest bardziej oszczędny, a przez tołatwiejszy do czytania, rozumowania o nim. A przykład, jeśli masz doświadczenie w obu typach języków, to sobie sam znajdziesz, ale dam, napisanie jakiejś nowej abstrakcji, np. szukanie najlepszego wyniku, Java:

Kopiuj
interface Score<T> {
    int score(T it);
}

public static <T> T find_the-best(List<T> items, Score<T> scorer) {
    T best = null;
    int best_score = Integer.MIN_VALUE;

    for (T item : items) {
        int score = scorer.score(item);
        if (score > bestScore) {
            best = item;
            best_score = score;
        }
    }
    return best;
}
//użycie:
find-the_best(players, player -> player.getPoints());

Python:

Kopiuj
best = max(players, key=lambda p: p.points)

Dzięki wbudowanej max, zachowanie przekazujesz bezpośrenio, zero generyków, interfajsów, boilerplaite.

Strategia, Python:

Kopiuj
def bubble(data):
    pass

def quick_sort(data):
    pass  # TODO

def sort(data, strategy):
    strategy(data)

sort(data, quick_sort)

First class functions - bez boilerplaite, jasno i czytelnie; a w Javie, nie chce mi się już pisać, (GPT, albo 20sek internet search da radę :) ) znowu będzie interface, klasy, hierarchia

@KamilAdam

Nawet jeśli statyczny system typów spowalnia development to ułatwia utrzymanie

A jak to system typów ułatwia utrzymanie? Bo ja nie zauważyłem, utrzymanie ułatwia czysty kod i testy, imo.

A większość systemów, jeśli odniesie sukces, będzie utrzymywana. Więc jeśli nie piszemy demo do wyrzucenia to wybór pythonga czy innego języka dynamicznego jest błędem

Czyli w Instagramie, mając praktycznie nieograniczone finansowanie wybrali najgorzy język, ej, no chyba nie.

tutaj chodzi o czasy przed type hintami, gdzie dobry zwyczajem jest pisaniem kodu jak i testu, który sprawdza jak dany kawałek kodu ogarnia różne typy tj. rzuca jakieś czytelne błędy a nie losowe błędy tam gdzie duck typing się wywali

Statyczne typowanie ze sprawdzaniem typów to właśnie takie "testy"

Tego nie rozumiem, bo static typing to nie testy, (jeśli nawet w dynamic języku testów jest więcej - choć nie jestem pewien) static typing sprawdza zgodność danych z kontraktem, sensu biznesowego. Odnośnie duck typing w Pythonie mówisz: akceptuję metodę, która ma read() , zamiast akceptuję typ Stream . Statyczne typy nie powodują, że błędy będą czytelne, tylko, że pewnie błędy nie przejdą etapu kompilacji. Zaś testy łapią cały wszechświat więcej niż typy: serializacja/deserializacja, integracje, bazy, API.

SL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1062
1
lion137 napisał(a):

Dzięki wbudowanej max, zachowanie przekazujesz bezpośrenio, zero generyków, interfajsów, boilerplaite.

@lion137 Możesz w javie stworzyć streama na kolekcji po czym zawołać .max z konkretnym komparatorem. Przypadek w pythonie jest na pewno bardziej czytelny, ale szczerze mowiąć jest to trudniejsze do opanowania jeśli twój przypadek nie jest prosty. W Javie masz konkretne interfejsy, które bronią cię przed użyciem skomplikowanych operacji na kolekcjach w sposób, który wywali się w runtimie

First class functions - bez boilerplaite, jasno i czytelnie; a w Javie, nie chce mi się już pisać

W Javie masz typ Function, który jest @FunctionalInterface, który pozwala na swobodne używanie funkcji (np. lambd) w interfejsach.

Czyli w Instagramie, mając praktycznie nieograniczone finansowanie wybrali najgorzy język, ej, no chyba nie.

Zakładam, że Intagram podobnie jak wszystkie inne startupy wybierał technologie według tego co po prostu lubili oryginalni autorzy a nie według tego co będzie miało sens. Zresztą pisanie własnego interpretera do Instagrama https://engineering.fb.com/2022/05/02/open-source/cinder-jits-instagram/ jest dosyć powszechną wiedzą i generalnie programiści aplikacji biznesowych zazwyczaj wolą wybrać szybką technologię zamiast pisać własny optymalizator do powolnego języka, który wymaga ogromnych nakładów finansowych i ludzi o drogich umiejętnościach

Tego nie rozumiem, bo static typing to nie testy, (jeśli nawet w dynamic języku testów jest więcej - choć nie jestem pewien) static typing sprawdza zgodność danych z kontraktem, sensu biznesowego.

Testy to generalnie program, który coś sprawdza. Sprawdzić można logikę programy (jednostkowe), powszechne błędy (linter) czy formatowanie (formater). W statycznych językach komplitor i type checker sprawdza czy program będzie działał.

Zaś testy łapią cały wszechświat więcej niż typy: serializacja/deserializacja, integracje, bazy, API.

Jak ze wszystkim: ważne jest to na ile dane narzędzie wyłapuje dane problemy, jak proste jest w obsłudze i jakie możliwości otwiera. W przypadku typowego statycznego typowania:

  • działa ze 100% skutecznością
  • jest wymagana do uruchomenia programu, więc nie da się go pominąć
  • pozwala na szybsze wychwytywanie błędów i integrację z innymi narzędziami jak podpowiedzi w IDE
  • pozwala na dużo prostsze generowanie szybkiego kodu
  • dobre abstrakcje są mało upierdliwe lub potrafią wręcz przyśpieszać pisanie kodu
  • wymaga dobrych abstrakcji, żeby nie być problemem w porównaniu do dynamicznego typowania

Własne testy imitujące to co robi statyczne typowanie (np. sprawdzenie jak zachowuje się funkcja wywoływana z różnymi typami) jest bardziej czasochłonne i mniej skuteczne

Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7000
2
lion137 napisał(a):

A większość systemów, jeśli odniesie sukces, będzie utrzymywana. Więc jeśli nie piszemy demo do wyrzucenia to wybór pythonga czy innego języka dynamicznego jest błędem

Czyli w Instagramie, mając praktycznie nieograniczone finansowanie wybrali najgorzy język, ej, no chyba nie.

Przypominam, że Facebooka napisano w PHP...

lion137
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5056
0

@slsy: Tak, Java radzi sobie trochę lepiej z lambdami teraz, ale i tak wersja Pythonowa jest czytelniejsza.

Przecież facebook mógł zrefaktorować instagrama, zresztą instagram to nie jedyny wielki system w dynamicznym języku, 30 sek w wyszukiwarce.

Własne testy imitujące to co robi statyczne typowanie (np. sprawdzenie jak zachowuje się funkcja wywoływana z różnymi typami) jest bardziej czasochłonne i mniej skuteczne

Ano nie, a jak pisałem, jeśli nawet w dynamic trzeba pisać więcej testów, to w dobie large lying machines to bez znaczenia.
Otóż to jest kwestia innego sposobu przetestowania. W statycznym języku sprawdzamy czy coś jest rodzaju X a w dynamicznym czy coś zachowuje się w sposób Y, ex.:

Kopiuj
def total_price(items):
    return sum(item.price for item in items)

class Example:
    def __init__(self, price):
        self.price = price

def test_total_price():
    items = [Example(1), Example(2136)]
    assert total_price(items) == 2137

Inczej, mamy kontrakt behawioralny, a nie nominalny.

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

No ale czegoś tutaj nie rozumiem i nie wiem, czy ja jestem za głupi, czy może starasz się mydlić mi oczy odpowiedzią średnio-na-temat.
Piszesz o max który wyciągnie największa wartość z danego zbioru. To jest po prostu kwestia albo języka wyższego poziomu, który ma dodatkowe biblioteki, albo np. (jak np. jest w Dart) że wszystko jest obiektem i można sobie zrobić np. var cenyBrutto = cenyNetto.map((klucz, wartosc)MapEntry(klucz.toUpperCase(), wartosc * 1.23); i masz przerobioną mapę na inną. Mimo, że Dart jest ściśle typowany. Także to o czym piszesz raczej nie ma związku z luźnym typowaniem w Pythonie.

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.

Pyxis
  • Rejestracja: dni
  • Ostatnio: dni
1

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 zasadzie nie ma takiej sytuacji. Ale:

Nie widzę żadnego sensownego scenariusza w którym brak typów jest plusem.

Jak parsujesz niehomogeniczne dane, to nie interesuje Cię, co tam wchodzi. Po prostu dokonujesz konwersji:

Kopiuj
import pandas as pd

data = pd.Series(["19.99", "25", "error", "", None, "30.5"])

def parse_price(x):
    try:
        return float(x)
    except (TypeError, ValueError):
        return None

cleaned = data.apply(parse_price)

print(cleaned)
print("Average:", cleaned.mean())

Dokładnie ta sama sytuacja jest, gdy parsujesz JSON-y czy konfiguracyjne YAML-e, gdzie możesz mieć w polu "8", jak i 8. W typowanych językach musisz to wszystko obsłużyć.

Z tym przykładem max powyżej, to chodziło o to, że nieważne co podstawisz, [5, 9, 1, -7, 4], (6, -2, -34, 93, 124, 2), "abkgds" czy {3, 9, 0, 1} masz tylko jedną funkcję. I to jest przewaga, że piszesz to raz, a koszt jest taki, że możesz do niej przekazać int i wyrzuci wyjątek.

Od dłuższego czasu piszę głównie w Pythonie, ale kodowałem kiedyś w typowanym języku. W obu przypadkach można zrobić głupotę, jak się nie myśli. Te pasy bezpieczeństwa istnieją, ale kosztem dłuższego i rozbudowanego kodu, który się trudniej utrzymuje. Ponadto tak jak nieraz dostanie się wyjątek w Pythonie, tak podczas kompilacji też występują niezgodności i trzeba debugować. Jeśli chodzi o Pythona, to największe problemy z szukaniem wyjątków miałem w kodzie współbieżnym.

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

Ok @Pyxis, tutaj masz punkt, ale dwie uwagi:

  1. Takie przetwarzanie danych jak podałeś powyżej to rzadki scenariusz, w 99% zmienne trzymają numer zamówienia, nazwisko klienta, trzymają odpowiedź z bazy na której potem obrabiasz zapytanie, trzyma kod Hex koloru tła itp. Rzadko się robi analitykę i przetwarzanie w stylu tego, co podałeś. Raczej zmienna ma trzymać wartość określonego typu i cieszę się, że nie będę mógł w polu itemHeight umieścić Ala ma kota. Ale rozumiem twój scenariusz i jest to jakaś sensowną i merytoryczną odpowiedź.
  2. Tylko tutaj wkradł się błąd w założeniu, że mamy tylko dwie opcje. Albo język bez typów i wtedy można robić jak pokazałeś, albo typowany i się nie da. A jest jeszcze trzecia opcja - język typowany, który pilnuje zmiennych podczas "normalnej" pracy, ale jak się pojawi potrzeba to można robić akcje w stylu twojego przykładu. Wcześniej się odniosłem do Dart, który jest silnie typowany, ma mechanizmy null-safety/null-aware i ogólnie pilnuje, żeby programista sobie nie strzelił przypadkiem (albo i celowo) w kolano, więc teraz pociągnę temat. Możesz stworzyć zmienną dynamic, która się będzie zachowywać jak worek na cokolwiek zmienia w JS albo Pythonie ;)

Screenshot_20260213-125114.Firefox.png

Pyxis
  • Rejestracja: dni
  • Ostatnio: dni
1

@cerrato:

  1. Nie jest rzadki, szczególnie w analizie danych. Żeby się o tym przekonać, polecam spojrzeć w pierwszego lepszego korpo Excela. Stąd zresztą powstało coś takiego jak DataFrame, ale zanim załadujesz do niego dane niehomogeniczne, to i tak możesz mieć wewnątrz tej samej kolumny miks None, int, str, hh:mm:ss.
  2. Motywacją stworzenia Pythona była szybkość kodowania, rozumienia kodu i możliwe maksymalne zbliżenie składni do języka angielskiego. Dało się to osiągnąć poprzez wprowadzenie polimorfizmu z automatu (duck typing), czy unikanie boilerplate'u. W przypadku Darta słowo wbudowane dynamic jest wewnętrzną cechą języka, która jest wystawiona na świat zewnętrzny: kod źródłowy. W Pythonie jest to ogarnięte domyślnie, tak by nie pisać tego w kodzie. Podczas analizy kodu nie musisz wracać do deklaracji dynamic 20 linijek wyżej, by się upewnić, co możesz dopisać do zmiennej.

I żeby nie było, nie bronię tego na zasadzie ideologii. To jest po prostu cecha języka, widzę po popularności Pythona, że się przyjął w środowisku. Mogę stanąć jednak w jego obronie na podstawie swojego doświadczenia. Nie przekonują mnie argumenty, że dynamiczne typowanie powoduje, że aplikacja cały czas się wysypuje w runtime i nie da się w tym języku pisać. Dla mnie to jest mit. Jeśli takie rzeczy się zdarzyły, to tak samo często jak błędy podczas kompilacji kodu.

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

Nie jest rzadki, szczególnie w analizie danych - widzę, że nie do końca się zrozumieliśmy ;)
Mi chodziło o to, że sam przypadek analizowania danych jest rzadkim scenariuszem. Podejrzewam, że wieeeelu ludzików stąd (ze mna na czele) przez naście czy dziesiąt lat nie miało takiej potrzeby. Są sytuacje w których taka analiza jest koniecznością, są miejsca gdzie głównie takie rzeczy się wykonuje, ale większość ludzi piszących apki desktopowe, strony WWW, gry czy jakieś tematy embedded nie będzie miała z tym styczności. A w grze albo w embedded ważne jest to, że jak masz zmienną do trzymania współrzędnych albo ilości żyć/HP/siły ataku postaci to masz tam mieć liczbę, a nie nie wiadomo co - np. string.

A co do tego co dałeś w pkt. 2 - rozumiem, ale co to zmienia?

W sensie - z mojego punktu widzenia, doceniam mechanizm typów i dobrze mi z tym. To jak w samochodach - mam ABS, ESP, ostrzeganie przed kolizją itp. I one są i mi pomagają. Ale jeśli chcę poszaleć na torze (w końcu - Ford S-max to przecież jest typowo auto wyczynowe ;) ) to mam przycisk do wyłączenia kontroli trakcji, mogę w ustawieniach asystentów kierowcy wyłaczyć ostrzeganie przed zjazdem z pasa czy przed kolizją.
ALE
to ma być moja świadoma decyzja. Tak samo jak jawne zadeklarowanie tego dymanic - jeśli będę tego potrzebował to mogę z tego skorzystać w sposób jawny. Kiedy wiem, co robię - bo akurat jest mi potrzebny w danym scenariuszu brak typów. Ale wiem co robię, a nie że mam $moja_zmienna która raz trzyma numer zamówienia, a po chwili nazwisko klienta.

Także - rozumiem, co piszesz, ale akurat nie trafia to do mnie. Wiem, że taki worek na wszystko jest wygodniejszy, ale ja wolę mieć typy, myśleć o tym jakie dane będę przetwarzać i dobrać do nich określony typ oraz mechanizm, a jeśli serio się nie da to albo dodaję jakieś wrappery, które przekonwertują dane do określonego typu, albo **ŚWIADOMIE I EXPLICIT``` mówię kompilatorowi, że tutaj daj mi poszaleć, nie patrz na to co będę robić, wiem (albo chociaż mi się tak wydaje) co robię i świadomie rezygnuję z ochrony, jaką mi standardowo zapewniasz.

No i jeszcze fragment widzę po popularności Pythona, że się przyjął w środowisku - akurat to jest średni argument. Bo w ten sam sposób można uznać, że discopolo to jest wartościowa muzyka (w końcu ma miliony fanów w Polsce), zdradzanie żony jest spoko (coś koło połowy facetów miewa romanse) a drobne kradzieże ze sklepu to też nie jest problem. To, że wiele osób coś robi nie oznacza automatycznie, że to jest dobre. Argumentum ad populum (łac. „argument odwołujący się do ludu”) to błąd logiczny i chwyt erystyczny, polegający na uznaniu tezy za prawdziwą tylko dlatego, że popiera ją większość ludzi, jest popularna lub modna. Opiera się na emocjach i uprzedzeniach zamiast na merytorycznych przesłankach

Nie przekonują mnie argumenty, że dynamiczne typowanie powoduje, że aplikacja cały czas się wysypuje w runtime i nie da się w tym języku pisać

No akurat ja chyba tego nigdzie nie napisałem, więc tutaj przyznam Ci rację. Aczkolwiek faktem jest, że jeśli kompilator (lub/oraz IDE) patrzy Ci na ręce to jest mniejsza szansa, że omyłkowo gdzieś pomylisz typy. Można na taką okoliczność wprowadzić testy (to już było chyba w tym wątku) - tylko mam wrażenie, że to jest jak w jednej z definicji komunizmu - dzielne zwalczanie problemów, których nie ma w innych ustrojach. W sensie - standardowo masz pilnowanie typów. Odrzucasz to, a potem wymyślasz mechanizmy, które dadzą Ci to, co chwilę wcześniej odrzuciłeś ;)

Pyxis
  • Rejestracja: dni
  • Ostatnio: dni
1

Mi chodziło o to, że sam przypadek analizowania danych jest rzadkim scenariuszem. (...) strony WWW, (...)

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. Implementacja REST API to też często pythonowe frameworki.

to ma być moja świadoma decyzja. Tak samo jak jawne zadeklarowanie tego dymanic - jeśli będę tego potrzebował to mogę z tego skorzystać w sposób jawny. (...) Także - rozumiem, co piszesz, ale akurat nie trafia to do mnie. Wiem, że taki worek na wszystko jest wygodniejszy, ale ja wolę mieć typy, myśleć o tym jakie dane będę przetwarzać i dobrać do nich określony typ (...)

Masz type hintsy i taki Pycharm wspiera ich śledzenie: Expected type 'int', got 'float' instead . Po prostu trzeba odwrócić logikę, domyślnie masz dynamiczne typowanie i możesz symulować statyczne.

No i jeszcze fragment widzę po popularności Pythona, że się przyjął w środowisku - akurat to jest średni argument. (...) To, że wiele osób coś robi nie oznacza automatycznie, że to jest dobre.

Nie chodzi o to, że ludzie z łapanki piszą w tym języku. Chodzi o cały ekosystem, który wyrósł wokół Pythona, ilość frameworków (tych popularnych) oraz bibliotek jest bardzo duża.

Mam nadzieję, że Cię nie urażę, ale jak na spokojnie analizuję Twoją wypowiedź, to mam wrażenie, że dyskusja schodzi na tory Linux vs Windows, Taby vs Spacje.

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.