Podczas live na YT opowiadałem o wielu książkach przydatnych dla programistów embedded. Nagranie możesz znaleźć tutaj.

Natomiast poniżej przygotowałem dla Ciebie listę książek, które omawiałem podczas tego live wraz z podziałem na kategorie, kilkoma słowami opisu i linkami do księgarni online.

Lista będzie jeszcze rozbudowywana, a jeżeli brakuje Ci na niej jakiś pozycji – zapraszam do kontaktu.

Spis Treści

Programowanie w C

Na początek fundamentalna umiejętność programisty embedded, czyli język C. Niestety nie znam godnych polecenia książek o języku C i skupiających się na zaawansowanych tematach (na tej liście pojawią się jeszcze książki, gdzie trochę kodu C jest przy okazji). Dlatego tutaj umieściłem pozycje do początkowej nauki.

Język ANSI C – Brian W. Kernighan, Dennis M. Ritchie

Klasyka gatunku – książka autorstwa twórców języka C. W internecie znana jako K&R od pierwszych liter nazwisk autorów. Na pierwszą książkę do nauki jest chyba zbyt trudna jak na dzisiejsze czasy. Szybko przechodzimy do skomplikowanych zagadnień, a kod nieraz jest pisany w starym stylu z wieloma operacjami w jednej linii. Jednak po ogarnięciu zupełnych podstaw sprawdzi się doskonale. Poza tym tą książkę po prostu wypada znać w naszej branży.

Okładka książki/ebooka Język ANSI C. Programowanie. Wydanie II

https://helion.pl/ksiazki/jezyk-ansi-c-programowanie-wydanie-ii-brian-w-kernighan-dennis-m-ritchie,jansiv.htm#format/d

Mikrokontrolery AVR. Język C – podstawy programowania – Mirosław Kardaś

Książka znana w internecie jako bluebook. Jest zupełnym przeciwieństwem K&R, ponieważ jest pisana z myślą o osobach zaczynających przygodę z C i mikrokontrolerami. Wszystko jest tłumaczone na chłopski rozum. Bluebook z kolei jest krytykowany za zbytnie uproszczenia i promowanie różnych praktyk programistycznych nie nadających się do komercyjnego kodu. Jednak książka służy do początkowej nauki i w tej roli sprawdza się świetnie. Zanim zostaniemy zawodowymi programistami mamy potem jeszcze czas na nauczenie się pisania zgodnie ze sztuką.

Okładka książki/ebooka Mikrokontrolery AVR. Język C - podstawy programowania.Wydanie II poprawione i uzupełnione

https://helion.pl/ksiazki/mikrokontrolery-avr-jezyk-c-podstawy-programowania-wydanie-ii-poprawione-i-uzupelnione-miroslaw-kardas,a_02xx.htm#format/d

Learn C the hard way – Zed A. Shaw

Książka ucząca C na przykładach z minimalną ilością teorii. Każdy rozdział zawiera program w C, a jego działanie jest tłumaczone przez autora na bieżąco. Do mnie taki sposób minimum teorii maksimum praktyki nie przemawia, ale na pewno warto wspomnieć o tej książce ze względu na odmienne podejście do nauki języka.

Okładka książki/ebooka Programowanie w C. Sprytne podejście do trudnych zagadnień, których wolałbyś unikać (takich jak język C)

https://helion.pl/ksiazki/programowanie-w-c-sprytne-podejscie-do-trudnych-zagadnien-ktorych-wolalbys-unikac-takich-jak-jezy-zed-a-shaw,pcspry.htm#format/d

Język C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji. – Tomasz Francuz

Książka Tomasza Francuza zbiera wiele pochlebnych opinii i może być dobrym zamiennikiem dla bluebooka. Podobnie jak tam, uczymy się C jednocześnie z AVRami. W ten sposób uczymy się od razu większego zestawu umiejętności potrzebnych programiście embedded.

Okładka książki/ebooka Język C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji. Wydanie II

https://helion.pl/ksiazki/jezyk-c-dla-mikrokontrolerow-avr-od-podstaw-do-zaawansowanych-aplikacji-wydanie-ii-tomasz-francuz,jcmika.htm#format/d

Język C. Szkoła programowania – Stephen Prata

Kolejna klasyczna pozycja polecana do początkowej nauki języka C. Jest to wielka cegła na 1000 stron zdecydowanie dłuższa od pozostałych książek, które polecam do nauki C.

Okładka książki/ebooka Język C. Szkoła programowania. Wydanie VI

https://helion.pl/ksiazki/jezyk-c-szkola-programowania-wydanie-vi-stephen-prata,jcszp6.htm#format/d

Mikrokontrolery

Programowanie niskopoziomowe dzieje się na styku kodu i zależności hardware’owych. Dlatego podczas początkowej nauki powinniśmy szybko dowiedzieć się czegoś o działaniu procesora, peryferiów i możliwościach mikrokontrolerów. Na dalszym etapie tą wiedzę czerpiemy raczej z dokumentacji układów. Tego typu książki często też się deaktualizują ze względu na nowe procesory, biblioteki i edytory kodu. Jednak na początek mogą na pewno pomóc.

Książki Mirosława Kardasia i Tomasza Francuza uczą C na przykładzie mikrokontrolerów AVR i pasują również do tej kategorii.

Mikrokontrolery STM32 w praktyce – Krzysztof Paprocki

To była pierwsza książka, z której uczyłem się pisać na army. Niestety na dzień dzisiejszy już bym jej nie polecał, ponieważ została wydana w 2011 roku i przez ten czas bardzo dużo się zmieniło jeżeli chodzi o biblioteki HAL, doszło CubeIDE i nowe rodziny procesorów STM32. Lepiej sięgnąć po książki Marka Galewskiego, które omawiam poniżej.

https://cdn2.botland.com.pl/12397-pdt_540/mikrokontrolery-stm32-w-praktyce-krzysztof-paprocki.jpg

https://botland.com.pl/ksiazki-o-mikrokontrolerach/3403-mikrokontrolery-stm32-w-praktyce-krzysztof-paprocki-9788360233528.html

STM32. Aplikacje i ćwiczenia w języku C z biblioteką HAL – Marek Galewski

Kolejna książka o STM32. Autor jest wykładowcą akademickim, a ćwiczenia z książki mocno przypominają laborki. Znajdziemy w niej wszystko, co powinno być w tego typu pozycji – konfigurację środowiska, przykładowe projekty, omówienie peryferiów i kod oparty na bibliotekach producenta.

https://kamami.pl/arm/574871-stm32-aplikacje-i-cwiczenia-w-jezyku-c-z-biblioteka-hal.html

Programowanie w C++

U mnie przygoda z C++ zaczęła się przy okazji nowego projektu i musiałem szybko nadrobić braki. Do tej pory pracowałem głównie z C. Książki o C++ bardzo mi w tym pomogły. Dobrych książek o C++ jest bardzo dużo, a ja tu podam tylko kilka pozwalających szybko wejść w temat, jeżeli kiedyś również będziesz mieć potrzebę szybkiego „przebranżowienia”.

The C++ Programming Language – Bjarne Stroustrup

Książka Bjarne, czyli autora języka C++ omawia wszystkie elementy składni C++. Przy okazji jest tam fajnie przedstawiony sposób myślenia programisty C++ oraz analogie i różnice w porównaniu z C. A także różnice między starym C++, a nowym (czyli od standardu C++11 wzwyż).

Wersja polska – Helion

Wersja angielska – Amazon

A Tour of C++ – Bjarne Stroustrup

Druga książka tego samego autora, która fajnie uzupełnia poprzednią. Jest dużo krótsza i pokazuje jak działa składnia C++. Bardzo dobrze sprawdza się jako ściąga, kiedy chcemy sobie coś szybko przypomnieć.

Wersja polska – Helion

Wersja angielska – Amazon

Effective Modern C++ – Scott Meyers

Kiedy już potrafimy swobodnie pisać w C++ polecam zabrać się do lektury książek Scotta Meyersa. Seria Effective C++ zawiera kilka części i każda z nich charakteryzuje się wielką dbałością o detale i wniknięciem głęboko w szczegóły składni. Dzięki temu wyrobimy w sobie wyczucie, kiedy język może działać inaczej, niż nam się wydawało.

Okładka książki/ebooka Effective Modern C++. 42 Specific Ways to Improve Your Use of C++11 and C++14

Wersja polska – ebook Helion

Wersja angielska – papierowa Helion

O elektronice

Elektroniki uczyłem się na studiach i szło dosyć topornie. Na szczęście mieliśmy kilka semestrów i w końcu się nauczyłem. Na książki o elektronice trafiłem trochę później i z perspektywy czasu wiem, że dużo by mi rozjaśniły. Dlatego jeżeli nie chcesz popełniać moich błędów – polecam Oślą Łączkę do początkowej nauki, a potem Sztukę Elektroniki jako kompendium.

Sztuka Elektroniki – Paul Horowitz, Winfield Hill

Kolejna klasyczna pozycja. Dwuczęściowa biblia elektroniki w sumie na ponad 1000 stron. Nie polecam jej do początkowej nauki, ponieważ wiedza jest wyłożona w sposób akademicki. Lepiej się nadaje do szukania informacji o konkretnych układach, niż do lektury od deski do deski.

Wersja polska – Kamami

Wyprawy w świat elektroniki – ośla łączka – Piotr Górecki

Dla początkujących dużo lepszym wyborem będą książki z serii Ośla Łącza. Tam na prostych projektach składających się z kilku elementów poznamy działanie elektroniki.

Wydawnictwo AVT

Dla przyszłych juniorów

W ostatnich latach ukazało się kilka fajnych książek po polsku przybliżających codzienną pracę i obowiązki programistów. Dzięki temu przed wybraniem zawodu możesz wyrobić sobie zdanie, czy to jest dla Ciebie. Znajdziesz tam również porady dotyczące poszukiwania pierwszej pracy. Polecam poniższe dwie książki osobom szykującym się do pracy w zawodzie albo myślącym o przebranżowieniu.

Junior Developer – Mateusz Kupilas

Strona autora

Zawód: Programista – Maciej Aniserowicz

Zawód: Programista

Strona autora

Podejście do programowania

Kiedy masz już doświadczenie komercyjne, coraz większą wagę przykładasz do kwestii związanych z projektem. Bierzesz udział w formułowaniu wymagań, uczestniczysz w wyborze architektury, chcesz eliminować zbędną pracę, używać dobrych narzędzi. Jednym słowem dbasz o odpowiedni etos pracy. To wszystko wpisuje się w ruch Software Craftsmanship i istnieje trochę książek, których lektura ukierunkuje Cię na to, co jest naprawdę ważne.

Code Complete – Steve McConnell

Moja ulubiona książka programistyczna. Kolejna cegła na ponad 1000 stron. Książka porusza wszystkie możliwe tematy od zbierania wymagań, architektury przez czytelność kodu, optymalizację, aż do planowania czy umiejętności miękkich. Ciężko przeczytać ją od deski do deski, ale można sobie doczytać konkretne rozdziały, kiedy tego potrzebujemy.

Okładka książki/ebooka Kod doskonały. Jak tworzyć oprogramowanie pozbawione błędów. Wydanie II

Wersja polska – Helion

Wersja angielska – Amazon

Czysty Kod – Robert C. Martin

Na pierwszy rzut oka jest to książka o formatowaniu kodu i wybieraniu nazw. Ale Uncle Bob tłumaczy również tok myślenia, który powinien nam przyświecać, kiedy piszemy kod. Że lepiej usuwać złożoność niż ją dodawać. Większość zasad możemy przenieść do embedded mimo, że książka jest adresowana głównie do programistów obiektowych.

Okładka książki/ebooka Czysty kod. Podręcznik dobrego programisty

Wersja polska – Helion

Mistrz czystego kodu – Robert C. Martin

Kolejna książka Uncle Boba, tym razem skupiająca się bardziej na postawie programisty. Mamy tu na przykład rozmówki programisty z przełożonym wraz z analizą. Dzięki temu możemy się nauczyć asertywności i nie godzić się na fuszerkę aby wyrobić się z deadline’m.

Okładka książki/ebooka Mistrz czystego kodu. Kodeks postępowania profesjonalnych programistów

Wersja polska – Helion

Czysta Architektura – Robert C. Martin

Jeszcze jedna książka Uncle Boba, a tematem jest tym razem architektura. Książka bardziej skupia się na ogólnych zasadach, które sami musimy dopasować do swojego kontekstu. Co ciekawe – jest tam rozdział o architekturze embedded. Jest też biografia Uncle Boba, gdzie opisuje on wiele projektów, gdzie pracował również z HW.

Okładka książki/ebooka Czysta architektura. Struktura i design oprogramowania. Przewodnik dla profesjonalistów

Wersja polska – Helion

Pragmatyczny programista. Od czeladnika do mistrza – Dave Thomas, Andy Hunt

Książka, z której wziął się ruch Software Craftsmanship. Dowiemy się z niej dlaczego lepiej usuwać złożoność niż ją dodawać, jak możemy się wspomagać automatyzacją i jak szukać kompromisu między techniczną częścią projektu, a deadline’ami tak, aby się potem nie wstydzić.

Okładka książki/ebooka Pragmatyczny programista. Od czeladnika do mistrza. Wydanie II

Wersja polska – Helion

Software Craftsman – Sandro Mancuso

Jeszcze jedna książka o programistycznym rzemiośle. Dowiemy się z niej na przykład, dlaczego to, że kod działa nie oznacza jeszcze, że jest dokończony.

Okładka książki/ebooka Software Craftsman. Profesjonalizm, czysty kod i techniczna perfekcja

Wersja polska – Helion

Moja recenzja tej książki

Praca z zastanym kodem – Michael Feathers

Techniki radzenia sobie z wielkimi projektami, gdzie musimy wprowadzić zmiany, ale boimy się czegokolwiek tknąć. Autor daje wskazówki ogólne jaką strategię przyjąć i dzieli się technikami pomagającymi poradzić sobie z konkretnymi fragmentami kodu. Przykłady są głównie w Javie i C++ więc nie zawsze będziemy w stanie przenieść wszystko jeden do jednego. Polskie tłumaczenie tej książki nie jest zbyt udane i polecam wersję angielską.

Wersja polska – Helion (polskie tłumaczenie jest dosyć słabe)

Wersja angielska – Amazon

Wzorce projektowe

Wzorce projektowe to ogólne sposoby rozwiązywania programistycznych problemów niezależnie od konkretnej implementacji. Są wykorzystywane głównie w językach obiektowych, ale jeżeli trochę pokombinujemy – wiele z nich może być przydatnych również w C.

Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku – Erich Gamma, Richard Helm, Ralph Johnson, John Vlissidens

Klasyczna książka o wzorcach projektowych nazywana często GoF od Gang of Four – Banda Czworga (ze względu na czterech autorów). Każdy wzorzec zawiera omówienie wad i zalet, przykładowe zastosowania, z jakimi wzorcami się łączy, jakie mogą go zastąpić. Są też przykładowe implementacje w C++ i Smalltalku.

Okładka książki/ebooka Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku

Wersja polska – Helion

Design Patterns For Embedded Systems in C – Bruce Douglass

Książka próbująca przenieść schemat wyodrębniania i opisywania wzorców z GoF, jednak moim zdaniem nie wyszło to do końca dobrze. Część wzorców jest tworzonych na siłę np. przerwanie, debouncing, sekcja krytyczna. Mam wrażenie, że zamiast ułatwić pracę, mogą ją jedynie skomplikować. Dlatego tej książki nie polecam jakoś szczególnie. Można przeczytać bardziej jako ciekawostka. Może też coś się z czasem zmieni w tym temacie w embedded.

Wersja angielska – Amazon

Practical UML Statecharts in C/C++: Event-Driven Programming for Embedded Systems – Miro Samek

To jest książka o jednym konkretnym wzorcu projektowym, czyli o maszynie stanów. Jednak te maszyny są przedstawiane w wielu odsłonach. Autor tworzy sporo kodu do embedded opartego o maszyny stanu. Można poczytać więcej na jego stronie. Jest to ciekawe podejście do programowania i warto je znać, tylko trzeba uważać, żeby nadmiernie nie skomplikować prostego zadania.

Wersja Angielska – Amazon

Test Driven Development

Test Driven Development w branży embedded robi się coraz popularniejszy. Warto uczyć się tej techniki z dobrych źródeł, czyli od programistów, którzy ją z powodzeniem stosują. Niestety łatwo trafić na narzędzia do testowania i materiały promujące złe nawyki.

Test Driven Development for Embedded C – James Grenning

Jedna z ważniejszych dla mnie książek programistycznych. Pokazuje po kolei jak pisać zgodnie z TDD i jak wprowadzić go do projektów w firmie. Pokazuje różne typowe zastosowania i rozwiązania często napotykanych problemów. Przy okazji można się dzięki niej nauczyć refactoringu i systemów budowania projektów.

Wersja Angielska – Amazon

TDD. Sztuka tworzenia dobrego kodu – Kent Beck

Książka twórcy TDD – Kenta Becka. Jest dosyć krótka i opisuje technikę na przykładu aplikacji w Javie do liczenia pieniędzy. Jeżeli przeczytamy Grenninga, ta książka raczej nie będzie nam potrzebna.

Okładka książki/ebooka TDD. Sztuka tworzenia dobrego kodu

Wersja polska – Helion

O programowaniu embedded

Dosyć ciężko znaleźć książki stricte o programowaniu embedded, ale na szczęście jest kilka takich pozycji w języku angielskim. Nie skupiają się one na pojedynczej płytce, czy rodzinie procesorów, raczej uczą dobrych praktyk i pozwalają ustrzec się błędów systemowych.

The Art of Designing Embedded Systems – Jack Ganssle

Jack Ganssle jest konsultantem embedded od lat 80-tych i autorem wielu artykułów oraz wpisów na blogu i kilku książek. Art of Designing Embedded Systems to jedna z nich. Znajdziecie tam porady, aby radzić sobie ze złożonością projektów i zmniejszaniem liczby błędów. Polecam również stronę Jacka Ganssle.

Wersja angielska – Amazon

Making Embedded Systems – Elecia White

Autorka zajmuje się również podcastem embedded.fm i jest programistą embedded z 20-letnim doświadczeniem. Książka zawiera wskazówki dla bardziej zaawansowanych programistów i na bardziej ogólnym poziomie. Podobnie jak to było u Jacka Ganssle.

Okładka książki/ebooka Making Embedded Systems. Design Patterns for Great Software

Wersja angielska – ebook Helion

Systemy safety-critical

Głównym źródłem wiedzy o systemach safety-critical są normy. Jednak jest kilka książek, które mogą ją uzupełnić. Często nie skupiają się one tak mocno na aspektach technicznych, a bardziej na tym skąd biorą się błędy i dlaczego zostają niezauważone.

Embedded Software Development for Safety Critical Systems – Chris Hobbs

To najbardziej techniczna książka w tym zestawieniu. Zawiera wiedzę dla programistów systemów embedded specjalizujących się w safety-critical. Drugie wydanie tej książki powinno ukazać się jesienią 2021, więc jeśli planujesz zakup, może warto na nie poczekać.

Wersja angielska – Amazon

Engineering A safer world – Nancy Leveson

Autorka zajmuje się systemami safety-critical od strony analizy ryzyka. Była między innymi biegłym sądowym w sprawie Therac-25. Książka pokazuje dlaczego analiza powypadkowa badająca ciąg przyczynowo-skutkowy nie usuwa prawdziwej przyczyny, tylko często oskarża personel, który pechowo akurat miał wtedy zmianę. Autorka analizuje też różne wypadki i pokazuje swoje podejście do analizy ryzyka w praktyce.

Wersja angielska – Amazon

A co ciebie obchodzi co myślą inni? – o Richardzie Feynmanie

Książka składa się z dwóch części i pierwsza zawiera różne anegdotki z życia Richarda Feynmana – noblisty z fizyki. Z kolei druga to jego wspomnienia z prac w komisji badającej przyczyny wypadku promu Challenger. Możemy tam poczytać o urzędowej obstrukcji.

A co ciebie obchodzi, co myślą inni? Dalsze przypadki ciekawego człowieka - Feynman P. Richard

Wersja polska – Empik

Ogólnie o programowaniu

Zrozumieć programowanie – Gynvael Coldwind

Księgarnia PWN

Prowadzenie projektów

Legendarny osobomiesiąc – Frederick Brooks

Okładka książki/ebooka Legendarny osobomiesiąc. Opowieści o inżynierii oprogramowania. Wydanie II

Wersja polska – Helion

Umiejętności miękkie

Jak zdobyć przyjaciół i zjednać sobie ludzi – Dale Carnegie

Okładka książki Jak zdobyć przyjaciół i zjednać sobie ludzi

Wersja polska – Helion

Pozostałe

Masters of Doom – Dave Kushner

Masters of Doom by David Kushner

Strona książki

Stay awhile and listen – David Craddock

Wersja angielska – Amazon