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.
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ą.
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.
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.
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.
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.
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ż).
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ć.
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.
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.
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.
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
Zawód: Programista – Maciej Aniserowicz
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.
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.
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.
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.
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ć.
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.
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)
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.
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.
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.
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.
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.
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.
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.
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ć.
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.
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.