-
X-Received: by 2002:a37:9b05:: with SMTP id d5mr37784qke.7.1546355741792; Tue, 01 Jan
2019 07:15:41 -0800 (PST)
X-Received: by 2002:a37:9b05:: with SMTP id d5mr37784qke.7.1546355741792; Tue, 01 Jan
2019 07:15:41 -0800 (PST)
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit
0.net!news.mixmin.net!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!v
55no8555259qtk.0!news-out.google.com!m21ni10694qta.0!nntp.google.com!v55no85552
52qtk.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.programming
Date: Tue, 1 Jan 2019 07:15:41 -0800 (PST)
Complaints-To: g...@g...com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=31.0.66.32;
posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r
NNTP-Posting-Host: 31.0.66.32
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <0...@g...com>
Subject: Uwagi odnośnie książki Stroustrupa
From: g...@g...com
Injection-Date: Tue, 01 Jan 2019 15:15:41 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Xref: news-archive.icm.edu.pl pl.comp.programming:213112
[ ukryj nagłówki ]Wczoraj Tomek Kaczanowski polecił tu książkę do nauki programowania
spod pióra Stroustrupa pt. "Programowanie. Teoria i praktyka
z wykorzystaniem C++".
Choć swoimi pierwszymi wrażeniami już się zdążyłem podzielić,
pomyślałem sobie, że nie zaszkodziłoby przedstawić nieco bardziej
dogłębną analizę moich przekonań dotyczących podejścia, jakie
Stroustrup w niej reprezentuje.
Przykładowy rozdział, który można podejrzeć na stronie Helionu,
a konkretniej rozdział szósty, zatytułowany "Pisanie programu",
dotyczy "prezentacji procesu myślowego, który ma miejsce
podczas wytwarzania oprogramowania".
Stroustrup twierdzi (skądinąd słusznie), że pisanie programu
należy zacząć od sformułowania probelmu, który program ma rozwiązać.
Problemem, jaki Stroustrup stawia, jest domniemana niewiedza
czytelnika, zaś jako rozwiązanie proponuje "program zmuszający
komputer do wykonywania typowych działań arytmetycznych
na wyważeniach, które mu podamy".
Stroustrup nalega również, żeby program działał w "oknie konsoli",
ponieważ wyjaśniał we wcześniejszych rozdziałach "jak posługiwać się
strumieniami `cin` i `cout`, a graficzne interfejsy użytkownika (GUI)
zostaną opisane dopiero w rozdziale 16".
Każdy, kto uczył się Pythona z tutoriala Guidona van Rossum,
zapewne pamięta, że jedna z początkowych sekcji nosi tytuł
"Using Python as calculator". Programiści Pythona raczej
nie byliby szczególnie zainteresowani problemem dydaktycznym,
który proponuje Stroustrup, ponieważ wiersz poleceń w Pythonie
już jest "takim kalkulatorem, tylko lepszym".
Jak możemy się domyślać, Stroustrup proponuje początkującemu
czytelnikowi raczej ciężką i niewdzięczną drogę: oto bowiem
zostajemy rzuceni w wir tokenizacji i parsowania (a dodatkowo
mistrz wymaga od swoich uczniów, żeby pojedyncze wyrażenia mogły się
rozciągać na wiele linii, żeby początkującemu nie było za łatwo).
Innymi słowy, Stroustrup chce, żebyśmy na początku naszej drogi
programistycznej nauczyli się w lichy sposób rozwiązywać szereg
problemów, które nie są ani trochę interesujące z perspektywy
zastosowania komputera, których lichość będzie nas prześladować
w przyszłości, i których można by było w ogóle uniknąć.
Nietrudno się domyślić, skąd bierze się takie przekonanie.
Twórcy języka C byli jednocześnie autorami systemu operacyjnego
UNIX. Mieli świadomość, że opracowany przez nich system jest
kompromisem, którego główną cechą ma być przede wszystkim
prostota implementacji i przenośność. Stąd też w UNIXie "wszystko
jest plikiem", zaś pliki to po prostu ciągi bajtów, które
można odczytywać i zapisywać wywołaniami systemowymi "read"
i "write". Dotyczy to w takim samym stopniu danych zapisanych
lokalnie na dysku, jak i urządzeń czy innych komputerów.
Najbardziej rozpowszechniona forma grupowania bajtów
polega na oddzielaniu ich znakiem nowej linii. Na tym
założeniu opiera się większość narzędzi uniksowych, takich
jak `grep`, `sed` czy `tail`. Niestety, to założenie nie pozwala
nam tworzyć "złożonych złożoności". Do tego celu służą jednak
takie pomysły, jak zgrupowany hierarchicznie system plików.
Używanie tego mechanizmu jest jednak do wielu rzeczy
niewygodne. Czasem wolimy zapisać złożoną teksturę w pliku
tekstowym, ponieważ taki plik łatwiej wyświetlić na ekranie,
przesyłać i edytować.
Jednak jeśli zdecydujemy się na taki krok, doświadczymy
pewnych komplikacji:
- musimy mieć sposób konwersji danych z pliku tekstowego
do postaci drzewa (parser)
- dajemy sobie możliwość budowania wadliwych struktur (błędów
składniowych)
Pomimo tych niedogodności, taki model dobrze się rozpowszechnił.
Stroustrup natomiast uznał go za ostateczną prawdę, i wybudował
mu ołtarz w postaci języka C++.
Jeśli ktoś poszukuje całościowego modelu alternatywnego względem
tego z UNIXa, to dobrym przykładem jest środowisko Smalltalka
(np. Pharo albo Squeak). Stworzenie aplikacji kalkulatora dla takiego
środowiska jest znacznie przyjemniejszym ćwiczeniem dla początkujących
osób, niż studiowanie gramatyk BNF (i z funkcjami graficznymi
nie trzeba czekać "do rozdziału 16").
Warto też zapoznać się z s-wyrażeniami języka LISP: jest to składnia
dużo prostsza do parsowania nawet od tego głupiego kalkulatorka,
któremu Stroustrup poświęca tak dużo miejsca, a jej dodatkową
zaletą jest to, że jest to lekki i uniwersalny format serializacji,
którego można używać np. wszędzie tam, gdzie stosuje się XML
(stanowi uniwersalne rozwiązanie zagadnienia "złożonych złożoności").
A co najważniejsze, można ten problem parsowania rozwiązać raz
i dobrze i się nim więcej nie przejmować, a nie wmawiać początkującym,
że to na tym polega programowanie. (Można też ten problem całkowicie
zignorować, i od początku skupić się na bardziej interesujących
zagadnieniach, jak choćby nawet różniczkowanie symboliczne - Stroustrup
nie konstruuje przecież w swojej książce parsera dla C++a, tylko
dla wyrażeń arytmetycznych.)
Czasem zamiast rozwiązywać jakiś problem, lepiej go ominąć.
Podobnie jak tę książkę.
Najlepszego wszystkim w nowym roku.
Następne wpisy z tego wątku
- 02.01.19 02:28 fir
- 02.01.19 06:41 s...@g...com
- 02.01.19 07:13 g...@g...com
- 02.01.19 07:40 g...@g...com
- 02.01.19 08:17 Tomasz Kaczanowski
- 02.01.19 10:37 Maciej Sobczak
- 02.01.19 12:42 fir
- 02.01.19 12:44 g...@g...com
- 02.01.19 13:44 fir
- 02.01.19 15:25 g...@g...com
- 02.01.19 15:55 g...@g...com
- 02.01.19 16:34 fir
- 02.01.19 16:59 fir
- 02.01.19 17:39 g...@g...com
- 03.01.19 10:14 Maciej Sobczak
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 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 <=
- 2024-11-08 Warszawa => Data Scientist / Data Engineer (predictive modelling) <=
- 2024-11-08 zbrojone wężyki hamulcowe
- 2024-11-07 Pytanie o transformator do dzwonka
- 2024-11-07 Warszawa => Infrastructure Automation Engineer <=