-
X-Received: by 2002:a37:4dc5:: with SMTP id a188mr19210qkb.4.1546940548813; Tue, 08
Jan 2019 01:42:28 -0800 (PST)
X-Received: by 2002:a37:4dc5:: with SMTP id a188mr19210qkb.4.1546940548813; Tue, 08
Jan 2019 01:42:28 -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!v55no10
119149qtk.0!news-out.google.com!m21ni17471qta.0!nntp.google.com!v55no10119145qt
k.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.programming
Date: Tue, 8 Jan 2019 01:42:28 -0800 (PST)
In-Reply-To: <a...@g...com>
Complaints-To: g...@g...com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=194.9.244.14;
posting-account=bMuEOQoAAACUUr_ghL3RBIi5neBZ5w_S
NNTP-Posting-Host: 194.9.244.14
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>
<d...@g...com>
<a...@g...com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <c...@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: Tue, 08 Jan 2019 09:42:28 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Lines: 167
Xref: news-archive.icm.edu.pl pl.comp.programming:213200
[ ukryj nagłówki ]> > Rozumiem. Mamy więc (niezaskakujący) wniosek, że różne języki są właściwe do
różnych problemów.
>
> Pytanie, jaki dalszy wniosek możemy wyciągnąć z tego wniosku.
> Może na przykład taki, że rozsądnie byłoby eksplorować języki,
> które ułatwiają projektowanie języków.
Zgadzam się. Dlatego, jak już wspomniałem, podoba mi się język Wolfram, bo dzięki
swojej umiarkowanej lispowatości świetnie nadaje się do tworzenia tzw.
Domain-Specific Languages. Zastanawiam się nad możliwością użycia tego do opisu
wymagań, które można weryfikować albo z których można generować właściwy kod (albo
testy).
Sam LISP jest przez swój minimalizm zbyt sztywny, żeby był użyteczny dla końcowego
odbiorcy.
> Możesz zerknąć w przykłady programów liczących sumę kwadratów
> początkowych siedmiu liczb pierwszych, które przewinęły się
> przez ten wątek (to było w odpowiedzi na post AK).
> Tam dokładnie pokazałem przykład rozumowania podstawieniowego.
Ależ ja go rozumiem i od początku staram się tu zrobić konfrontację tych koncepcji.
"Przykład rozumowania podstawieniowego" nie pokazuje żadnej przewagi nad tym
imperatywnym oryginałem, z dwóch powodów:
1. Nie widać w nim długoterminowych zalet w aspekcie utrzymania kodu. Wyobraź sobie,
że klient dostał ten program i jest zadowolony, ale przecież jesteśmy agile, więc
klient od razu wpada na nowy pomysł: "a jeszcze tak sobie pomyślałem, że te liczby,
które nie są pierwsze, też by można do siebie dodać".
Z punktu widzenia klienta to nie jest zmiana wymagań, tylko *nowe*, *dodatkowe*
wymaganie (bo logicznie tak właśnie jest). A skoro tak, to klient będzie oczekiwał,
że ten drobny dodatek będzie zrealizowany przez drobny dodatek w kodzie. W wersji
imperatywnej (tej syfiastej, brzydkiej i naiwnej) *faktycznie* wystarczy coś dodać,
bez modyfikacji istniejącego kodu. W wersji funkcjonalnej trzeba wywalić cały program
i napisać go od nowa (pokażesz?). To jest potencjalnie poważny problem i nie tylko
dlatego, że klient nie zrozumie, dlaczego tak ma się stać.
Ten przykład w całości jest sztuczny (serio: nikt nie rozwiązuje takich problemów),
ale nie wynika z niego, że powyższy problem nie wystąpi w większej (ilościowo albo
czasowo) skali. Ciekawym aspektem do rozważenia jest to, że to, co Ty traktujesz jako
wymagania ("dodaj ... itd.") to nie są jedyne wymagania, z jakimi musi się zmierzyć
inżynier. Niejawnymi wymaganiami są też kwestie wydajności (sam widziałeś) i
utrzymanie projektu w długim terminie. "Paradygmat podstawieniowy" tych problemów sam
z siebie nie adresuje a przez to jest rozwiązaniem nie tylko niekompletnym ale może
być wręcz ograniczającym.
2. Programowanie imperatywne w żaden sposób nie wyklucza analizy podstawieniowej.
Analizatory kodu (np. takie, które sprawdzają statycznie, czy ktoś nie wyjeżdża poza
tablicę albo nie dzieli przez zero) wykonują weryfikację właśnie przez podstawienia i
przez rozwiązywanie równań.
> Większość programistów, jakich znam, nie implementuje swojego MD5.
To samo mogę powiedzieć o każdym zaproponowanym przez Ciebie przykładzie.
A jednak ktoś coś immplementuje, inaczej nie mielibyśmy roboty. Pytanie, w którym
momencie trafię na taki (lub należący do tej klasy) problem.
> Być może z dydaktycznego punktu widzenia lepiej jest, żeby
> programiści najpierw uczyli się języków, które realizują prostsze
> modele obliczeń, a dopiero później (jeśli zajdzie taka potrzeba)
> takich, które pozwalają na ścisłą kontrolę sprzętu.
> (Wiele wskazuje na to, że tak właśnie jest)
Ja bym się nawet z tym zgodził. I tu możemy wrócić do Twojej tezy, że początkujący
programiści powielają nawyki z prostych przykładów w większej skali. A może warto ich
uczyć na językach, których nie da się zastosować w większej skali? Wtedy nie będą
niczego powielać. Scratch, Logomocja, itp. - a potem, jak już się wyszaleją na
piramidkach i ciuchciach, pokazać im prawdziwy język, od razu w dużej skali. Np. C++.
:-D
> Czasem się spotykam z takim sformułowaniem, że dobry
> język powinien robić tak, żeby łatwe rzeczy były w nim
> łatwe, a trudne przynajmniej możliwe.
Zgadzam się. Ale to może być też kwestią ekspozycji - tzn. można pokazywać język
kawałkami, zaczynając od tych łatwych.
> > > 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.
>
> Podstawowa dla jakiego problemu?
Jak niewiasta chce przemalować włosy to je maluje a nie robi swojego klona z innymi
włosami. Jak mam kapcia w samochodzie to pompuję oponę a nie kupuję nowe napompowane
koło (przepraszam: nowy samochód, bo przecież do starego nie da się nowego koła
założyć). Jak mam gorzką kawę, to ją dosładzam a nie robię nową słodką. A jak chcę
zmienić kolor ściany, to ją maluję a nie buduję nowy dom. I nie zakładam nowego konta
(w nowym banku), żeby móc dostać wypłatę.
Tak ma moje oko, operacja przypisania jest podstawowa w sensie uniwersalnym. To
właśnie udawanie, że tej operacji nie ma, jest dla mnie kosztem.
> Załóżmy, że zmienimy linijkę
>
> if(++dodano==ilu) return suma;
>
> na
>
> if(dodano++==ilu) return suma;
>
> Już mamy błąd.
To jest problem kolejności operacji a nie samego przypisania (w tym przypadku
modyfikacji). Funkcje też można zaaplikować w złej kolejności.
> > > i właśnie z tego powodu w pierwszych dwóch rozdziałach SICP
> >
> > A z jakiego powodu teraz używają Pythona do nauki?
>
> Wyjaśniają w tekście, który podlinkowałeś wcześniej.
Czyli jednak można pokazywać uczniom operację przypisania od samego początku nauki?
> Polecam ten wykład:
> https://www.youtube.com/watch?v=uEFrE6cgVNY
Jak to się ma do ludzi, którzy uczyli się matematyki i nie rozumieją, że x=x+1 to nie
musi być równanie?
Ludzie, którzy zawodowo zajmują się matematyką biegle posługują się narzędziami
takimi jak Mathematica, Matlab, Octave, itp. (zależność kulturowa) i zdumiewająco
wszystkie te trzy są imperatywne i korzystają z pojedynczego znaku "=" jako operacji
przypisania, czyli:
x=5;
x=x+1;
we wszystkich tych narzędziach oznacza to samo.
Czyli najwyraźniej ludzie zajmujący się matematyką nie mają z tym problemu.
--
Maciej Sobczak * http://www.inspirel.com
Następne wpisy z tego wątku
- 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
- 09.01.19 23:22 Wojciech Muła
- 10.01.19 02:32 AK
- 10.01.19 09:29 Wojciech Muła
- 10.01.19 10:14 AK
- 10.01.19 10:54 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 <=