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.

Comments:

2015-09-06 17:04:11 = Kuba
{
Czy do wersji papierowej będzie dołączana również wersja elektroniczna? Chętnie zakupię książkę, ale czytać wolę na czytniku ;)
}
2015-09-06 17:06:22 = akrasuski1
{
13 tysiącach akapitów / 136 wysiącach wyrazów

coś krótkie te akapity ;D
}
2015-09-06 17:09:43 = K@mil
{
"136 wysiącach wyrazów" pierwszy błąd do bug bounty ;)
}
2015-09-06 17:17:15 = ja
{
s/znają/znajdą
}
2015-09-06 18:35:10 = Gynvael Coldwind
{
@Kuba
Dobra pytanie - spytam wydawnictwa.

@akrasuski1
Word (którym liczyłem te statystyki) wlicza również linie kodu w akapity ;)

@K@mil, @ja
Bomba, dzięki, fixed! :)
}
2015-09-07 09:38:53 = Radom
{
Gdzieś wyczytałem, że książka wychodzi 15 października. Chyba sobie zrobię prezent urodzinowy jeszcze w takiej cenie ~75 :)

Pozdrawiam
}
2015-09-07 22:26:49 = Kunegundek
{
No nareszcie ;-) kasa na książkę odlozona, w sam raz będzie na jesienne wieczory. Mam nadzieję że uda mi się dzięki niej na dobre wrócić do programowania.:-)
}
2015-09-08 13:09:07 = mgrzeg
{
Niemal rok już nas trzymasz w napięciu :) Ale warto, poczekam jeszcze trochę! Rozumiem, że 'sprawne (i poprawne) parsowanie danych binarnych' (vide http://gynvael.coldwind.pl/?id=547) znajdzie się w rozdziale IV i przykłady będą w pythonie? Odnośnie III - skupiasz się na jakimś konkretnym systemie (Linux / Windows), czy ogólnie z przykładami różnic? Ach zresztą, książka się pojawi, to sam przeczytam ;) Kasa już odłożona.
BTW - napisz kiedy / gdzie będziesz podpisywał swoją książkę, może jakieś spotkanie z autorem i promocja książki?

m.g.
}
2015-09-08 13:57:35 = Gynvael Coldwind
{
@Radom
Yup, w drugiej połowie października - natomiast niekoniecznie będzie to 15 ;)

@Kunegundek
Trzymam kciuki, żeby się podobała :)

@mgrzeg
Ad dane binarne: Tak - trzy z czterech rozdziałów z części IV są poświęcone głównie danym binarnym; większość przykładów jest w Pythonie, ale jest też kilka w C i C++ (Java też się pojawia, ale akurat nie w kontekście parsingu).

Ad część III: Skupiam się na Windows oraz systemach z rodziny GNU/Linux i przykłady dotyczą albo jednego, albo drugiego, albo obu rodzin systemów (+ trochę wyjaśnień ogólnych / ze wskazaniem na różnice).

Generalnie w całej książce staram się, żeby to co piszę / przykłady dotyczyły i GNU/Linux, i Windows (oczywiście tylko jeśli to ma sens; niektóre mechanizmy występują tylko w jednym z nich) :)

Ad kiedy / gdzie można mnie będzie spotkać: po premierze książki postaram się gdzieś pojawić w pierwszej połowie listopada, ale nie mam jeszcze konkretnych planów.
Prawdopodobnie będę też w połowie października (ale niestety na kilka dni przed premierą) na dwóch konferencjach w Polsce, ale tu jeszcze szczegóły muszę dograć, więc wrzucę posta jak tylko będzie coś ustalone.
}
2015-09-14 14:34:12 = Kili
{
Warto byłoby dodać chociaż opcję zakupu książka+wersja elektroniczna (oczywiście cena niższa niż suma kupowanych osobno ;) )
Wtedy bym i ja się skusił. Przydałyby się jakieś powiadomienia, choćby mailowe, że książka jest już dostępna w (przed)sprzedaży :)
}
2015-09-17 12:27:28 = jarekjal
{
nareszcie! biore w ciemno :)
}
2015-09-21 08:45:14 = Arek
{
super, dzieki za twoj czas poswiecony na pisanie. Wyglada ciekawie ja na pewno kupie jak bede w PL bo to przyjemnosc uczyc sie od najlepszych ;)
}
2015-09-21 10:44:12 = P0sh_b0y
{
Jak bedzie z dostepnoscia poza Polska? Bedzie dostepna w internetowych sklepach oferujacych wysylke na terenie Europy?
}
2015-09-21 11:44:12 = Gynvael Coldwind
{
@Kili
Co do wersji drukowanej+elektronicznej - z tego co się dowiedziałem, to niestety wydawca nie planuje obecnie takiej opcji. Zachęcam do wysłania mejla do wydawnictwa z poparciem takiej opcji :)
Co do powiadomień, hmm, zgoda, przydało by się. Szczerze, to liczyłem, że preorder zacznie się trochę szybciej (więc powiadomienie nie będzie potrzebne), ale... ostatecznie będzie to 1.10. Jeśli masz mojego bloga w RSS, ew. śledzisz mój oficjalny page na FB, to powinno wystarczy jako marny substytut powiadomienia mejlowego.

@jarekjal, Arek
Dzięki za zaufanie :)

@P0sh_b0y
Z tego co mi wiadomo książka będzie dostępna w Empiku, który prowadzi wysyłkę za granicę (koszty takie wysyłki to zupełnie inna sprawa niestety).
Natomiast jeśli by były z tym jakieś problemy, to daj znać, na pewno da się coś zaradzić.
}
2015-09-21 11:50:52 = P0sh_b0y
{
Z tego co widze Empik oferuje przesylke kurierska do UE za 60zl i mozna wziac do 20 ksiazek, wiec nie jest tak zle z dostawa. Bede mial wymowke by kupic troche polskich ksiazek :)
Az sie nie moge doczekac!
}
2015-11-18 09:10:10 = reg0
{
Trafiłem tu z facebooka, nie słyszałem wcześniej o tej książce, dlatego pytanie - do kogo jest ona adresowana?
}
2015-11-22 21:19:27 = Tomi Li Dżons (Pan Zbigniew)
{
Czy tam na stronie 28 juz drugi dzien i nie moge tego elegancko zrozumiec. Znalazlem taka komende: "program 2>&1" a pod spodem opis do tego:
"Przekierowanie standardowego wyjscia bledow na standardowe wyjsciA[...]" Ni chu.. z tego nie rozumiem. Jakie standardowe wyjsciA?? Moze jestem glupi i tego nie rozumiem ale chyba powinno byc "[...] na standardowe wyjsciE" Dziekuje za uwage i elegancko jest.
}

Add a comment:

Nick:
URL (optional):
Math captcha: 6 ∗ 10 + 10 =