Od papieru to trzymam się tak daleko, jak się da - ale podejrzewam, że większość pozycji dostępnych elektronicznie jest również dostępna w wersji papierowej.
1) SQL
Szykuję się (póki co mentalnie, bo w kalendarzu termin na to mam dość odległy) do zrobienia cyklu materiałów nt. baz danych, w tym również SQLa. Podzielę się efektami mojego wstępnego rozeznania tematu.
SQL łatwy? Interesujące.
A poważnie: podstawy to są może i proste. Zapewne wystarczy zapoznać się z dowolną pozycją nt. SQL. Warto przy tym pamiętać, że SQL w praktyce to więcej, niż "tylko język" do pisania kwerend: są różne bazy (PostgreSQL, MySQL, itd.), każda z nich ma swoją specyfikę. Trudno, żeby człowiek się tego dokładnie uczył, ale zapoznać się z pewnymi ciekawostkami można, bo to nie zajmie dużo czasu. (Np. swego czasu zobaczyłem film chyba z 2015., na którym ktoś pokazywał, w jaki sposób MySQL dokonuje konwersji danych. Szczękę z podłogi musiałem długo zbierać.) A poza bazami, to równie istotną sztuką jest projektowanie modelu bazy (czyli tabel i zależności pomiędzy nimi).
Bardzo ciekawe (dla mnie - laika w temacie) źródło informacji znalazłem na stronie: https://modern-sql.com/
To nie jest książka dla początkujących (raczej dla ludzi, którzy chcą zostać ekspertami) - ale cenne źródło informacji nt. tego, co w SQLu się pojawiło w ostatnich dekadach. Dobrze jest o tym przynajmniej wiedzieć.
Jedna rada: zanim cokolwiek się kupi, poleciłbym "przerobić" jeden, albo dwa tutoriale (ale takie porządniejsze, dłuższe) z sieci. Choćby po to, żeby móc potem odróżnić dobrą książkę od kiepskiej.
Może ktoś lepiej znający SQLa uzupełni tę moją "wypowiedź"?
2) Haskell - o tu, to będzie obszerniej.
Zacznę od podania paru konkretnych linków:
http://learnyouahaskell.com/ (dostępna za darmo online)
https://haskellbook.com/ (dość droga, choć ma dobrą opinię; dla mnie - taka sobie)
https://www.manning.com/books/get-programming-with-haskell (chyba nieco tańsza; na mnie zrobiła lepsze wrażenie, aczkolwiek też nie jest idealna)
http://dev.stephendiehl.com/hask/ (niektóre tematy nawet nieźle opisane, ale to nie jest do nauki, tylko raczej żeby się dowiedzieć, że coś takiego w Haskellu jest)
https://en.wikibooks.org/wiki/Haskell (dostępna za darmo online; dla mnie niektóre tematy są opisane świetnie, inne - beznadziejnie; np. o takich monadach to w życiu bym się z tego nie nauczył)
Powiedzmy sobie wprost: pracy w Haskellu jest mało. Ale jak już jest, to jest dla najlepszych - bo Haskella to się uczą pasjonaci i entuzjaści. Tacy, którym nie wystarczają popularne języki.
(Swoją drogą, to całkiem niedawno rozmawiałem z człowiekiem, który ma wiele lat pracy w zawodzie programisty. Spotkał wielu takich, co się nauczyli Javy, albo C# i wcale nie mają ochoty na naukę czegokolwiek innego. Tacy Haskellowcami z pewnością nie zostaną. I całe szczęście.)
Ja nauczyłem się Haskella dopiero rok-dwa lata temu. Po wieeeeloletnich próbach, przy chyba trzecim, albo nawet czwartym podejściu. (Tak to jest, jak się próbuje zrozumieć Haskella, pomijając temat monad.)
I oto moje doświadczenia:
a. Dla początkującego Haskell może być trudny. Nawet nie chodzi o FP, czy o pure FP. Bardziej o sam język, kompilator i rozszerzenia. Człowiek zaczyna się czegoś uczyć, nawet już to rozumie, a potem widzi kod i myśli: kurcze, nie wiedziałem, że w Haskellu tak można. Przekleja kod do swojego, kompiluje, a tu zonk! Kompilator rzuca błędami. Co jest? Rozszerzenia kompilatora. Są ich setki. Można je dowolnie (no... prawie) dobierać. Powodzenia życzę, zwłaszcza początkującym, w doborze rozszerzeń. Albo w rozpoznawaniu wykorzystanych rozszerzeń w kodzie, który znajdą "gdzieś w sieci", w jakimś ciekawym tekście.
b. Nie ma jednej, porządnej książki. Tematów do nauki jest wiele. Podstawowe FP to fraszka. Pure FP może z początku sprawić nieco większe problemy (mnie sprawiło) - ale jak przyjąć, że monada IO to taki "specyficzny DSL", da się z tym żyć. (Potem człowiek zrozumie, jak to działa.)
Nieco większa sztuka to odpowiednie zastosowanie systemu typów Haskella. (Śmiem twierdzić, że Haskell ma jeden z najpotężniejszych systemów typów. Java czy C# to przy nim "cienkie bolki".) Nauka tego systemu to jedno. Zrozumienie - to coś zupełnie innego.
Dalej: mamy różne wzorce, niektóre niespotykane, inne rzadko spotykane w innych językach. Funktory, monoidy, monady, aplikativy, transformery i stosy monad... Dopiero ich zrozumienie sprawia, że człowiek docenia Haskella i zaczyna pisać ciekawy kod. No i rozumie to, co piszą inni.
Gdzieś na horyzoncie czai się type-level programming...
Problem w tym, że nie znalazłem jeszcze JEDNEJ książki, w której WSZYSTKIE te tematy byłyby wyjaśnione w taki sposób, żebym to zrozumiał. Dlatego korzystałem z wielu różnych źródeł.
c. I jeszcze jedno.
Jak ktoś się uczy języka C, to MUSI zrozumieć, czym są wskaźniki. Bez tego po prostu nie da rady.
W Haskellu trzeba zrozumieć monady. One są wszędzie. Nie znaczy to, że trzeba od monad zaczynać (w C też nie trzeba zaczynać od wskaźników) - ale nie można tego tematu po prostu ominąć. To wróci i ugryzie, bardzo mocno, w bardzo wrażliwą część ciała.
Mnie ugryzło w najmniej spodziewanym momencie, w moją osobistą dumę i przekonanie, jaki to ze mnie "kozak"-programista.
(Za to jaka była satysfakcja, kiedy zdałem sobie sprawę z faktu, że właśnie napisałem moją pierwszą monadę... W dodatku - wcale nie w Haskellu!)
d. A może warto zainteresować się np. PureScriptem?
Bardzo podobny do Haskella, w pewnych aspektach prostszy (np. brak rozszerzeń kompilatora, ale też brak GADTs, które jednak aż tak często potrzebne nie są...), a można go skompilować do JavaScriptu i używać pod Node.js, albo w przeglądarce.
(Gwoli ścisłości - w innych aspektach PS może być nieco trudniejszy od Haskella, np. biblioteka jest znacznie bardziej zfragmentaryzowana /zgranulizowana?/, co może początkującemu sprawić więcej problemów.)
Napisałem już w tym jedną aplikację i mam bardzo pozytywne wrażenia.
A znajomość języka, który jest kompilowany do JavaScript, z pewnością będzie prostsza do sprzedania na rynku.
W każdym razie, gdyby ktoś miał pytania odnośnie Haskella, to chętnie pomogę. Jakimś ekspertem, czy wielkim znawcą nie jestem - ale w podstawach się orientuję. Nawet gdyby te monady trzeba było wytłumaczyć (a przynajmniej spróbować) ;-)
(Trochę długo wyszło, ale cóż - dla mnie języki czysto funkcyjne to największa pasja.)