Istnieje powszechne przekonanie wśród programistów , że bardziej dynamiczne i luźno wpisywanych języka, tym bardziej produktywne programista będzie w nim. Guido van Rossum napisał o programowaniu produktywności za pomocą Pythona w 1998 roku i podczas wyszukiwania w Internecie wciąż widzę osoby odwołujące się do tego konkretnego twierdzenia:
Składniowo kod Pythona wygląda jak wykonywalny pseudo kod. Programowanie przy użyciu Pythona jest 5-10 razy szybsze niż przy użyciu C / C ++ i 3-5 razy szybsze niż przy użyciu Java. W wielu przypadkach prototyp aplikacji można napisać w języku Python bez pisania kodu C / C ++ / Java. Często prototyp jest wystarczająco funkcjonalny i działa wystarczająco dobrze, aby zostać dostarczony jako produkt końcowy, co pozwala zaoszczędzić znaczny czas rozwoju. Innym razem prototyp można przetłumaczyć w części lub w całości na C ++ lub Java - obiektowa natura Pythona sprawia, że tłumaczenie jest prostym procesem.
Czy ten problem został właściwie naukowo oceniony? Jeśli nie dla Pythona, to może dla rodzeństwa języków skryptowych, takich jak Ruby , Perl lub PHP ?
Nie szukam racjonalizacji, analogii ani wyjaśnień, dlaczego odpowiedź na pytanie może być trudna, chyba że opinia naukowców lub ekspertów poświęciła czas na przyjrzenie się temu zagadnieniu.
Początkowo zadałem to pytanie na stronie sceptics.SE , a ktoś zasugerował, że powinienem zadać to pytanie tutaj.
źródło
Odpowiedzi:
Artykuł 1 Ousterhout na temat języków skryptowych sugeruje, że im wyższy poziom programowania, tym bardziej produktywny jest programista. Jeśli weźmiemy to, jak mówi Boehm 2 , liczba linii, które programista może napisać w danym czasie, jest stała i nie zależy od języka lub jego typu (niski poziom, programowanie systemu, skryptowanie), łatwo można uwierzyć w to twierdzenie. Wynikowe instrukcje-według-kodu-kodu-linii-wiersza mogą być o rząd wielkości (lub kilka) lepsze w przypadku języków skryptowych niż w językach programowania systemowego.
Ponieważ języki skryptowe w dużej mierze polegają na gotowych narzędziach do typowych zadań (np. Struktur danych, manipulacji ciągami), ich głównym zastosowaniem jest zwykle zwiększenie produktywności przy koszcie niższej prędkości działania poprzez dostarczenie składni, która jest łatwa do nauczenia i wydajna w utrzymaniu programów z. Nie trzeba używać języka skryptowego, gdy potrzebna jest najwyższa szybkość wykonywania.
[1]: JK Ousterhout, Skrypty: Programowanie wyższego poziomu w 21 wieku , komputer (IEEE), 1998
[2]: B. Boehm, Software Engineering Economics , Prentice Hall, 1981
źródło
Jeśli mierzysz produktywność jako „czas na napisanie konkretnego prostego programu”, to zależy to bardziej od doświadczenia programisty i szybkiego myślenia niż od języka, który naprawdę oceniasz programistę, a nie języka.
Uważam, że konkursy kodu czasowego wskazują, że język nie ma tak naprawdę znaczenia dla tego rodzaju zadań. Nie ma jednego języka, który wygrywa takie wyzwania łatwiej niż inne (przynajmniej jeśli nie pozwalasz na względną popularność języków).
Jeśli mierzysz wydajność jako „skuteczność najlepszego programu” napisanego w danym języku, jest to jeszcze mniej zależne od języka. Zobacz na przykład wyniki konkursu Galcon AI . Zwycięzca jest napisany w Lisp. Następny wpis Lisp zajmuje jednak # 280. Co to mówi nam o przydatności języka do skutecznego pisania doskonałej sztucznej inteligencji? Moim zdaniem nic. Mówi nam tylko, że „bocsimacko” wymyślił i zaimplementował najskuteczniejsze algorytmy. Dla przypomnienia, czas nie był głównym czynnikiem w tym konkursie - ludzie mieli ponad dwa miesiące na opracowanie swojego kodu.
Wreszcie, jeśli mierzysz wydajność jako „długoterminowy koszt utrzymania projektu”, to myślę, że coś ci się podoba. Zwłaszcza, jeśli zatrudnisz do pracy tylko najlepszych ludzi i liczysz koszty w roboczogodzinach, a nie w dolarach. Mam silną opinię na temat tego, które języki są najlepsze do tego, ale nie mając żadnych twardych dowodów, które mogłyby cię z tym powiązać, pomijam tę opinię. Być może ktoś inny ma linki do tego typu wydajności.
źródło
http://page.mi.fu-berlin.de/prechelt/Biblio/jccpprtTR.pdf to jedno z niewielu badań, o których wiem, że faktycznie dokonało bezpośredniego porównania wydajności w różnych językach. Jest stary, ale warto go przeczytać, jeśli uznasz go za interesujący. Porównanie ma wiele poważnych wad, o których artykuł jest bardzo szczery.
Ogólny wynik jest taki, że języki niskiego poziomu (np. C, C ++) zajmują więcej czasu na pisanie, mogą zajmować znacznie mniej pamięci i mogą działać znacznie szybciej. Ale z bardzo dużą zmiennością. Języki skryptowe wysokiego poziomu zwykle zajmują o połowę mniej czasu i mają mniej zmienne podejście. W początkowo zaskakującym stopniu istnieje oczywisty sposób na zrobienie czegoś w języku skryptowym.
Należy pamiętać, że wszystkie wartości wydajności dla Java powinny być pobierane z dużym ziarnem soli - papier został wyprodukowany w latach 90., zanim ludzie mieli duże doświadczenie z Javą, i zanim JVM została dobrze zoptymalizowana. Oba czynniki powinny mieć znaczący wpływ.
źródło
Mówiąc ogólnie, pisanie programu w Pythonie będzie zwykle szybsze niż pisanie tego samego programu w C, C ++, Java.
Prawdopodobnie będzie działać wolniej.
Istnieją oczywiście określone aplikacje, dla których inne języki mogą być szybsze, ponieważ niektóre zaangażowane zadania są obsługiwane „bardziej natywnie”.
Chociaż nie jestem świadomy żadnych badań potwierdzających ten wzrost prędkości / wydajności (jak wspomniał jeden z komentatorów, może to być trudne do precyzyjnego zmierzenia), przeprowadzono bezpośrednie badania nad ekspresją języka.
Myślę, że istnieje pewna zasługa korelacji między ekspresją języka a szybkością programowania. Wystarczy wyobrazić sobie prosty wzorzec iteracji i przedstawić bardziej zwięzłe rozumienie pętli for lub pętli w Pythonie. Nie tylko można go natychmiast pisać szybciej, ale także eliminuje obawy o błędy off-by-one, indeksy poza zakresem i inne podobne problemy, które mogą znacznie spowolnić proces kodowania.
Pokazuje tabelę szacunkową współczynnika ekspresyjności języków. Chociaż należy go przyjmować z odrobiną soli, wspomniane przypisy są bardzo opłacalne.
http://en.wikipedia.org/wiki/Comparison_of_programming_languages#Expressiveness
źródło
Ostatnim razem, gdy korzystałem z Javy (co prawda, jakiś czas temu), otworzyłem ekran pełen kodu, aby otworzyć i zapisać plik. Porównaj to z kilkoma liniami w Pythonie lub Perlu i możesz zgadnąć, który z nich jest szybszy.
Oczywiście wszystkie języki mają swoje mocne i słabe strony, ale w przypadku większości zadań pisanie w języku Python będzie szybsze.
źródło
write()
aread()
do pozostałej części pliku projektu Java dostęp będzie tak zwięzły jak w Pythonie. Myślę, że twój przykład jest nieco zbyt ograniczony, aby porównywać Pythona i Javę (chociaż zgadzam się, że Java jest bardziej gadatliwa).