10 książek dla Regular Developera
W poprzednim tekście pojawiło się całkiem sporo książek dla programistów na poziomie juniorskim. Ich celem jest m.in. zaszczepienie w młodym inżynierze odpowiednich praktyk i dobrych przyzwyczajeń. Dziś przyjrzyjmy się moim propozycjom dla deweloperów na poziomie regular. Niektóre z nich w jakiś sposób powiązane są z konkretnym językiem (albo kilkoma), ale zakładam, że rozgarnięty czytelnik doskonale poradzi sobie ze zrozumieniem przesłania autora.
Siedem języków w siedem tygodni - B. Tate
Jest to pierwsza z serii książek Siedem... w siedem.... Należy ją tutaj potraktować jako zachętę do przeczytania wszystkich :) Bruce Tate przedstawia siedem języków i każdy z nich jest w jakiś sposób niezwykły. Lektura książki pomaga zrozumieć, co w językach programowania jest wspólne, a co różne. Wzbogaca także czytelnika nowymi doświadczeniami i zachęca do spróbowania czegoś nowego.
Być może okaże się, że po jej przeczytaniu dołączysz do swojego projektu zupełnie nowy język? Wierzę, że sięgniesz także po pozostałe pozycje z serii i rozważysz użycie nowego modelu współbieżności, lepiej pasującą bazę danych, lub zupełnie inny framework. Trzeba się rozglądać, a książki z tej serii są całkiem dobrym towarzyszem tych działań.
DSLs in Action - D. Gosh
To jedna z moich ulubionych książek branżowych. Zawsze podczas rozmów z kandydatami o nią pytam i niestety zawsze jestem rozczarowany. Mam nadzieję, że po lekturze tego tekstu, zachęcę przynajmniej kilka osób do sięgnięcia po nią.
Książka D. Gosha ma już kilka lat (wydana przez Manning w 2010 roku) i wszystkie języki (Clojure/Scala/Ruby/Groovy) użyte w książce, mocno się rozwinęły. Dziś więc możliwości są jeszcze większe niż w czasie jej pisania. Sam nieustannie zachęcam programistów do implementowania programów właśnie w tej kolejności:
- najpierw język dziedzinowy (DSL)
- później za jego pomocą rozwiązujemy problemy dziedziny aplikacji
Być może w codziennej pracy korzystasz z Javy, Pythona czy C++, czyli języków, które nie są "bohaterami" książki. Nie martw się. Idea języków dziedzinowych jest bardzo uniwersalna i da się ją zastosować w każdym środowisku. Po prostu w niektórych jest łatwiej i bardziej naturalnie. Moim ulubionym jest oczywiście Lisp/Clojure, a przykłady doskonałego DSL-a to m.in. Midje, czy Korma.
Praca z zastanym kodem - M. Feathers
Jako dojrzały programista często będziesz "rzucany" na front pracy z już działającymi aplikacjami, które zostały napisane co najmniej kilka lat wcześniej. W naszej branży trawa niestety rzadko jest zielona po naszej stronie boiska :) Nikt nie spodziewa się po nas narzekania, a ucieczka nie jest dobrym rozwiązaniem. Te aplikacje zwykle komuś służą, a my jesteśmy ostatnią ich nadzieją. A nadzieją dla nas jest doskonała książka M. Feathersa, który podaje kilkadziesiąt świetnych rad, dzięki którym poradził on sobie z naprawdę mocno "zapuszczonym" kodem. Myślę, że i Tobie będzie dzięki temu łatwiej. Nie oszukujmy się - każdy z nas pisze kod, z którego jest dumny w chwili pisania. Rok później nabieramy do niego dystansu i to jest to, co możemy nazwać "zastanym kodem" (legacy code).
Podsumowując - jeśli jeszcze nie masz tej książki na swojej półce, to czas najwyższy na spacer do księgarni. To pozycja zdecydowanie obowiązkowa dla każdego programisty.
Wprowadzenie do algorytmów (pełna wersja) - Cormen etc
W zestawie książek dla "juniora" umieściłem mniejszą wersję tej książki - Algorytmy bez tajemnic (napisaną ze współautorami). Tym razem sugeruję sięgnięcie także po tę większą wersję. Książka Cormena ma tę świetną zaletę, że nie pisana jest w jakimkolwiek języku i do pełni zrozumienia wymaga właściwie sięgnięcia po edytor (i ewentualnie kompilator) i samodzielne zaimplementowanie każdego algorytmu. Oczywiście nie musisz tego robić "na już". Ale warto - jako ćwiczenie - taką implementację zaplanować sobie od czasu do czasu. Poza wszystkim jest to świetne ćwiczenie, które dodatkowo pozwala lepiej zrozumieć język, którym się w codziennej pracy posługujemy.
Software Craftsmanship - S. Mancuso
Ruch "software craftsmanship" pojawił się już kilka lat i temu i chyba na dobre wrósł w branżę IT. Tutaj znajdziemy sporo przemyśleń i uwag dotyczących tego, co nazywamy (lub chcemy nazywać) dobrym rzemiosłem, w kontekście tworzenia oprogramowania. To jedna z tych książek, która po pierwszym zakończonym czytaniu, czyta się po raz drugi właściwie od razu. Autora zaczynamy traktować jak starszego kolegę z pracy.
W bogatej treści znajdziemy m.in. informację tak ważną, jak odpowiedź na pytanie - po czym poznać, czy ogłoszenie, które Cię zainteresowało, pochodzi od dobrej, czy słabej firmy? Jak wprowadzać zmiany (a nawet jak tworzyć klimat sprzyjający zmianom), jakie książki czytać, jak się rozwijać i jak nie zagubić się w bogactwie urodzaju w IT, którego od jakiegoś czasu jesteśmy świadkami. I nic nie zapowiada, żeby w najbliższych latach coś miało się zmienić.
Zachęcam mocno do sięgnięcia po tę książkę, właśnie już okrzepniętych programistów, bo to jest moment, w którym często nie wiemy, jaką drogą podążyć, a odpowiedzi lub chociaż wskazówki, znajdują się na jej stronach.
Czysta architektura - R. C. Martin
Kiedy się pojawiła, kupiłem ją bez zastanowienia, od razu przeczytałem. I o ile początkowo miałem mieszane uczucia, to po drugim czytaniu jednak doceniłem kolejne dzieło Wujka Boba. Skąd te mieszane uczucia? No cóż, zawartość książki jest świetnym podsumowaniem tego, co w kwestii eleganckiej (czy też "czystej") architektury, zostało w ostatnich latach napisane i powiedziane. Przy pierwszym czytaniu, miałem nieodparte wrażenie, że wszystko, co czytam, już kiedyś wcześniej przeczytałem. Oczywiście była to prawda. Ale później zdałem sobie sprawę, że dobrze mieć całą tę wiedzę zgromadzoną w jednym miejscu i uporządkowaną przez samego Roberta Martina.
Myślę, że każdy dojrzały programista zyska na przeczytaniu (i posiadaniu) tego zbioru wiedzy wypracowanej przez wielu inżynierów podczas milionów godzin spędzonych na "sprawianiu by świat stał się lepszym miejscem", przynajmniej dla nas - programistów.
Jest to kolejna pozycja obowiązkowa :)
Programowanie. Koncepcje, techniki i modele - P. Van Roy, S. Haridi
O tej książce trudno mi pisać bez emocji. Wiele lat temu, gdy wpadła w moje ręce, sprawiła, że wszystko, co w programowaniu wydawało mi się trudne, niezrozumiałe, bądź dziwaczne, nabrało sensu. Poczułem się przez chwilę jak Neo, który w ciągu spadających znaków zaczął dostrzegać obiekty i postaci. Autorzy opisują w niepozostawiający wątpliwości sposób to, co obiecują opisać w tytule. Rzekłbym, że opisane są w niej wszystkie języki programowania. Także te, które jeszcze nie powstały. Oczywiście może w inżynierii nastąpić jakiś kopernikański przewrót, który sprawi, że stanie się ona niekompletna, ale myślę, że nawet wtedy niekompletność będzie niewielka.
Jako programista - zawodowiec, będziesz zmuszony do nauki kolejnych koncepcji i nowych języków. Ta wspaniała książka będzie dla Ciebie mapą. Niestety nakład polskiego wydania został wyczerpany pod koniec ubiegłego dziesięciolecia, a jej dostępność na rynku wtórnym jest znikoma. Warto jednak poszukać dobrze w sieci.
Wzorce projektowe - E. Gamma, R. Helm, R. Johnson, J. Vlissides
To klasyczna pozycja, obowiązkowa właściwie dla każdego programisty. Nie zaliczyłem jej jednak jako książki dla juniora, bo to dość niebezpieczne. Zdarza się, że juniorzy właśnie po jej lekturze, decydują się "rozwiązywać każdy problem za pomocą wzorca", gubiąc przy tym najważniejsze - czyli zdrowy rozsądek. Oczywiście także ja wpadłem w tę pułapkę :) I mimo że upłynęło mnóstwo czasu, to wciąż na wspomnienie o tym, pojawia mi się na twarzy uśmiech.
Dlaczego to ważna pozycja w moim zestawieniu? Ponieważ wzorce projektowe są dziś pewnego rodzaju językiem komunikacji pomiędzy programistami i o ile dla juniora jego znajomość jest powiedzmy - opcjonalna, o tyle później nie ma już wymówek. Gdy inżynier mówi do inżyniera "udekoruj tę klasę", to nie ma na myśli, postawienia na niej wazonu z tulipanami. Zastosuj visitora, też powinno się kojarzyć dość konkretnie. Wzorzec "budowniczy" (builder) też ma swoje specjalne zastosowania. Niekoniecznie tak trywialne, jak wydają się nam na co dzień.
Zachęcam do sięgnięcia po tę - klasyczną już dziś - prace Bandy Czworga. Z nią wiążą się dwie kolejne książki, które opisze razem.
Refaktoryzacja i Refaktoryzacja do wzorców projektowych
I gładko przechodzimy do kwestii refaktoryzacji, pierwotnie opisanej przez M. Fowlera i świetnie uzupełnionej przez J. Kerievsky'ego. Zachęcam do czytania tych dwóch książek jednocześnie i szukania podczas lektury punktów wspólnych. Będzie to zdecydowanie najlepsze ich wykorzystanie, a tak przeprowadzana nauka pozostanie na zawsze jako nawyk.
W "Refaktoryzacji" odnajdziemy interesujące wątki historyczne, pokazujące, w jaki sposób rodził się obecny kształt branży oprogramowania. Do tego mnóstwo symptomów wskazujących na konieczność wprowadzenia zmiana w strukturze kodu/projektu. W książce Kerievsky'ego większy jeszcze nacisk został położony na praktyczne aspekty refaktoryzacji w połączeniu z architekturą.
Obie książki to doskonała lektura i obiecuję, że za każdym razem znajdziecie w nich coś ciekawego, warto więc wracać do nich co jakiś czas. To zaś sugeruje, że powinny znaleźć się na Twojej półce.
Mityczny osobomiesiąc - J. Brooks
Na koniec pozostawiłem absolutną klasykę. Dla wielu jest to książka znana tylko z tytułu i kilku bon motów (niestety), dla wielu zaś punkt odniesienia. Dla mnie to ważna pozycja choćby ze względu na moment kariery, w którym ją czytałem, czyli dość wcześnie. Chłonąłem słowa Brooksa jak gąbka wodę i przesiąkłem nimi po wsze czasy. Dziś, gdy wybierając tę pozycję do zestawienia, sięgnąłem na półkę, by przejrzeć ją raz jeszcze, w pamięci pojawiły się obrazy z tamtego czasu.
Przejrzawszy tekst, przyjrzałem się swoim notatkom na marginesie i zakreśleniom tekstu i widzę, że po latach wciąż skupiam uwagę w tych samym miejscach. Brooks wyprzedził swój czas (wciąż żyje, więc powiedzmy, że mam na myśli czasy, w których powstawało pierwsze wydanie książki). Widać to dobrze w wydaniach rocznicowych (20-lecie, które przypadło w 1995 roku!), a skonfrontowane z teraźniejszością staje się oczywiste.
Dla mnie najważniejszą z konstatacji F. Brooksa jest stwierdzenie, że w trakcie tworzenia najważniejsza jest komunikacja. Po całą resztę naprawdę trafnych spostrzeżeń, uwag i opinii odsyłam do lektury mistrza (nie tylko mojego). Programowanie to nie zabawa - to rzemiosło (a nawet przemysł). I - jako dojrzali programiści - w ten sposób musimy do niego podchodzić.
Podsumowanie
W tej części to tyle. Oczywiście jest zdecydowanie więcej książek, które chętnie polecę na tym etapie kariery, ale te wybrałem jako najważniejsze. Przy okazji weryfikacji mojego wyboru (który początkowo był znacznie szerszy), dobrze bawiłem się, czytając obszerne fragmenty każdej z nich i mam nadzieję, że Ty także będziesz miał z czytania przyjemność.