Książki, które warto znać (na starcie)
Ponieważ standardowym pytaniem początkującego jest jakie książki polecasz to kilka mogę wymienić.
Przede wszystkim: nie mam zamiaru wymieniać wszystkich książek wartych przeczytania. Od tego są już takie fajne, gotowe listy jak:
- lista książek polecanych przez programistów na StackOverflow - tam jest chyba wszystko. Jak opanujesz solidne podstawy, zaczniesz szukać sposobów na wspięcie się wyżej, nie będziesz mieć w życiu nic lepszego do roboty, to tam jest literatura na jakieś 10 lat,
- dla osób, które już naprawdę popłynęły i chciałyby czytać sobie computer-science pejpery do poduszki jest lista papers we love - moja osobista byłaby znacznie krótsza, zwłaszcza, że utknąłem w połowie czytania Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire.
Teraz jednak skupię się na czymś dla początkujących.
Na początek, żeby mieć to już z głowy: Czysty kod i Mistrz czystego kodu Roberta C. Martina. Mam do gościa ambiwalentny stosunek. Ogólnie sprawa wygląda tak: rozkład Gaussa wygląda jak wygląda, większość czegokolwiek (np. programistów) to przeciętniaki. Nie jest to nic złego, ale zostawieni sami sobie, najprawdopodobniej się pokaleczą. Dlatego dajmy im jakiś zestaw zasad na start, żeby się mieli czego trzymać i nie siali śmierci i zniszczenia.
Nie mam z tym problemu. Zasady działające w 99% przypadków to dobry default. Wyjątki, są tylko wyjątkami i nie podważają sensu istnienia wytycznych. Jednak dobrze sobie zdawać sprawę, że programowanie to nie fizyka i nie ma tu za dużo absolutnych reguł nie do złamania, a z tych książek (IMHO) przebija się przekonanie, że jak stosujesz się do tych zasad zawsze i wszędzie to jesteś debilem nieprofesjonalny. I to już mnie ciutkę wkurwia.
To jednak moje osobiste odczucia, a pewne podstawy książki wykładają dość przystępnie, więc je tu wymienię.
Nie będę jednak ukrywał, że bardziej cenię Kod doskonały Stevena McConnella. Jest gruba, ciężka, ale autor woli odwoływać się do badań niż do osobistych alegorii i opinii. Prezentuje też bardziej zrównoważoną opinię, stwierdzając że różne rozwiązania mają zalety i wady i nawet, jeśli w 99% przypadków opcja 1 jest lepsza, to masz głowę po to jej używać i zastanowić się kiedy masz do czynienia z tym 1%, a kiedy nie.
Ponieważ jest spora, że język od które zaczniesz jest obiektowy, obowiązkowe pozycje to Wzorce projektowe Bandy Czterech oraz Refaktoryzacja Martina Fowlera. Później, przy pierwszej pracy zawodowej w istniejącym projekcie przydatna może być również Praca z kodem zastanym Michaela Feathersa.
Coś jeszcze? Może jeszcze TDD Kenta Becka. Później można rozważać coś o algorytmach, zasadach na jakich działa komputer, programowaniu niskopoziomowym itd.
To co czytać dalej mocno już zależy od ścieżki kariery. Front-end, back-end, mikrokontrolery, mobile, natywne desktopowe aplikacje… Moja krótka list ma wystarczyć jedynie na początek. Później dociekliwy czytelnik znajdzie sam książki, których potrzebuje.
(Ew. może po prostu powiedzieć, co chciałby robić i dopytać ;))