Co prawda nieśmiało wspominałem już w kilku miejscach o tym, że piszę książkę, ale do tej pory nigdzie na moim blogu nie wrzuciłem o tym żadnej oficjalnej informacji. Przyszedł czas by to nadrobić. W dużym skrócie: książka będzie nosić tytuł "Zrozumieć programowanie" i kieruje ją głównie do osób początkujących oraz średnio zaawansowanych zainteresowanych programowaniem (chociaż mam nadzieje, że osoby zainteresowane RE i bughuntem też dowiedzą się z książki czegoś co ich ciekawi, a przynajmniej zyskają wiedzę o oprogramowaniu, która jest potrzebna w tych dwóch działkach). Głównym moim celem jest aby po aktywnym (tj. z wykonaniem sugerowanych ćwiczeń/zadań) przeczytaniu książki czytelnik nabrał samodzielności w rozwiązywaniu problemów związanych z tworzeniem oprogramowania, potrafił poruszać się i analizować nieznany sobie kod bardzo dużych projektów, a także zyskał sporo praktycznej i szczegółowej wiedzy na tematy związane z różnymi składowymi programowania. Generalnie będzie technicznie, praktycznie, szczegółowo i niskopoziomowo - czyli dokładnie tak jak lubię i do czego (jak sądzę) przyzwyczaiłem czytelników mojego bloga.
Zanim przejdę do szczegółów, chciałbym napisać o czym książka NIE będzie:
- Nie będzie to tradycyjny kurs języka X - w książce na przemian korzystam z przykładów w kilku różnych językach (głównie Python, C, PHP, ale jest też trochę innych, w tym np. "asemblera Pythona" czy kodu maszynowego); jest też sekcja z garścią tipsów "jak czytać język programowania, którego się nie zna".
- Nie będzie to książka o algorytmach i strukturach danych (co prawda wspominam o kilku bardzo podstawowych, ale za dużo tradycyjnej algorytmiki/sd się tam nie znajdzie).
- Nie będzie to książka o wzorcach projektowych (kilka się przez książkę pewnie przewinie, ale nie skupiam się na tym).
- Nie będzie to również książka o projektowaniu oprogramowania.
- Nie będzie to też książka dla osób, które nigdy nie widziały kompilatora i nie skompilowały żadnego programu. Oczywiście, napisałem we wstępie, że kieruje ja głównie do osób początkujących, ale mam na myśli osoby, które już kilka krótkich (ale własnych) programików napisały i wiedzą co to jest IDE, edytor, kompilator.
- Nie będzie to jedyna słuszna książka do programowania - raczej myślę o niej w kategorii "książka, której celem jest wytłumaczyć w szczegółach to, co przeczytało się w innych książkach/kursach".
O czym więc będzie książka?
Najłatwiej w tym miejscu byłoby mi oczywiście wkleić spis treści, ale szczerze, to nawet jak wydaje mi się, że już w końcu mam finalną wersję, to i tak dzień później znowu w nim coś zmieniam. Więc, spis treści wrzucę za kilka tygodni. Póki co krótka lista tematów, które poruszam w książce (w losowej kolejności):
- "Hello World". Jak wiecie tradycyjne kursy (całkiem słusznie) kończą na powiedzeniu "i ten print/printf/puts/System.out.println/echo powoduje wyświetlenie się napisu na ekranie" - dla odmiany, ja w tym miejscu dopiero zaczynam. W rozdziale o "Hello World" staram się nauczyć czytelnika jak analizować "internalsy" implementacji standardowych bibliotek różnych języków oraz bytecode/kod maszynowy naszego programu, ale również jak radzić sobie z chaosem informacyjnym w który wpada się próbując taką analizę przeprowadzić. Ostatecznie celem jest dotarcie krok po kroku (funkcja po funkcji) do faktycznego pojawienia się pikseli w oknie konsoli.
- Podstawowy budulec programów - zmienne liczbowe, stringi i ich kodowanie, itp. - wszystko szczegółowo rozłożone na pojedyncze bity, wraz z omówieniem konsekwencji użytego kodowania i tego jak różne architektury czy języki radzą sobie z danym typem.
- Pliki, protokoły, formaty danych - sporo miejsca poświęcę na to jak sprawnie (i poprawnie) parsować i operować na danych binarnych otrzymywanych przez sieć, różnego rodzaju IPC, czy odczytywanych z plików. Nie zabraknie też hexedytorów.
- Będzie też o kompresji i serializacji, a także opiszę (w szczegółach) kilka typowych formatów plików i danych (ZIP, BMP, PNG, JSON, itp.).
- Sporo miejsca zejdzie też na sam CPU i logiczne elementy, z których składa się aktywnie działający program (włókna/wątki/procesy/etc). W takim miejscu nie może zabraknąć czegoś o IPC/socketach
- Jeden cały rozdział poświęcam również na to jak sobie radzić z problemami (tak tak, pisałem i mówiłem o tym w wielu miejscach, ale jeszcze raz nie zaszkodzi), w tym jak korzystać z debuggera i jak taki debugger działa. Trafi tam również trochę informacji o innych codziennych czynnościach i umiejętnościach skutecznego programisty - niektóre oczywiste, inne trochę mniej.
- Pod koniec książki chcę opisać trochę ciekawostek, takich jak stworzenia własnego VM, tworzenie małych exeków (think: intro 4k/64k/256), obsługa kilku myszek, etc. Nie do końca mam jeszcze sprecyzowane co tam chcę wrzucić, więc jeśli macie jakieś życzenia, to dajcie znać :)
(A, no i już we wstępie odpowiadam na odwieczne pytanie jak napisano pierwszy program, skoro nie było edytora. Spoiler: dziurkaczem)
Okładka
Okładka jest tworzona (widoczna wyżej wersja jest wersją beta) przez Sebastiana "Xa" Rosika, któremu chciałbym już teraz podziękować za czas, który na to poświęcił - THX!
Dla osób, którym nick "Xa" nic nie mówi - Sebastian jest grafikiem, a także programistą frontendowym, z którym często i od wielu lat współpracuje (m.in. moje logo oraz theme niniejszego bloga jest jego autorstwa). Braliśmy udział razem m.in. w różnych gamedev compo (czasem w towarzystwie innych osób), z których część nawet wygraliśmy (galeria screenów z naszych prac jest m.in. tutaj). O jednej z nich napisaliśmy razem z Xa (i Oshogbo) dość długi post, który trafił na nasze blogi.
Kiedy? Gdzie? Kto? Jak?
Kiedy: Dokładna data premiery nie jest jeszcze wyznaczona, ale będzie to prawdopodobnie pierwsza połowa 2015. Piszę "prawdopodobnie", ponieważ książka trafi do druku dopiero gdy będę zadowolony z jej jakości.
Autorzy: Ehm, ja.
Wydawca: Wydawnictwo Naukowe PWN
Ile stron: Nie wiem. Ale na pewno więcej niż 200.
Cena: Nie mam pojęcia, zależy od ilości stron.
E-book: Będzie!
Język: Polski. Tj. będę się starał, aby książka była napisana poprawnym językiem polskim (jak wiecie mam zwyczaj używać głównie angielskich określeń na techniczne rzeczy, ale postaram się używać polskich odpowiedników; natomiast odmawiam pisania "ekploatacja" o "eksploitacji" ;p).
Alpha/beta-testy: Kilka osób dało mi już znać, że chętnie pomogą w testach książki (thx!).
Techniczna recenzja: Mateusz "j00ru" Jurczyk volunteered as a tribute (thx!).
Za zgodą j00ru pozwolę sobie zacytować jego pierwszy feedback (dot. rozdziału "Hello World" o którym pisałem wyżej):
Mateusz: o shit
Mateusz: co ty wyprawiasz
Mateusz: :D
Mateusz: jedna strona:
Mateusz: print "Hello World!"
Mateusz: chwile dalej:
Mateusz: > grep -R --include=*.c PySys_GetObject . | grep -v "="
Mateusz: ./PC/bdist_wininst/install.c: DECLPROC(hPython, PyObject *, PySys_GetObject, (char *));
Mateusz: ./PC/bdist_wininst/install.c: if (!PyRun_SimpleString || !PySys_GetObject || !Py_OptimizeFlag)
I tym pozytywnym akcentem zakończę ten krótki post. W ciągu kilku tygodni postaram się wrzucić spis treści, a później jakiś przykładowy rozdział.
Dajcie znać co sądzicie o pomyśle ;>
2014-11-02:
Comments:
Co do tych polskich odpowiedników niektórych technicznych terminów to ja bym jednak został przy terminach przyjętych w środowisku czyli angielskich, no bo np. debbuger = odpluskiwacz? Eeee no tego nie da się czytać :P, a jak już to może chodziaż obok wersja angielska.
Zawsze na tym polu są spory aczkolwiek w tym fachu każdy chyba woli terminy których używają wszyscy na całym świecie niż specjalnie spolszczane ;).
Natomiast jak zrobisz tak będzie, książkę na pewno kupię!
BTW Widzę w innych komentarzach że nicki są linkami z urlem "http:///", straszny bug, wszyscy umrzemy!
"..pojawienie się pikseli w oknie konsoli" - dobry temat! wielu programistów potrafi pisać kod w jakimś języku wysokiego poziomu i korzystać z warstwa abstrakcji/gotowych bibliotek. Często jednak pomijają jak to działa od środka... a przecież każdego programistę powinno to interesować.
Zapowiada się ciekawa pozycja.
Po tytule przypomniała mi się od razu (nie wiem czy zamierzone to było) książka: Zrozumieć Asembler, która jest/była (ciężko ją kupić) świetnym wprowadzeniem do programowania, nawet jeśli nie programuje się bardzo niskopoziomowo.
W niektórych komentarzach brakuje tylko takiego "ale wiesz, no pressure" ;)
@qaz
Nie no, spokojnie, żadnych "odpluskwiaczy" czy "programów monitorujących" (też widziałem takie tłumaczenie) nie będzie.
Zastanawiam się co zrobić np. ze słowem string. Jedno z tłumaczeń to "łańcuch znaków", ale to trochę długie i raczej nieużywane. Są jeszcze "tekst" ("zmienna tekstowa"?) lub "napis". Natomiast trochę mnie ciągnie w kierunku angielskiego "string".
@agares
No idea, spytam wydawcę. Chciałbym, żeby był, ale to nie do końca ode mnie zależy.
Ad bug - yup, wszystkie nicki by default linkują początek światowej pajęczyny!
@Vetinari
Ortograficznymi mam nadzieję, że się korekta w wydawnictwie zajmie. Co do merytorycznych - puść mi mejla plz.
@DarkRAMZone
Mam nadzieję, że będzie dostępna poza PL (nie no, jeśli trafi do Merlina czy innego Empiku, to będzie - oni wysyłają za granicę).
@faramir
Hmmm, nie kojarzę tej książki. Zbieżność przypadkowa więc.
@en
Liczę, że czekasz na 2015, bo do 2015 to się niestety nie wyrobię ;)
BTW, ten "flying sharks" to w jakiej roli występuje ? ;]
Ja bym "string" zostawił, w wielu książkach są mieszane wszystkie trzy formy, albo na początku jest wyjaśnione, że łańcuch znaków to "string" i dalej autor tak będzie pisał, a w pewnym momencie jak podaje gdzieś prototyp jakiejś funkcji to i tak jest napisane ... "string" jak w każdej dokumentacji zresztą.
Mnie osobiście bardziej razi spolszczanie nazw na siłę, niż mieszanie języka polskiego z angielskimi terminami, które dla większości chyba są oczywiste :). No, ale ja jestem jeden, a czytelników będzie pewnie spora rzesza.
IMHO tak została "załatwiona" książka o wzorcach projektowych (Banda Czworga) wydana przez WNT, tak fatalnie mi się ją czytało, że załatwiłem sobie oryginalna wersję.
Analogicznie, zle sie czyta się kod z polskimi komentarzami i/lub polskimi słowami w kodzie ("na produkcji", chyba nigdzie tak się nie robi w sensownych firmach?).
A tak szczerze, IMHO najlepiej jakbyś to napisał dokładnie takim językiem jak używasz na blogu/w podcastach. Dobrze się to czyta, nie ma dziwnych kontrukcji, a jak ktos chce wejsc na powaznie w swiat IT, od nauki jezyka nie ucieknie.
Ad stegano: no ba :)
Ad "flying sharks": to jeden z "kotków" - patrz drobny druczek po prawej stronie mojego bloga na samym dole (czyli de facto na na górze strony vs ten komentarz ;p).
@qaz, WhiteLightning, abc, Dracoborg
Co do pojęć - zgoda! Natomiast nie chcę też przesadzić w drugą stronę i pisać Ponglishem przełamywanym j. Polskim.
Hmmm... w sumie jak będę miał jakieś wątpliwości co do tłumaczeń, to będę wrzucał na bloga zapytania o opinię ;)
Co do polskich komentarze, to jeszcze się zastanowię. Komentarze w kodzie funkcji w książce to nie do końca te same komentarze, które są w prawdziwym kodzie. Te pierwsze pisze się dla początkujących programistów, te drugie dla profesjonalnych programistów.
Póki co w przykładach nie miałem jeszcze za dużo komentarzy, więc decyzja czy będą po PL czy po EN jeszcze przede mną.
@Szkuner, Matej
:)
@Prog4mer
Powiem tak: zobaczymy ile wyjdzie, ale patrząc na to co mam i co jeszcze chce mieć, to to zdecydowanie będzie więcej niż 200 stron.
Co do ksiazki jeszcze jedno pytanei, planujesz moze opisac jak wyglada proces stworzenia i wydania wlasnej ksiazki?
Czy jest szansa załapać się na testy książki ?
Jak na moje to bym używał tyle angielskich nazw ile używa się w życiu codziennym w pracy w polskiej firmie, IRC'u etc.
Bardzo ciekawe i jak wszyscy nie mogę się doczekać :)
Ad proces tworzenia książki: hmm, mogę potem (tj. po faktycznym wydaniu książki) napisać jak to wyglądało z mojej strony, czemu nie.
Ad nazwy zmiennych: zgoda; w książce są po angielsku ;>
@programista zaczynający od c++
Nah, raczej podążamy (z PWNem) tradycyjną drogą - tj. książkę/e-book/pdf będzie można kupić za pewną (jeszcze nieznaną, ale typową dla takich książek) ilość złotówek.
Fragmenty pewnie udostępnimy, tak żeby nie kupować kota w worku.
@Rumpelstiltskin
Też zapomniałeś dodać "ale no pressure" ;)
Ad testy - w zasadzie listę testerów już zamknąłem, ale puść mi mejla - gdyby ktoś się wycofał to Cię wrzucę na listę.
(Hehe moja żona żartem (I hope) stwierdziła, że nie mogę mieć za dużo testerów bo sobie cały target docelowy wyczerpie ;p)
Ad angielskie nazwy: Yep, do tego będę dążyć.
Ad okładka: Ba, Xa robi świetne rzeczy! Ad hardcover - jak tylko będę coś wiedział w tej kwestii to dam znać.
@Dracoborg
Hah, sam jestem ciekaw końcowego efektu :)
@Piotr
;)
try {
DrukarkaManager manager = new DrukarkaManager();
Drukarka drukarka = manager.getDrukarka();
ArrayList paragons = drukarka.getParagons()
} catch (DrukarkaNieIstniejeException e) { /* ... */ }
Autentyk - zatłukłbym słownikiem człowieka, który to napisał, ale na jego szczęście już u nas nie pracuje :)
Co do spolszczania to mam jedną prośbę - nie rób tego :)
Skoro to ma być pozycja skierowana do programistów to każdy powinien wiedzieć czym jest string, event, listener itp.
Takie słownictwo dla ludzi z zewnątrz może być niezrozumiałe i świadczyć może o zadufaniu, przesiąknięciu korpomową - nie wiem czemu, ale często tak reagują - nie rozumiem i nie chcę zrozumieć.
Wiem za to jedno - takie konstrukcje skracają dystans i ułatwiają komunikację w, chcąc nie chcąc, międzynarodowym środowisku (nawet pracując dla polskiego klienta, w polskiej firmie i tak większość czasu czyta się angielskie manuale, angielskie blogi czy taki stackoverflow.com).
Jak drugi programista mówi do mnie "podbinduj listenera do eventu" to blondynka z dużymi... oczami przy stoliku obok patrzy na niego jak na idiotę, a ja w myślach widzę
event.bind(listener),
a co bym zobaczył jakby mi powiedział "podłącz funkcję reagującą na zdarzenie, do zdarzenia" - blondynka dalej nie byłaby zainteresowana, a prawdopodobnie ja również straciłbym zainteresowanie rozmową, bo wymagałaby dodatkowych/niepotrzebnych wysiłków umysłowych, żeby przetłumaczyć na angielski/kod to co do mnie powiedział, czyli de facto odwrócić proces myślowy jaki towarzyszył mojemu rozmówcy zanim to powiedział :)
Liczę na jakąś promocję przy zakupie druk+ebook, bo do czytania w autobusie to tylko ebooki, ale zawsze staram się mieć też wersję papierową książek, do których warto wrócić, bo ebooki ciężko się kartkuje jak się czegoś szuka :)
No i oczywiście no pressure, take your time... but hurry up!!! :)
Z drugiej strony nadmiar angielskich slow moze odstraszyc potencjalnych klientow.
Jakbyś miał problem z testerami (chociaż wątpię), to i ja chętnie bym pomógł, a na razie czekam z niecierpliwiony.
Zapowiada się rewelacja!
Jest nadzieja, ze kiedys zrobisz taka liste?
Na szybko - druga połowa posta http://gynvael.coldwind.pl/?id=427 (uh, tak, wiem, lista jest dość uboga).
Zgoda, zgoda ;)
Wrzucę za kilka dni mini-post z kilkoma słówkami nad których tłumaczeniem muszę sie dłużej zastanowić.
Co do promocji ebook+papier - to w zasadzie pytanie do PWN (na pewno nie zaszkodzi, jeśli ich o to zapytasz ;>).
@dynamo
Taak, generalnie trzeba znaleźć balans. Póki co taką zasadą, którą staram się kierować, jest: jeśli polska wersja słowa faktycznie jest używana w środowisku, to jej użyje; jeśli jednak korzysta się z angielskiego terminu lub bezpośredniego spolszczenia, to będę używał tej wersji. Jest to o tyle problematyczne, że środowisk jest dużo i w każdym się inaczej mówi ;)
@Rumpelstiltskin
Hmm, może i jakieś wspomnienie się znajdzie - zobaczę. TBH mało na floating pointsach operuje (tzn. tyle co zwykle), więc bardziej mnie zawsze MHz/GHz procesora + timingi podstawowych operacji interesowały (niekoniecznie arytmetycznych) niż flopsy. Ale dla pewnie dla "kompletności" i o tym wspomnę.
@a1
Cool! :)
@K@mil
@Ciapol
Ad testy - jak pisałem wcześniej - mam komplet, ale jeśli ktoś by się wyłamał, to... puśćcie mi mejla plz :)
@gemGreg
O, cześć ;) Cool!
@mgrzeg
Haha, OK ;)
Póki co spróbuje jedną skończyć - a nuż się uda ;>
@Łukasz
Me too ;)
Tzn. w jakim środowisku/języku ją tworzysz (Word/LateX)?
Thx ;)
@Quirinnos
Ah, dobrze, że przypominasz. Pingnę PWN czy da się to zorganizować jakoś.
@czytelnik
Google Docs, z uwagi na dwie rzeczy:
- bardzo ułatwioną współpracę z innymi osobami (redaktorami/recenzentami/testerami) - klikam "share" i już mogą komentować - zero dodatkowego softu, uczenia się LaTeXa, etc
- dostęp do książki z dowolnego komputera bez synchronizacji plików
Są też wady tego rozwiązania, które staram się na bieżąco zgłaszać jako bugi ;)
/gdzies?
Niestety, wolno mi idzie więc dopiero w drugiej połowie 2015 się pojawi.
i zdziwiła mnie reakcja jednego z użytkowników.
http://cpp0x.pl/forum/temat/?id=4756&p=508
Cóż, różni ludzie różnie patrzą na programowanie (a w zasadzie na dowolne zajęcie). Niektórzy traktują je czysto użytkowo (a nawet, cytując podlinkowaną wypowiedź, "trochę jako poświęcenie"), a innych (parafrazując) fascynuje jak zrobić daną rzecz na N-ty sposób.
Raczej nie ma w tym nic dziwnego imo ;)
Widzę, że zapowiada się świetny tytuł...
Na pewno z chęcią kupię i przeczytam.
Zawsze chciałem poznać wszystko
co dzieje się w programach od podszewki...
A co ważne dla mnie, będę mógł się w końcu nauczyć
czytać zawartość standardowych bibliotek w C++ :D
Czy będzie tam zawarte coś w stylu,
że będziemy przechodzić przez
paradygmaty programowania
i poznawać je od strony
asembler-owej / kodu maszynowego,
bądź pisanie programu w edytorze
szesnastkowym jak to na początkach było?
Jak i czy będzie temat taki w stylu:
"Notatnik też wykonuje obliczenia."?
Aż mam wypieki na twarzy,
myśląc o tym co będzie w niej zawarte.
BTW
Widzę, że post stary, więc się pytam:
Jak poszły prace nad nią przez ten czas?
Add a comment: