Nie tak dawno pisałem o siedmiu książkach, które moim zdaniem powinien przeczytać początkujący programista frontend. Teraz przyszedł czas na 8 książek, które będą przydatne niezależnie od Twojej specjalizacji, ponieważ skupiają się na zagadnieniach związanych z algorytmami, strukturami danych, architekturą oraz szeroko pojętą informatyką (choć w tym przypadku angielska nazwa – Computer Science – pasuje znacznie bardziej, dlatego będę się nią posługiwał w dalszej części artykułu).
Książki, które wybrałem, są skierowane do osób mających już doświadczenie z dowolnym językiem programowania. Nie jest wymagana wiedza ekspercka, ale solidne podstawy z pewnością ułatwią odbiór i zrozumienie większości z nich.
Algorytmy dla początkujących
Każdy programista powinien znać podstawowe grupy algorytmów (np. sortujące, wyszukujące, kompresujące itd.), ich wydajność i zastosowanie. Przydatne może się okazać również zrozumienie notacji dużego O i umiejętność obliczenia go.
Oczywiście nie chodzi o to, by umieć zaimplementować każdy możliwy algorytm z pamięci. Jeżeli jednak nie wiemy o istnieniu algorytmu, który rozwiązuje nasz problem, to może się okazać, że zaczniemy wymyślać koło od nowa, na dodatek w gorszej, mniej wydajnej wersji.
Algorytmy, Ilustrowany Przewodnik: to książka skierowana do osób, które nie miały do tej pory styczności z algorytmami. Porusza jedynie podstawowe zagadnienia i nie wchodzi w nie zbyt głęboko. Plusem jest to, że robi to w niezwykle przystępny sposób, który z pewnością nie odrzuci Cię od dalszej lektury. Potraktują ją, jako punkt startowy do nauki algorytmów.
Wprowadzenie Do Algorytmów: przez wielu określana jako biblia algorytmów. Mimo że w tytule widnieje słowo “wprowadzenie”, to znajdziesz w niej znacznie więcej niż tylko wprowadzenie do tematu (książka ma ponad 1300 stron), a omawiane zagadnienia bardzo często ocierać się będą o matematykę. Dla wielu osób ta pozycja może być odrzucająca, ale jeśli chcesz zgłębić świat algorytmów, to trudno o lepszą książkę.
A jeżeli książki to dla Ciebie za mało, w tym repozytorium znajdziesz znacznie więcej materiałów do nauki.
Podstawowe Struktury Danych: Listy, Stosy, Drzewa, Grafy...
Struktury danych są wszędzie. Korzystając z nawigacji wykorzystujemy grafy, a przewijając listę kontaktów w telefonie - tablice mieszające. Każdy programista powinien znać podstawowe struktury i umieć je wykorzystać w praktyce.
Podobnie jak w przypadku algorytmów, nie chodzi tu o umiejętność zaimplementowania ich od zera - niektóre wysokopoziomowe języki programowania dostarczają nawet gotowe do użycia klasy, które odzwierciedlają wybraną strukturę. Żeby jednak móc je zastosować, trzeba wiedzieć, w jakich sytuacjach sprawdzi się dana struktura.
Struktury danych z przymrużeniem oka: książka dla początkujących. Jeżeli wcześniej nie zetknąłeś/aś się z innymi strukturami niż tablica czy obiekt, to z pewnością będzie to dobry punkt startowy. Autor wyjaśnia działanie i zastosowanie kilku podstawowych struktur, takich jak kolejka, stos, tablica mieszana, drzewa, czy grafy. Na dodatek robi to w sposób niezwykle przystępny i nie zanudza czytelnika encyklopedycznymi definicjami.
Algorytmy, struktury danych i techniki programowania: Mimo że książka została wydana w 2019, to wiedza w niej zawarta jest nadal aktualna. Ta pozycja łączy w sobie wprowadzenie zarówno do algorytmów, jak i do struktur danych. Muszę Cię jednak ostrzec, że autor ilustruje omawiane zagadnienia w C++, który jest uznawany za język niskopoziomowy. Jeżeli do tej pory miałeś/aś do czynienia jedynie z językami wysokopoziomowymi, to zrozumienie niektórych przykładów może być wyzwaniem. Z doświadczenia jednak mogę powiedzieć, że zazwyczaj nie jest to problem, a po kilku stronach oswajamy się z inna składnią.
Architektura aplikacji serwerowych i internetowych
Architektura aplikacji to bardzo szerokie zagadnienie. Inaczej podejdziemy do projektowania gry, a inaczej do aplikacji internetowej. Książki, które wybrałem, skupiają się przede wszystkim na technologiach internetowych. Nie oznacza to, że wiedza w nich zawarta nie może zostać wykorzystana np. w aplikacji desktopowej. W dzisiejszym świecie praktycznie każda aplikacja i gra łączy się z internetem, a to z kolei wymaga kodu umieszczonego na serwerze.
System Design Interview 1&2: mimo że w tytule tych książek znajduje się słowo “interview”, to zdecydowanie polecam je każdemu, kto jest zainteresowany architekturą aplikacji internetowych. Zarówno tom pierwszy, jak i drugi, składa się z wielu popularnych wzorców, które stosuje się w aplikacjach internetowych (i z którymi często możemy się spotkać na rozmowach rekrutacyjnych). Korzyść z przeczytania jest zatem podwójna - poznamy mnóstwo zagadnień z architektury i będziemy lepiej przygotowani do rozmów rekrutacyjnych. Kolejnym plusem są diagramy, których w książce jest mnóstwo i które zdecydowanie ułatwiają zrozumienie treści. Minusem może być fakt, że książki są dostępne tylko w języku angielskim. Jeżeli do tej pory nie czytałeś/aś książek w innym języku niż polski, to jest to dobry punkt startowy - autor używa prostego słownictwa, dzięki czemu całość jest łatwa w odbiorze. Zacznij od części pierwszej, która skupia się na najczęściej spotykanych problemach, a drugą kup dopiero, gdy skończysz pierwszą.
Przetwarzanie danych w dużej skali: Pełny tytuł tej książki jest nieco dłuższy, ale dzięki temu dobrze wyjaśnia, czego możemy się po niej spodziewać: "Przetwarzanie danych w dużej skali. Niezawodność, skalowalność i łatwość konserwacji systemów". Z książki dowiesz się przede wszystkim, co kryje się pod tymi pojęciami, poznasz także działanie i zastosowanie różnych typów baz danych. Na tym jednak nie koniec - książka porusza również takie tematy, jak replikacja baz danych, sharding, indeksowanie, techniki cache’owania i wiele innych. Autor poleca ją wszystkim, którzy mają do czynienia z aplikacjami backendowymi, architektom, managerom i osobom odpowiedzialnym za decyzje techniczne.
Na koniec tej sekcji postanowiłem dodać jeszcze jedną książkę, która co prawda nie jest powiązana ściśle z architekturą aplikacji, ale zahacza o ten temat. Wzorce Projektowe to nie tylko książka, ale też strona internetowa, na której znajdziemy najpopularniejsze wzorce wykorzystywane w programowaniu. Wiele z nich dotyczy programowania obiektowego. Są też takie, które są uniwersalne i sprawdzą się niemal wszędzie. Ich podstawowa znajomość ułatwi Ci zrozumienie kodu i rozwiązywanie problemów, które często występują w świecie programowania.
Computer Science
Książki, które umieściłem w tej kategorii, zawierają wiedzę, którą można zdobyć studiując na kierunkach związanych z informatyką. Jest to wiedza ogólna - nie skupiają się na żadnym konkretnym języku programowania czy technologii. Nie zmienia to faktu, że przyda się ona każdemu, kto ma styczność z programowaniem i chce zrozumieć, co dzieję się "pod maską".
Ta kategoria jest szczególnie istotna, ponieważ dostępne w internecie kursy zazwyczaj skupiają się wyłącznie na językach programowania, konkretnych frameworkach lub bibliotekach, zupełnie pomijając teoretyczną część związaną z działaniem komputera. Nawet w dobie wysokopoziomowych języków, które wykonują za nas całą pracę związaną z zarządzaniem pamięcią, dobrze jest rozumieć kompromisy, które z tego wynikają. To z kolei wymaga elementarnej wiedzy o działaniu pamięci RAM, ROM, procesora itd.
Programiści to nie jedyna grupa, która skorzysta na lekturze książek z tej kategorii. Osoby zainteresowane technologią i komputerami (a przede wszystkim ich wewnętrznym działaniem), administratorzy systemów, architekci, specjaliści do spraw bezpieczeństwa i niemal każdy inny zawód, mniej lub bardziej związany z IT, to potencjalny odbiorca.
The Imposter Handbook: mimo że ta książka nie została przetłumaczona na język polski, to zdecydowałem się na umieszczenie jej na tej liście. Opisuje wiele zagadnień poruszanych na studiach informatycznych (system binarny, kryptografia, algorytmy, bazy danych, struktury danych), a na dodatek robi to z perspektywy osoby, która nigdy nie studiowała na kierunku technicznym. Dzięki temu, całość jest przystępna i skupia się na tych tematach, które są najbardziej istotne. Oczywiście pomija przy tym wiele szczegółów, a niektóre tematy traktuje bardzo powierzchownie, ale nadal jest to jedna z najlepszych pozycji, jakie miałem okazję przeczytać.
Kod. Ukryty język komputerów: nieco krótsza i mniej szczegółowa alternatywa dla "The Imposter Handbook". Porusza podobne tematy, min.: system binarny i szesnastkowy, działanie procesora, działanie pamięci RAM i ROM. Jest jednak zdecydowa mniej techniczna i skierowana do szerszej publiki. Nie oznacza to jednak, że nie nadaje się dla programistów. Wręcz przeciwnie - jest idealna dla każdego, kto zaczął naukę od języka programowania, a teraz uzupełnia braki. W przeciwieństwie do poprzedniej pozycji, została przetłumaczona na język polski.
Podsumowanie
Elementarna wiedza z zakresu CS jest potrzebna programiście niemal tak samo, jak umiejętność pisania kodu. Wykorzystamy ją nie tylko w trakcie rozmów rekrutacyjnych, ale również w codziennej pracy, gdy będziemy wybierać odpowiedni algorytm, strukturę do przechowywania danych czy optymalizować zużycie pamięci. Chociaż na początku przygody z programowaniem nie jest to aż tak widoczne, to z czasem, wraz z podejmowaniem się coraz trudniejszych zadań, może się okazać, że brakuje nam podstaw.
Na szczęście wiedza ta, nie zmienia się tak szybko (w przeciwieństwie do języków programowania, bibliotek, czy frameworków) i zdecydowana większość książek na ten temat wciąż jest aktualna. Raz zdobyte podstawy nie wymagają aktualizacji co miesiąc, dlatego tym bardziej warto poświęcić nieco czasu na ich zrozumienie.