Skocz do zawartości

Książka napisana; spis treści, podcasty


Recommended Posts

fragment okładki książkiJak wspomniałem już na mikroblogu na 4programmers.net, kilka dni temu moja książka („Zrozumieć Programowanie”) trafiła do pierwotnego składu - to znaczy, że jest już napisana i po edycji. Została ostatnia korekta i, już niedługo, druk. W tym poście chciałem napisać coś o książce, jak i również o podcastach do których chce wrócić.

O czym poniżej:
1. Książka - zawartość
2. Książka - kiedy będą udostępnione fragmenty
3. Książka - errata i „bug bounty”
4. Książka - serwis książki (plan)
5. Podcasty

Uprzedzając kilka pytań, mini FAQ
Q: Na półkach? A: Druga połowa października.
Q: Preorder? A: Za kilka dni powinien być. Będzie na samym początku października (przepraszam, kilka rzeczy się obsunęło).
Q: Okładka? A: Twardo-miękka (podobno jest coś w tym stylu).
Q: Wersja elektroniczna? A: Będzie! (Update: Ale dopiero kilka tygodni po wersji drukowanej)
Q: Cena? A: Jeszcze nie znam dokładnej; bezpieczne założenie - okolice 75 PLN. (Update: W preorderze ma być solidna zniżka btw; szczegóły niedługo)
Q: Target? A: Książkę pisałem z myślą o początkujących i średniozaawansowanych programistach.


Książka - zawartość

Ostatecznie wyszło ~548 stron maszynopisu, co przełoży się na około 500 stron po złożeniu. Książka jest podzielona na 5 części (w nawiasie podana liczba stron w maszynopisie):

Przedmowa (3 strony)
O napisanie przedmowy poprosiłem Mateusza "j00ru" Jurczyka, m.in. ze względu na naszą wieloletnią współpracę i jego doskonałą znajomość mojego stylu, ale również dlatego, że Mateusz był jednym z dwóch edytorów książki - a więc przedmowę napisała osoba, która przeczytała ją od deski do deski (na czym mi zależało).
(btw, jak tylko książka trafi do druku wrzucę post o zespole redakcyjnym - wielu osobom należą się solidne podziękowania)

Część I. Kilka codziennych czynności (29 stron)
Ostatecznie trafiły tu dwie „codzienne czynności”: użycie konsoli / interpretera poleceń, oraz jak podejść do analizy programów w językach, których się nie zna, lub programów napisanych przez innych ludzi w zupełnie innym stylu, niż tego, który znamy (w zasadzie opisałem kilka bardzo prostych trików).

Część II. Podstawy (132 strony)
Czyli: jak od strony programowania wygląda architektura komputerów (na podstawie tworzenia własnej maszyny wirtualnej z wytłumaczeniem co się skąd bierze, i jakie ma przełożenie na rzeczywiste architektury), a także bardzo dokładny opis kilku podstawowych typów zmiennych, łącznie z kodowaniami i wszystkimi konsekwencjami kodowań jakie tylko mogłem wymyślić (w szczególności polecam rozdział o liczbach pseudo-rzeczywistych - czyli float & co.).

Część III. Wykonywanie programu (107 stron)
Procesy (tworzenie i zarządzanie), wątki (jak w przypadku procesów) i synchronizacja (trafił tam m.in. opis jak działają spinlocki i mutexy na poziomie procesora / systemu operacyjnego - jest tam kilka ciekawych pułapek).

Część IV. Pliki i formaty danych (127 stron)
Pierwszy rozdział jest o systemie plików i interakcji z tymże (poza standardowymi czynnościami, trochę miejsca poświęciłem prawom dostępu, oraz temu, jak na nich operować programowo); kolejne trzy rozdziały to wstęp do formatów danych stosowanych w plikach, oraz dokładna analiza formatów BMP (jako przykład podejścia header+dane; tu wcisnąłem również wstęp do grafiki 2D) oraz PNG (jako przykład podejścia wykorzystującego „chunki”; całość „manualnie”, tj. bez libpng).

Część V. Komunikacja (109 stron)
Potoki, gniazda (UNIX, TCP/UDP), wiadomości (WinAPI), pamięć współdzielona, oraz krótki wstęp do sieci TCP/IP. Jestem zadowolony z przykładów dla TCP/UDP - są to, kolejno: implementacja prostego „resolvera” protokołu DNS (TCP/connect), implementacja czatu webowego, w tym prostego serwera HTTP (TCP/listen), oraz prosty, wieloosobowy czat peer-to-peer (UDP).

Na zakończenie książki jest również jeden dodatkowy rozdział:

Programowanie dla zabawy (15 stron)
Wymieniłem i krótko opisałem w nim trochę fajnych i ciekawych ćwiczeń, zadań, rodzajów konkursów itp. - czyli wszystko to, co na celu ma m.in. dobrą zabawę z programowaniem, a nie ma na calu tworzenia użytkowej aplikacji / biblioteki / itp.

Pełen spis treści znajduje się tutaj (jest to spis typu pre-release candidate - numery stron ulegną zmianie; nazwy części/podrozdziałów/rozdziałów też mogą delikatnie się zmienić):
Zrozumieć Programowanie - nieoficjalny spis treści

Przykłady w książce są tworzone w kilku językach; przede wszystkim jest to Python (moim obecnym zdaniem jest to najlepszy język na początek programowania; starałem się, żeby przykłady były kompatybilne z Python 2.7 oraz 3.4, natomiast w części przypadków jest to tylko Python 2.7), ale jest też sporo C, C++ i Java. Nawet trochę JavaScript i assemblerów się tam znalazło. Kodu w książce jest dużo.

Dużo jest też „ramek” dwóch rodzajów: [VERBOSE] oraz [BEYOND]. Celem tej pierwszej jest dokładniejsze przedyskutowanie czegoś, co pojawiło się w tekście, ale co programiści średniozaawansowami wiedzą i mogą spokojnie pominąć. Ramki [BEYOND] natomiast zawierają dodatkowe informacje, często wykraczające poza średni poziom książki - jestem przekonany, że nawet zaawansowani programiści znajdą w niektórych z nich coś ciekawego.

W większości rozdziałów są również ćwiczenia. Niektóre proste, inne mniej ;)

Stali czytelnicy mojego bloga którzy znają mnie trochę lepiej wiedzą, że nie potrafiłbym stworzyć książki bez eastereggów :) - tych trochę jest, i do tego mają formę CTFowych flag, które będzie można wprowadzać w serwisie książki; będzie też hall of fame.

Książka - kiedy będą udostępnione fragmenty

Razem z wydawnictwem udostępnimy darmowe fragmenty książki (jeszcze nie zdecydowaliśmy co/ile dokładnie; pewnie w okolicach jednego rozdziału) oraz oficjalny spis treści pod koniec września (tj. po korekcie).

Inne fragmenty pojawią się również w nadchodzącym numerze magazynu Programista, o czym jego redakcja wspominała już na swoim profilu na FB.

Oprócz tego mam pewną dobrą wiadomość - jakoś tak się stało, że kilka rozdziałów wypadło mi z książki (nie do końca mi pasowały do spisu treści, lub nie do końca miałem na nie dobry pomysł podczas pisania, a nie chciałem nic na siłę wrzucać), ale miałem je już albo skończone, albo prawie skończone/do dopracowania. Rozdziały te zostaną udostępnione (za darmo, dla wszystkich) w ciągu kilku najbliższych miesięcy, jak tylko znajdę chwilę żeby je dokończyć/wypolerować - o szczegółach poinformuje jak tylko będę coś więcej wiedzieć.

Książka - errata i „bug bounty”

Pisząc książkę robiłem solidną weryfikację faktów. Do tego j00ru książkę bardzo wnikliwie przejrzał (znajdując kilka niezłych błędów merytorycznych); książkę również przejrzało kilku reviewerów merytorycznych i testerów wyłapując kolejne błędy i niedociągnięcia (ten proces jeszcze trwa btw).

Niemniej jednak nie jestem na tyle naiwny by wierzyć, że w prawie 550 stronach (13 tysiącach akapitów / 136 tysiącach wyrazów / ponad milionie znaków) udało się wyłapać absolutnie wszystkie małe potknięcia czy większe błędy merytoryczne.

W związku z powyższym przed premierą książki pojawi się link do erraty, którą będę uaktualniał w miarę wykrywania kolejnych błędów (zarówno tych które znajdę sam, jak i tych które zostaną zgłoszone przez czytelników). W przypadku większych błędów, jeśli to będzie miało sens, postaram się również tłumaczyć jaka była ich geneza lub na czym dokładnie polegały. Nie zabraknie również podziękowań dla znalazcy (postaram się również o jakiś hall of fame tego typu). Wzorując się na pewnym znanym autorytecie, do pierwszej osoby, która zgłosi dany błęd merytoryczny, wyślę również (nie, nie czek z fikcyjnego banku) pocztówkę z podziękowaniami (jakoś tak lubię te pocztówki). Więcej informacji o erracie, jak i wzory pocztówek (będą customowe ofc) wrzucę bliżej premiery książki.

Książka - serwis książki (plan)

Chwilę przed premierą pojawi się też serwis książki, w którym (na ten moment) chciałbym mieć:

■ Erratę, miejsce do zgłaszania błędów, hall of fame.
■ Mini-forum, na którym będzie można podyskutować o książce (np. jak zrobić dane ćwiczenie, „co autor miał na myśli pisząc ...” itp.).
■ Linki do przykładowych kodów z książki, być może w dodatkowych językach programowania (tu być może zdam się trochę na Waszą pomoc).
Miejsce do wrzucania flag i hall of fame

Być może w serwis ten wplotę jakoś podcasty (nie za bardzo mam póki co gdzie jakieś info o nich umieszczać; poza serią reversecraft ofc - ta się dorobiła własnej strony).

Bliżej premiery książki będę mógł podać pewnie więcej informacji.

Podcasty

Jak wspominałem w video wrzuconym na początku sierpnia, planuję w ciągu 2-3 tygodni wrócić do aktywnego prowadzenia swojego kanału na YouTube. Będzie kilka zmian - np. postaram się, żeby forma była trochę bardziej wyszlifowana (bardziej podobna do dwóch ostatnich podcastów, które wrzuciłem).

Postaram się również zorganizować jakieś (faktycznie działające) miejsce, w które będzie można wrzucać swoje propozycję tematów podcastów i głosować na już wrzucone propozycje.

W każdym razie, zanim wrócę na dobre do podcastów, za kilka dni pewnie wrzucę out-of-bound odcinek o książce - jeśli macie jakieś konkretne pytania, na które chcecie, żebym odpowiedział, wrzućcie je w komentarze do tego posta.

Domyślam się, że kilka podcastów również będzie na konkretny temat poruszony w książce, szczególnie, jeśli okaże się, że coś niejasno / niezrozumiale wyjaśniłem w książce.

I tyle,

P.S. A poza tym mam nadzieję wrzucić w końcu coś technicznego na polską część bloga.

Wyświetl pełny artykuł

Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...