Wątek przeniesiony 2021-06-27 20:49 z Off-Topic przez Adam Boduch.

Czy Python jest za prosty?

1

Programuje na codzień w pracy w pythonie i muszę powiedzieć, że wydaję mi się to strasznie prosty język i czuję się z tego powodu niedowartościowany. Po godzinach wracam do domu i z zapałem siadam do pisania w c++, gdzie niemalże czuję jakbym był jednym ciałem z moim laptopem. Zarządzanie pamięcią, multithreading, statyczne typowanie to jest prawdziwe życie.

Pytanie do wszystkich programistów siedzących w wysoko poziomowych językach jak python, ruby itp. Czy też czujecie niedosyt? Czasem w pracy celowo utrudniam sobie zadania pythonowe żeby było ciekawiej, ale to nie wystarcza.

21

Python jest prosty jeśli kodu jest mało. C++ nigdy nie jest proste. Wybierz projekt Pythonowy na > 100k linii kodu (o ile takie w ogóle istnieją), a też będzie zawiły.

Zarządzanie pamięcią, multithreading, statyczne typowanie to jest prawdziwe życie.

Podniecasz się środkiem, a nie celem. Musisz jeszcze dojrzeć w takim razie :)

0

https://github.com/scikit-learn/scikit-learn

zobacz sobie kod źródłowy scikit-learna napisany w python (glownie numpy, cython). No nie powiedzialbym ze to jest skomplikowane. W zasadzie to kod jest prostszy do czytania niż dokumentacja. A to jedna z wiekszych i bardziej popularnych bibliotek napisanych w pythonie. Python jest tak prosty, że aż wstyd w nim kodzić.

1

Udało się, jest ponad 100k linii kodu :)

/tmp/scikit-learn$ cloc .
    1012 text files.
    1006 unique files.                                          
     271 files ignored.

http://cloc.sourceforge.net v 1.60  T=2.10 s (384.6 files/s, 125593.4 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Python                         668          41788          65306         108116
Cython                          40           2940           3929           8469
CSS                              4             49             66           8175
C/C++ Header                    21            824            582           6557
C++                              5            827            429           5422
C                               44            363           3141           2394
Javascript                       7            593            373           1763
Bourne Shell                     9             91            134            417
PowerShell                       2             65             39            395
HTML                             1             34              6            323
YAML                             5             33             65            201
make                             2             37             14            122
DOS Batch                        1             17              1            102
-------------------------------------------------------------------------------
SUM:                           809          47661          74085         142456
-------------------------------------------------------------------------------

Myślę, że w Javce też można by to w prosty sposób napisać, oczywiście z użyciem jakichś lepszych kolekcji niż te wbudowane w Javę. Np http://www.vavr.io/ i jedziemy. Java 10 ma vara, więc tym bardziej się zbliża zwięzłością do innych języków (czyli np powiedzmy 2x więcej kodu by w Javce było niż w Pythonie).

Ja jak siedzę nad C++em to czuję tylko frustrację spowodowaną segfaultami i dziwnymi problemami wynikłymi z tego, że język i kompilator nie sprawdzają automatycznie np indeksów tablic czy poprawności wskaźników. Do tego tragicznie template'y (z punktu widzenia ergonomii), kosztowne metody wirtualne (więc trzeba unikać i kombinować), itp itd Taki masochizm z wyboru.

Zdecydowanie wolę wyzwania algorytmiczne niż składniowe, aczkolwiek kacze typowanie mi nie po drodze, bo bardzo cenię sobie statyczną analizę (bardzo mi pomaga). Z tego powodu lubię statycznie typowane języki, ale nie takie które są niepotrzebnie skomplikowane (jak np C++).

5

Wszystko jest dla ludzi.

Jeśli potrafisz osiągnąć efekt końcowy w dowolnym języku, to nie przejmuj się prostotą rozwiązań, które używasz.

Gdyby ludzie przejmowali się, że pisząc w czymś innym niż czysty C jest się gorszym hackerem, to nie powstałoby tyle technologii usprawniających pracę.

Jeśli możesz coś zaprogramować w jeden dzień w Pythonie, zamiast w tydzień w C++, to plus dla Ciebie, Twoje oczy będą Ci wdzięczne.

0
Nieposkromiony Kura napisał(a):

Programuje na codzień w pracy w pythonie i muszę powiedzieć, że wydaję mi się to strasznie prosty język i czuję się z tego powodu niedowartościowany. Po godzinach wracam do domu i z zapałem siadam do pisania w c++, gdzie niemalże czuję jakbym był jednym ciałem z moim laptopem. Zarządzanie pamięcią, multithreading, statyczne typowanie to jest prawdziwe życie.

Pytanie do wszystkich programistów siedzących w wysoko poziomowych językach jak python, ruby itp. Czy też czujecie niedosyt? Czasem w pracy celowo utrudniam sobie zadania pythonowe żeby było ciekawiej, ale to nie wystarcza.

szacuneczek, są jak widać jeszcze ludzie, którym propaganda nie sprała mózgu...

pajton srajton, C++ [--ciach--] !

0

Przecież właśnie piękno tkwi w prostocie. Zazwyczaj im coś jest prościej napisane tym jest czytelniejsze

0

Z tego co wiem nowe C++ dąży do uproszczeń - std::function, lambdy, auto, to_string, "if constexpr"...
Oczywiście pozostaje kompatybilność wstecz, więc można się zaplątać w stare kodowanie, ale jak się chce to można robić całkiem zgrabny kod.
Prawdopodobnie ludzie zaczynający teraz naukę C++ nie będą nawet znali połowy problemów które kiedyś występowały, ponieważ sam język i jego biblioteka standardowa będą ich przed tymi problemami chroniły.

Z drugiej strony Python to inna liga. Prosty i przyjemny język. Przynajmniej na pierwszy rzut oka.
Rozwiązania w Python można przecież rozszerzać o moduły C/C++, można pisać w Cythonie. Python to zresztą język naukowców, obecnie jeśli ktoś pracuje na uczelni to ma do wyboru głównie Python, R, Julia, Fortran, Matlab. Każdy z tych języków ma jakieś zalety. Python - ogromną liczbę darmowych bibliotek, często udokumentowanych licznymi książkami.

Python używany jest na wielu polach gdzie nie ma C++:

  • prototypowanie obliczeń naukowych i finansowych (REPL, Jupyter)
  • aplikacje webowe
  • interaktywny data science (głównie dzięki dostępnym wykresom)

Dla kogoś kto aktualnie jest na studiach informatycznych i nie musi się martwić o zarobek polecałbym się nauczyć obu języków, przynajmniej w podstawowym stopniu. Jeśli chodzi o C++ to polecam szukać materiałów opisujących min. C++11 a najlepiej C++17. Po co się uczyć staroci?

1

Nie ma lepszych czy gorszych języków programowania są tylko źle dobrane do projektu. Z mego punktu widzenia Python jest prosty bo ma bardzo dużo bibliotek, które pozwalają mi osiągnąć wymagany efekt bez wielkiego wysiłku. Kiedyś programowałem dużo w Visual Basic for Applications (VBA) i też można powiedzieć, że to nie jest poważny język programowania. Jednak w tych projektach kluczową sprawą była szybkość tworzenia aplikacji (małe bazy danych, ale musiały powstawać praktycznie ad hoc) i VBA okazał się najlepszym rozwiązaniem.

1

Ja czuje niedosyt, bo:

  1. W każdej firmie w jakiej byłem i jestem programiści piszący w pythonie nieświadomie pracują jak w pascalu. Wydawać by sie mogło, że skoro są klasy w kodzie to piszemy obiektowo. Nic bardziej mylnego! Naprawdę bardzo ciężko jest spotkać kod źródłowy produktu firmowego gdzie nie ma przeplatania struktur z procedurami. W kodzie można zobaczyć nieraz dziedziczenie, ale na 99% jest to wpadka wymuszona przez przypadek albo framework.

  2. Python to taka zabawka, bądź scyzoryk. Dobre do pisania prototypów z różnych obszarów, testów, nieskomplikowanych crudów czy skryptów do bibliotek zrobionych w C++/C, ale jak projekt puchnie to problemy z wydajnością i utrzymaniem najlepiej dać o sobie. To dobrze obrazuje do czego python się nadaje, a do czego nie.

0

Nie jest taki prosty, tylko po prostu go dobrze umiesz. Python teraz trochę cierpi, bo parę lat temu był na niego ogromny boom. Głównie się mówiło, żeby olać PHP i iść do Pythona, bo to poważne programowanie. PHP przez ostatnie lata poszło bardzo mocno do przodu, a Python trochę stoi w miejscu, bo już kiedyś był dobry. Zarobki są na podobnym poziomie jak chociażby właśnie w PHP. Tak naprawdę Python w najbliższych latach jakiejś rewolucji nie zrobi i to jest chyba problem. Niestety przez ten boom weszło do tego języka sporo programistów, którzy wcześniej pisali strukturalnie w PHP i przenieśli to na Pythona. W większości firm kod jest nierozwijalny przez to, a ci programiści nie wrócą do PHP, bo tam strukturalnie nie mają czego szukać. I koło się zamyka.

1

polski jest bardziej skomplikowany niż angielski
i ci z tego

1
janusz softu napisał(a):

polski jest bardziej skomplikowany niż angielski
i ci z tego

Łatwiejszy język = więcej programistów = większa "konkurencja"

chyba

0

Konkurencja wcale nie większa, tylko trudniej znaleźć programistów, których warto zatrudnić....

0

NASA, CERN, AI wybrało Pythona. Siła tkwi w prostocie gdy sprzęt jest coraz tańszy.

0

No ale co wybralo? Przeciez ciezkie obliczenia w AI ida w c++ a python to tylko binding. Ten argument ze sprzętem nietrafiony, bo w AI obliczenia są często tak ciężkie (głównie sieci neuronowe) ze nawet szybki sprzet z modelami zaimplementowanymi w czysttm pythonie liczyl by je latami

1

Do ciężkich obliczeń w Pythonie jest Numba(LLVM) i Cpython.

0

Ja nie lubie Pythona właśnie za dynamiczne typowanie danych, i to że tak naprawde wiele rzeczy w nim ciężko zrobić, np. nie można łatwo zrobić klasy "final", stałych referencji itp.
Co to za język w którym musze sie nakombinowac żeby stworzyć niemutowalny obiekt?

0

Uczynny jelen poczytaj sobie tensorflow to zobaczysz że do ciężkich obliczeń i dużych projektów numba i cython nie wystarczy

0

Ja osobiście wielkich aplikacji w pythonie nie piszę. Dla mnie jest to przede wszystkim język skryptowy automatyzujący pewne czynności związane z administrowanym przez mnie system np. zaistniała konieczność wydrukowania zawartości kilkuset plików PDF. Sprawa wydaje się łatwa, ale jest mały haczyk. Każdy PDF musi zostać poprzedzony wydrukiem strony z metryką zawierającą nazwę pliku, jego położenie na dysku i wyliczoną sumą kontrolną.

1

Python mocno stoi właśnie w oskryptowaniu projektów pisanych w dowolnych językach. Przyczyny nie trzeba długo szukać - w małej skali kacze typowanie nie prowadzi do dużych problemów, a konkurencja dla Pythona w skryptowaniu jest dość marna. Na Linuksa jest bash i to jest po prostu klątwa. Bash jest kaczo typowany, więc statyczna analiza w bashu wiele nie zdziała. Z drugiej strony w bashu chyba nawet łatwiej sobie strzelić w stopę niż pisząc w C++ (za sprawą n.p. wielu różnych dialektów powłoki). A razem z tym mamy toporność basha w podstawowych operacjach, jak np korzystanie z tablic, map, zbiorów, itd Dla przykładu - jak sprawdzić czy wartość jest w zbiorze? W Javie, Pythonie, C++ sprawa jest bajecznie prosta. W bashu? Cyrk: https://stackoverflow.com/questions/3685970/check-if-a-bash-array-contains-a-value Python jest dużo bardziej zbliżony do innych języków w kwestii operowania na strukturach danych i przez to łatwiej jest programistom innych języków pisać w Pythonie niż w bashu.

0
Wibowit napisał(a):

Python mocno stoi właśnie w oskryptowaniu projektów pisanych w dowolnych językach. Przyczyny nie trzeba długo szukać - w małej skali kacze typowanie nie prowadzi do dużych problemów, a konkurencja dla Pythona w skryptowaniu jest dość marna.

Jak już tak offtopujemy, to co z Perlem? Za moich lat studenckich było o nim dość głośno i był takim dość wiodącym językiem skryptowym, poza PHP, ale to inne zastosowania były. A teraz jakoś od dawna słowa Perl nie widziałem.

1

Odpowiedź na pytanie główne: Python nie jest "za prostym" językiem, bo nie ma czegoś takiego jak granica, który język jest za prosty, a który nie. Dochodzi też tutaj problem samego zagadnienia - jak zdefiniować prostotę języka programowania - czy chodzi tu tylko i wyłącznie o składnię, przeciętny czas nauki do poziomu pozwalającego samodzielnie pisać projekty, możliwości języka czy cokolwiek innego? Python to język jak każdy inny - opanowanie go wymaga czasu i wysiłku. Co do wykorzystania w skryptach - na pewno jest wygodniejszy niż Bash, zwłaszcza w połączeniu z różnymi fajnymi narzędziami np. Ansible. Do tego dochodzi fakt, że Python jest na maszynce domyślnie (pomijam Windowsa).

Co do Perla - Python wygrywa z nim na poletku czytelności kodu - mniej czasu spędzasz kminiąc "o co chodzi". Perl był znany ze skryptów typu "write once, read never", bo po prostu jego składnia jest znacząco różna od czegokolwiek innego, także basha.

0

@vpiotr:

Chyba Ci się coś pomyliło. W bashu w jednej linijce możesz zrobić to co nawet w pythonie zajeloby parę albo nawet parenascie (patrz sed i grep z dziwnymi i przydatnymi flagami).

0

@vpiotr:

Może formalnie sed i grep to nie bash, ale większość ludzi mówiąc bash ma na myśli właśnie skrypty baszowe korzystajace z linuksowych narzędzi takich jak grep, tar, ssh, sed itp. Bash to taki skryptowy klej do linuksowych narzedzi w czym jest wedlug mnie bardzo dobry. I za pomocą basha+linuksowe narzędzia w paru linijkach można dokonać cudów

0

@somekind:

Niepotrzebnie jesteś niemily. Większość ludzi mówiąc "pisze skrypt w bashu" ma na myśli bash+narzędzia linuksowe, nie spotkałem jeszcze nikogo kto w bashu implantowalby fibonacciego albo używał basha nie korzystając z linuksowych narzędzi.

2

Dynamiczne typowanie, brak kontroli prywatności, wielodziedziczenie - prosty? no nie wiem. W Pythonie łatwo napisać kod spagetti, zawiły, trudny w konserwacji. Prosta jest Java :)

0

@Pangeon: Początkujący jeszcze nie znają wielu mechanizmów, więc rzeczywiście piszą prosty kod, ale doświadczony programista wie jak napisać smaczne spaghetti w Javie :]

0
Pangeon napisał(a):

Dynamiczne typowanie, brak kontroli prywatności, wielodziedziczenie - prosty? no nie wiem. W Pythonie łatwo napisać kod spagetti, zawiły, trudny w konserwacji. Prosta jest Java :)

w Javie to samo.


import java.util.*;
import java.lang.*;
import java.lang.reflect.*;
import java.io.*;

interface Foo {
	default int calc(int a, int b) {
		return a + b;
	}
}

interface Boo {
	default void print(int a) {
		System.out.println(a);
	}
}


/* Name of the class has to be "Main" only if the class is public. */
class Ideone implements Foo, Boo 
{
	public static void main (String[] args) throws java.lang.Exception
	{
		// Multiple inheritance 
		Ideone obj = new Ideone();
		obj.print(obj.calc(2,3));
		
		// Dynamic typing
		Object a;
		a = 123;
		System.out.println(a);
		a = false;
		System.out.println(a);
		a = "ala";
		System.out.println(a);
		
		// no privacy on Internet
		Method method = obj.getClass().getDeclaredMethod("hidemenot");
		method.setAccessible(true);
		Object r = method.invoke(obj);
	}
	
	private void hidemenot() {
		System.out.println("Not so private");
	}
}

wynik:

5
123
false
ala
Not so private

https://ideone.com/bj5Nzp

0

@vpiotr: Post @Pangeon dzielnie broni się przed Twoją odpowiedzią :]

Napisał:

W Pythonie łatwo napisać kod spagetti

A taki kod jaki dałeś w Javie, wcale nie jest tak łatwo napisać :]

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