-
X-Received: by 2002:ac8:5249:: with SMTP id y9mr804786qtn.7.1546847224676; Sun, 06
Jan 2019 23:47:04 -0800 (PST)
X-Received: by 2002:ac8:5249:: with SMTP id y9mr804786qtn.7.1546847224676; Sun, 06
Jan 2019 23:47:04 -0800 (PST)
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit
0.net!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder-in1.
iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!v55no80
99191qtk.0!news-out.google.com!m21ni16506qta.0!nntp.google.com!v55no8099189qtk.
0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.programming
Date: Sun, 6 Jan 2019 23:47:04 -0800 (PST)
In-Reply-To: <8...@g...com>
Complaints-To: g...@g...com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=165.225.84.81;
posting-account=bMuEOQoAAACUUr_ghL3RBIi5neBZ5w_S
NNTP-Posting-Host: 165.225.84.81
References: <c...@g...com>
<f...@g...com>
<a...@g...com>
<7...@g...com>
<a...@g...com>
<6...@g...com>
<0...@g...com>
<a...@g...com>
<1...@g...com>
<e...@g...com>
<6...@g...com>
<1...@g...com>
<2...@g...com>
<5...@g...com>
<9...@g...com>
<1...@g...com>
<8...@g...com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <d...@g...com>
Subject: Re: Jaki język polecić początkującemu? - komentarz do artykułu w
Programista 9/2018
From: Maciej Sobczak <s...@g...com>
Injection-Date: Mon, 07 Jan 2019 07:47:04 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Lines: 167
Xref: news-archive.icm.edu.pl pl.comp.programming:213190
[ ukryj nagłówki ]> Maszyny stanów bardzo dobrze modeluje się czystymi funkcjami.
Właśnie nie i widać to na przykładzie MD5.
Co więcej, maszyny stanów w zastosowaniach praktycznych (np. wbudowanych) są
stymulowane z zewnątrz, np. przez przerwania (ogólnie: tzw. programowanie
zdarzeniowe). Nie ma jak tego popchnąć inaczej, niż przez odwołania do jakiegoś
stanu, który pamięta, co było poprzednio. Nie wiem, jak miałaby wyglądać realizacja
takiego automatu przy użyciu czystych funkcji.
> Tak. I ja właśnie o tym mówię: jeżeli mamy prostsze problemy,
> to korzystanie ze środków, które są potrzebne do radzenia sobie
> z bardziej złożonymi problemami jest błędem.
> (Kiedyś słyszałem określenie "principle of least power")
Ależ ja się z tym zgadzam.
> Mógłbym się podjąć, gdyby problem był dla mnie interesujący.
> Akurat liczenie MD5 w obecnej chwili nie jest takim problemem.
Rozumiem. Mamy więc (niezaskakujący) wniosek, że różne języki są właściwe do różnych
problemów.
[zmienne statyczne]
> Krytykuję korzystanie z tej możliwości wtedy, kiedy nie jest to
> konieczne.
Ależ ja się z tym całkowicie zgadzam.
> Krytykuję stosowanie operacji przypisania tam, gdzie można
> tego uniknąć, jako zły nawyk.
Ale teraz mieszasz tematy. Nie pokazałeś żadnego przykładu, w którym można uniknąć
operacji przypisania - ani tym bardziej, po co należałoby tego unikać. Musiałeś
sięgnąć po zmienne statyczne, żeby udowodnić coś na temat operacji przypisania - to
był właśnie błąd w Twojej argumentacji. Możemy się zgodzić, że nadużywanie zmiennych
statycznych jest złe, ale nie wynika z tego kompletnie nic nt. operacji przypisania.
Funkcja MD5 jest dobrym przykładem funkcji, w której zmiennych statycznych nie ma, a
operacja przypisania jest niezbędna, żeby napisać sensownie wyglądający kod. Powtórzę
dla tych, co nie zerknęli na przykłady:
1. w C++ (ogólnie: w języku imperatywnym) jest zmienna "r", i jest pętla, która ma 64
iteracje, w których modyfikuje zmienną "r".
2. w Haskellu są 64 zmienne (a raczej stałe), od "r0" do "r63" i rozwinięty kod
pętli, który przypisuje kolejne wartości na podstawie poprzednich.
Gdybym był złośliwy, to zapytałbym, co by było, gdyby iteracji było 1k. Albo 1M.
Nadal uważam, że operator przypisania jest niezbędnym narzędziem w uniwersalnym
języku programowania (C++ taki jest, Haskell chciałby) i nie widziałem jeszcze
przykładu kodu, w którym byłby użyty niepotrzebnie.
Co więcej, nawet sztuczny przykład z "niepotrzebnie" rozpisanym długim wyrażeniem na
fafnaście małych mógłbym bronić jako uzasadniony, np. w celach dignostycznych.
Debugery to lubią.
> Autorzy krytykowanego fragmentu kodu [...]
Oczywiście. W każdym języku można napisać gówniany kod. Ale ja chcę język, w którym
będę mógł napisać dobry kod. Np. funkcji MD5. Tymczasem znalazłem gówniany kod w
Haskellu. Problem w tym, że nie znalazłem dobrego. A to budzi obawy, że może nie da
się tego zrobić dobrze w tym języku. A to jest już bardzo poważny zarzut, bo to nawet
nie jest problem nawyków powielanych przez słabe materiały dydaktyczne.
> Jak sam zauważyłeś, interfejs do kodu liczącego MD5 jest czystą
> funkcją
No właśnie. Tym bardziej martwi niemoc Haskella w tej sprawie.
> I to jest dobry nawyk, że nawet jeśli w implementacji czegoś
> użyjesz jakichś stanów, to nie wypychasz tego do użytkownika.
Ależ oczywiście. To się nazywa enkapsulacja. Nadal jednak chcę mieć operator
przypisania w języku.
> Bardzo dużo widziałem kursów programowania, które skupiają się
> na małych przykładach, które przy próbie skalowania powodowałyby
> chaos.
Bardzo dobre spostrzeżenie. Wrócimy do niego.
> W porządku. Używaj sobie czego chcesz. To Twoja sprawa.
> Ja natomiast mówię o perspektywie innej, niż Twoja.
OK. Ja mogę mieć różne perspektywy. :-)
> Pytanie postawione w wątku brzmi "jaki język polecić początkującemu".
Właśnie. Może taki, który *umożliwia* łatwą implementację dowolnego problemu? Np.
kalkulatora? Albo np. funkcji MD5?
> Operator przypisania w językach takich jak C czy Python jest
> łatwo dostępny, i sprawia wrażenie, że jest prostą operacją.
Bo jest. To jest podstawowa operacja.
> Brutalna rzeczywistość jest jednak taka, że używanie operatora
> przypisania stwarza możliwość do popełnienia wielu błędów,
Nadal czekam na przykład.
Uwaga: zmienne statyczne już skrytykowaliśmy. Czekam na przykład z operatorem
przypisania.
> i właśnie z tego powodu w pierwszych dwóch rozdziałach SICP
A z jakiego powodu teraz używają Pythona do nauki?
> Pomijam kwestię, że dla osób, które uczyły się matematyki,
I to jest błąd logiczny. Piszesz, że interesują Cię jak najłatwiejsze metody
współpracy z komputerem a teraz powołujesz się na osoby, które uczyły się matematyki?
Wyobraźmy sobie więc osoby, które się nie uczyły. Przecież Ty sam pisałeś tu o
osobach, które na co dzień używają arkuszy kalkulacyjnych. Bądź bardziej
konsekwentny.
> zapis
> w rodzaju
> x = x + 1
> jest po prostu równaniem pozbawionym rozwiązań,
Powiedz tym osobom, że to nie jest równanie. Osoby, które uczyły się matematyki, to
nie są chyba jakieś ograniczone młoty, dla których takie założenie miałoby być
nieosiągalne. Zwłaszcza, że każdy matematyk używał gumki do ołówka albo gąbki do
tablicy i na pewno coś kiedyś zmazywał, żeby coś nowego w tym samym miejscu napisać.
Uwaga: niektóre języki używają innego symbolu, np. := w tym celu, ale nie wierzę,
żeby to miało być dla kogoś krytyczne. Zwłaszcza dla ludzi z wykształceniem
matematycznym.
--
Maciej Sobczak * http://www.inspirel.com
Następne wpisy z tego wątku
- 07.01.19 11:23 g...@g...com
- 08.01.19 09:08 Wojciech Muła
- 08.01.19 09:31 g...@g...com
- 08.01.19 09:42 AK
- 08.01.19 10:42 Maciej Sobczak
- 08.01.19 17:21 Wojciech Muła
- 08.01.19 22:48 AK
- 08.01.19 22:51 AK
- 08.01.19 23:24 g...@g...com
- 09.01.19 00:18 AK
- 09.01.19 08:46 Maciej Sobczak
- 09.01.19 09:08 Maciej Sobczak
- 09.01.19 22:32 Wojciech Muła
- 09.01.19 23:11 g...@g...com
- 09.01.19 23:21 g...@g...com
Najnowsze wątki z tej grupy
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
- Ada 2022 Language Reference Manual to be Published by Springer
Najnowsze wątki
- 2024-11-08 Warszawa => Head of International Freight Forwarding Department <=
- 2024-11-08 Warszawa => Key Account Manager <=
- 2024-11-08 Szczecin => Key Account Manager (ERP) <=
- 2024-11-08 Białystok => Full Stack web developer (obszar .Net Core, Angular6+) <
- 2024-11-08 Wrocław => Senior PHP Symfony Developer <=
- 2024-11-08 Warszawa => QA Engineer <=
- 2024-11-08 Warszawa => QA Inżynier <=
- 2024-11-08 Warszawa => Key Account Manager <=
- 2024-11-08 Gdańsk => Software .Net Developer <=
- 2024-11-08 Akumulator Hyundai
- 2024-11-08 Warszawa => Manager/Specialist e-commerce (B2C) <=
- 2024-11-08 Gdańsk => Specjalista ds. Sprzedaży <=
- 2024-11-08 Gdańsk => Kierownik Działu Spedycji Międzynarodowej <=
- 2024-11-08 znaj podstawe
- 2024-11-08 Chrzanów => Specjalista ds. public relations <=