Najlepsza odpowiedź
Zobacz meme Pythona
Odpowiedź
Kilka powodów:
- W pewnym momencie ludzki mózg nie może dostrzec żadnej poprawy szybkości. Jeśli ponownie zaimplementuję mój kod Pythona w C i działa on 200 razy szybciej, użytkownik nawet nie zauważy, czy oryginalny kod został już uruchomiony w 0,01 sekundy. Do licha, prawdopodobnie nie zauważą nawet, jeśli oryginalny kod działał tylko w 0.1 sekundy. Różnica między 0,1 a 0,0005 sekundy jest praktycznie niezauważalna dla większości ludzi. Nawet dla ludzi, którzy potrafią to dostrzec, nadal wydaje się zupełnie nic niezwykłego.
- Jego powolność zależy w dużej mierze od tego, jak go używasz. Prawdziwym problemem jest to, że wiele osób boryka się z problemem przedwczesnej optymalizacji. Tak, Python jest powolny, ale istnieje prawdopodobieństwo, że Twój kod nie jest w rzeczywistości wolny z powodu Pythona; jest powolny, ponieważ Twój kod używa niewłaściwych struktur danych i algorytmów do rozwiązania danego problemu. Użycie skompilowanego języka, takiego jak C, tylko ukrywa problem. Tak, jest szybszy, ale jest szybszy tylko przy nieefektywnym algorytmie. Korzystanie z prawidłowych struktur danych i algorytmów będzie skalowane, prawie niezależnie od języka, w którym je zaimplementujesz i niezależnie od tego, z jaką ilością danych będziesz mieć do czynienia. szybszy język przyniesie tylko krótkoterminowe korzyści. Algorytm O (n!) jest nadal algorytmem O (n!), nawet jeśli zaimplementujesz go w C! Inżynierowie z prawdziwą wiedzą o tym wiedzą i mogą tworzyć aplikacje, które są wystarczająco szybkie i które dobrze się skalują, niezależnie od języka implementacji, ponieważ używają odpowiednich struktur i algorytmów.
- Python był (i prawdopodobnie pozostanie) przede wszystkim językiem „klejowym”; jest bardzo dobry w łączeniu oprogramowanie, które nie było pochodzenia lly przeznaczone do bezpośredniej współpracy. Jest również dobry w automatyzacji zadań, które normalnie byłyby wykonywane ręcznie. W tym celu jest to więcej niż wystarczająco szybkie, ponieważ główna praca i tak odbywa się gdzie indziej. W przypadku „szybszych” języków, takich jak C, ten rodzaj klejenia jest tak boleśnie powolny i podatny na błędy w kodowaniu, że nie jest nawet wart wysiłku. Wszelkie przyrosty szybkości wykonywania są z nadwyżką rekompensowane przez ilość straconego czasu programisty poświęconego na uruchomienie. To jeden z głównych powodów, dla których nadal jest tak popularny.
- Niektóre wąskie gardła są po prostu poza bezpośrednią kontrolą języka implementacji. IO jest powszechne. Mam teraz do czynienia z aplikacją, w której wszystko w Pythonie jest więcej niż wystarczająco szybkie. Dopiero gdy trafimy do sieci, aby wysłać zapytanie do bazy danych, wszystko staje się wolne. Moje profilowanie pokazuje, że nawet najwolniejsze fragmenty kodu Pythona są zupełnie nieistotne w porównaniu z czasem spędzonym na czekaniu w sieci IO. Teraz próbuję znaleźć sposoby, aby mniej trafić do bazy danych (buforowanie po stronie klienta, unikanie zbędnych sprawdzeń poprawności danych itp.). Nawet gdybym napisał aplikację w asemblerze, nadal byłby to problem. Naprawienie tego problemu w Pythonie jest w rzeczywistości szybsze i łatwiejsze, ponieważ zawiera (bardzo solidne) biblioteki profilowania w bibliotece standardowej. Wiele „szybko” kompilowanych języków tradycyjnie nie wychodzi z tego po wyjęciu z pudełka.
Morał z tej historii jest taki: czas programisty przeważa nad czasem maszynowym, prawie zawsze. Kiedy tak się nie dzieje wstrzymaj, powolność jest zwykle widoczna w niektórych wąskich gardłach, które można łatwo zoptymalizować w zewnętrznej bibliotece lub usłudze. Czasy, kiedy czegoś naprawdę nie można zoptymalizować w zewnętrznej bibliotece lub usłudze, są niezwykle rzadkie. Prawie nie istnieje.
Jedynym wyjątkiem jest sytuacja, gdy od początku wiesz, że Twoja aplikacja jak najbardziej zbliżona do wydajności w czasie rzeczywistym, a większość kodu będzie koncentrować się na obliczeniach. Dobrym przykładem są gry wideo lub aplikacje DCC. Lepiej, aby były jak najbliżej czasu rzeczywistego, inaczej nie będziesz mieć użytkownika podstawa, o której warto mówić.
Jednak wielu programistów woli zwiększyć produktywność dzięki Pythonowi, nawet jeśli tylko do prototypowania.