-
X-Received: by 2002:a0c:b59b:: with SMTP id g27mr515111qve.0.1546171600780; Sun, 30
Dec 2018 04:06:40 -0800 (PST)
X-Received: by 2002:a0c:b59b:: with SMTP id g27mr515111qve.0.1546171600780; Sun, 30
Dec 2018 04:06:40 -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!v55no50
82395qtk.0!news-out.google.com!m21ni8572qta.0!nntp.google.com!v55no5082393qtk.0
!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.programming
Date: Sun, 30 Dec 2018 04:06:39 -0800 (PST)
In-Reply-To: <e...@g...com>
Complaints-To: g...@g...com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=31.0.67.76;
posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r
NNTP-Posting-Host: 31.0.67.76
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>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <6...@g...com>
Subject: Re: Jaki język polecić początkującemu? - komentarz do artykułu w
Programista 9/2018
From: g...@g...com
Injection-Date: Sun, 30 Dec 2018 12:06:40 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Lines: 182
Xref: news-archive.icm.edu.pl pl.comp.programming:213100
[ ukryj nagłówki ]W dniu niedziela, 30 grudnia 2018 00:21:16 UTC+1 użytkownik Maciej Sobczak napisał:
> > > [operator przypisania]
> > >
> > > > W większości miejsc nie jest konieczne.
> > > > A jest to zły nawyk, ponieważ - mówiąc skrótowo - zwiększa złożoność
> > > > środków analizy programów
> > >
> > > Nie, nie zwiększa.
> >
> > Owszem, zwiększa.
>
> To tak, jakbyś powiedział, że silnik zwiększa koszt samochodu.
> Otóż nie zwiększa, bo jest jego integralną częścią. Klima albo automat może
zwiększać, ale nie silnik.
> Podobnie jest z operatorem przypisania w językach imperatywnych. On niczego nie
zwiększa, bo nie może go nie być.
Nie. Programy, które nie posiadają instrukcji przypisania,
można analizować, po prostu zastępując wyrażenia ich wartościami.
Programów, w których używa się instrukcji przypisania, nie
można analizować w taki sposób - trzeba zaprzęgać inne środki
analizy. Oczywiście można ostrożnie wprowadzać instrukcje
przypisania, otrzymując modele, które wciąż mają dobre właściwości.
I oczywiście obowiązkowy link do Quory ;]
https://www.quora.com/What-is-your-opinion-on-purely
-functional-programming/answer/Panicz-Godek
> > Proponuję, żebyś - zamiast zgadywać w ciemno o czym mówię
> > - spróbował przeczytać tę książkę, i dopiero wtedy się
> > wypowiedzieć.
>
> Czytałem. Tylko jakoś nie uległem czarowi języków funkcjonalnych do tego stopnia,
żeby uznać je jako teoretyczną podstawę do czegokolwiek.
> I mam wrażenie (również z poprzednich naszych dyskusji), że tak właśnie sądzisz -
że języki funkcjonalne są podstawą, z której można budować inne konstrukcje. Dlatego
zastanawiasz się, jaki jest koszt dodania operatora przypisania.
Tzn. ściśle rzecz biorąc cała informatyka teoretyczna bazuje na
"czystych funkcjach" - to jest budulec, z którego tworzy się
semantyki denotacyjne dla języków programowania.
> Tymczasem w informatyce, jeżeli w ogóle jest jakaś podstawa dla innych konstrukcji,
to zwyczajowo była nią maszyna Turinga (i nie widzę powodu, żeby miała stracić ten
status) a akurat tam jest już koncepcja modyfikacji wartości. Głowica zapisująca nową
wartość w tym samym miejscu to właśnie operator przypisania.
Jeśli zapytamy, jaki model obliczeń jest współcześnie
najbardziej rozpowszechniony i najlepiej zrozumiany, to prawdopodobnie
tym modelem obliczeń będzie arkusz kalkulacyjny: jest bardzo duża
rzesza osób, które umieją korzystać z arkuszy kalkulacyjnych,
a które nawet nie wiedzą, że to jest programowanie.
Ten model obliczeń charakteryzuje się tym, że nie ma w nim
przepływu sterowania ani operacji przypisania. Jest dużo
prostszym modelem od maszyny von Neumanna, choć oczywiście
nie wszystko da się w nim zrealizować. (Ale można w nim robić
np. takie programy, jak sieci neuronowe. I wspiera obliczenia na
GPGPU)
Model podstawieniowy jest bardziej złożony od arkusza
kalkulacyjnego. Ale jest też bardziej uniwersalny w tym sensie,
że umożliwia tworzenie odrębnych komponentów i łączenie ich
ze sobą na różne sposoby.
Dobrym przykładem tego rodzaju kompozycjonalności są
potoki UNIXa. Co prawda programy, które łączy się w potoki,
takie jak sed czy grep, są napisane w sposób imperatywny,
ale same te programy nie polegają w żaden sposób na globalnym
stanie.
> W tym kontekście zamiast pytać, jaki jest koszt dodania operatora przypisania do
czegokolwiek, należałoby zapytać, jaki jest koszt udawania, że go może nie być.
> Otóż ten koszt to jest między innymi ta dyskusja. :-)
Tutaj nie chodzi o to, że operatora przypisania ma nie być.
Chodzi o to, żeby nie używać go wtedy, kiedy to nie jest konieczne.
Programy, które nie polegają na globalnym stanie, analizuje
się łatwiej - i to przede wszystkim analizuje się je łatwiej
osobom, które muszą pracować z zastanym kodem, czyli
programistom. W językach takich jak C istnieją idiomy, które
pozwalają ograniczać zasięg instrukcji przypisania do
minimum (np. pętle for z iteratorem), ale one istnieją
właśnie dlatego, że modyfikacje globalnego stanu są
kłopotliwe.
> > To dobra książka, naprawdę.
>
> https://cemerick.com/2009/03/24/why-mit-now-uses-pyt
hon-instead-of-scheme-for-its-undergraduate-cs-progr
am/
Nie wiem co miałoby z tego linka wynikać dla tej dyskusji.
> Wracając do tematu: jeżeli operator przypisania jest problemem w Scheme, to jest to
problem w Scheme. W językch imperatywnych ten operator nie jest problemem, tylko
integralną częścią języka. A narzędzi analitycznych to w ogóle nie komplikuje,
naprawdę.
Owo ustalenie, że stosowanie operatora przypisania (oraz operatów
wyrażających przepływ sterowania) komplikuje
środki analizy programu, dotyczy wszystkich języków, w których
procedury mogą przyjmować argumenty i zwracać wartości.
Dotyczy zatem takich języków, jak Java, C++, JavaScript,
Pascal, PHP, Perl, Python i wielu innych.
> > > Nadal nie wiem, czy trzeba zmienić język, żeby pisać lepiej.
> >
> > Też nie wiem. Ale jeżeli idzie o mnie, to nie umiem pisać
> > w C++ kodu tak, żeby być z niego zadowolonym.
>
> Mi się zdarzyło.
A to z chęcią bym zobaczył ;]
> Natomiast przyznam, że moje własne niezadowolenie z języka C++ skierowało mnie ku
nauce Ady. I paradoksalnie, mój C++ się wtedy też poprawił.
Nie wiem co miałoby w tym być paradoksalnego - nauka nowych języków
programowania daje nam nowe perspektywy na to, czym ogólnie jest
programowanie. Akurat dla mnie ciekawie byłoby się dowiedzieć,
czego się można nauczyć od Ady, bo nie miałem z nią żadnej styczności.
W quorowym artykule, który wcześniej podlinkowywałem ("what are some
examples of bad code"), dlatego nie zawarłem dobrej implementacji
w C++, że naprawdę nie wiedziałbym, jak się za to zabrać.
Mógłbym napisać "Haskella w C++", ale nie wiem, czy to by było
zgodne z "duchem C++" (jeżeli ten język w ogóle ma jakiegoś ducha)
> > Wydaje mi się, że pytanie "czy C++ jest dobry do nauki"
> > to trochę mało. Raczej należałoby zapytać, czy dane materiały
> > dydaktyczne są dobre, albo czy określona metodologia nauczania
> > jest skuteczna.
>
> Tak, to prawda. Ale znam ludzi, którzy twardo stosują C++ jako platformę do nauki
programowania i struktur danych. Myślę, że przy odpowiednim prowadzeniu to nie jest
zły pomysł.
> Ale sam osobiście poleciłbym nowicjuszom język Wolfram. Również dzieciom, jak im
się już Scratch znudził. C++ nie jest dobrym pierwszym językiem, chociaż może być
bardzo praktycznym językiem w późniejszej pracy czy innym realnym projekcie.
Jak dla mnie Wolfram pewnie byłby OK, gdyby był open-source'owy.
Następne wpisy z tego wątku
- 30.12.18 16:46 Mateusz Bogusz
- 30.12.18 18:08 s...@g...com
- 30.12.18 19:17 g...@g...com
- 31.12.18 08:18 Tomasz Kaczanowski
- 31.12.18 10:14 g...@g...com
- 02.01.19 09:41 Maciej Sobczak
- 02.01.19 09:48 Maciej Sobczak
- 02.01.19 10:17 Maciej Sobczak
- 02.01.19 10:53 Wojciech Muła
- 02.01.19 13:23 g...@g...com
- 02.01.19 13:42 g...@g...com
- 02.01.19 14:00 g...@g...com
- 03.01.19 09:37 Maciej Sobczak
- 03.01.19 09:44 Maciej Sobczak
- 03.01.19 09:57 Maciej Sobczak
Najnowsze wątki z tej grupy
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- 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
Najnowsze wątki
- 2025-01-17 Zniknął list gończy za "Frogiem". Frog się nam odnalazł?
- 2025-01-17 Kto wytłumaczy "głupiemu" prezydentowi Dudzie wielką moc prawną "dekretu premiera" TUSKA? [(C)Korneluk (2025)]
- 2025-01-17 Warszawa => Inżynier oprogramowania .Net <=
- 2025-01-17 Natalia z Andrychowa
- 2025-01-17 Gliwice => Business Development Manager - Dział Sieci i Bezpieczeńst
- 2025-01-17 Warszawa => System Architect (Java background) <=
- 2025-01-17 Warszawa => Full Stack .Net Engineer <=
- 2025-01-17 Gliwice => IT Expert (Network Systems area) <=
- 2025-01-17 Lublin => Programista Delphi <=
- 2025-01-17 Warszawa => Developer .NET (mid) <=
- 2025-01-17 Ostrów Wielkopolski => Konsultant Wdrożeniowy Comarch XL/Optima (Ksi
- 2025-01-17 Katowice => Senior Field Sales (system ERP) <=
- 2025-01-17 Wróblewo => Analityk finansowy <=
- 2025-01-17 Żerniki => Specjalista ds. Employer Brandingu <=
- 2025-01-17 pradnica krokowa