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:
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:
coś krótkie te akapity ;D
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! :)
Pozdrawiam
BTW - napisz kiedy / gdzie będziesz podpisywał swoją książkę, może jakieś spotkanie z autorem i promocja książki?
m.g.
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.
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 :)
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ć.
Az sie nie moge doczekac!
"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: