Wpis z mikrobloga

dlaczego nowoczesne programowanie wygląda tak, że jak mamy jakiś struct typu DataFrame pandas

to w tym structcie z jakiegoś powodu jest wbudowana funkcja sort

zamiast mieć w bibliotece pandas funkcję sort która bierze df i warunki sortowania i zwraca posortowany df

nie rozumiem tego tak bardzo

w sensie że zamiast df = df.sort_values(by='x') powinno być df = pandas.sort(df, by='x') : z biblioteki pandas bierzemy funkcję sortującą która działa na df z parametrami dalej, zamiast dataframe'u magicznie się sortującego z samego swojego istnienia (?)

lub np. w pythonie jest logiczne list = sorted(list) vs. jakieś dzikie list = list.sort()

na dodatek to jest strasznie nieintuicyjnie gdy próbujemy składać funkcje, np rozważmy coś takiego:

df.sort_values().filter().plot()

trudno mi jest zrozumieć co tu się dokładnie dzieje, porównajmy to z bardziej logicznym, matematycznym wyrażeniem tego:

plot(filter(sort_values))(df) gdzie ciąg przyczynowo-skutkowy jest jasny, widoczny i zgodny z konwencją (funkcje składamy od prawej do lewej)

alternatywnie można by wprowadzić

dla mnie to wygląda tak jakby ktoś się obraził na konwencję składania funkcji i wymyślił całkowicie nowy sposób byle tylko uniknąć składania funkcji xD

ta konwencja prowadzi do tego że jakikolwiek kod w Pythonie jest dla mnie niezrozumiały mimo że ogarniam mniej-więcej co się dzieje w nawet trochę bardziej skomplikowanych programach w C

ps jeśli nie zauważyliście jeszcze to nie jestem programistą, ani nie mówię że potrafię programować (rok C na studiach) - więc oczekuję odpowiedzi na moim poziomie a nie elektrody

#programowanie bardziej #metaprogramowanie #naukaprogramowania

odważę się także otagować #matematyka bo chodzi mi o abstrakcyjne koncepty i ludzie z tego tagu mogą mnie lepiej zrozumieć
  • 6
Chodzi mi głównie o to, że zamiast jasnego podziału na zmienne (które same z siebie się nie zmieniają bez jasnych instrukcji programu poprzez albo nowe przypisanie przez programistę lub użycie na nich funkcji) i działające na nich funkcje, robimy miszmasz że wszystko może mieć wbudowane w siebie funkcje.

To tak jakby zamiast 2+2 (co jest uproszczeniem zapisu suma(2,2) gdzie suma to funkcja z R^2 w R dodająca argumenty) pisać 2.dodaj(2)

lub zamiast
Kolega mi polecił obejrzenie filmiku Haskell in 100 seconds i niesamowicie mi się spodobało. Czemu tak to nie może wyglądać? Z tego co zrozumiałem to w jednej części programu określamy zmienne i funkcje (bez bezpośredniego działania), a potem w mainie wypisujemy po kolei co wykonujemy. Dokładnie tak sobie wyobrażałem programowanie.

Czemu tak nie jest? Czemu tak musi być gorzej?

Tutaj ten filmik
tyrytyty - Kolega mi polecił obejrzenie filmiku Haskell in 100 seconds i niesamowicie...
@tyrytyty: to jest pochodna przetwarzania strumieniowego wywodząca się z matlabów symulinków czy konsoli.

df=>mapa1=>mapa2..mapaN=>result
Dużo lepsza składnia niż zagnieżdżanie N nawiasów ¯⁠\\⁠_⁠(⁠ツ⁠)_⁠/⁠¯

result=mapaN(...mapa2(mapa1(df))...)
Można łatwo wsadzić dodatkowe kroki do filtra bez potrzeby uzgadniania liczny nawiasów, ale co kto woli.
A Haskell to zupełnie inny paradygmat programowania, tam kompilator sam sobie skacze po kodzie i szuka gdzie jest zdefiniowana dana formuła. Więc kod pisze się jak dowód matematyczny a nie jak sekwencję
@BArtus: chciałbym tylko zauważyć że problem nawiasów został już rozwiązany poprzez operator składania funkcji ∘ który nie wymaga nawiasów

result = mapaN ∘ mapa(N-1) ∘ ... ∘ mapa2 ∘ mapa1 (df)

nadal brzydko?
Może być, tylko przepływ masz w takim przypadku w przeciwną stronę więc jak nie jesteś Arabem i nie czytasz od prawej do lewej to trochę dziwne się to analizuje ಥ⁠⁠ಥ