ateo militante da quanto leggo è tutta una serie di libri (vedi: The art of Computer Programming (TAOCP)), divisi in macro argomenti.
Mah onestamente no, questo sarà sicuramente "uno dei tanti". Io diciamo che a parte forse qualche iniziale "smanettamento" mio, l'approccio serio alla programmazione l'ho avuto con il primo anno di ingegneria, programmazione C. Poi una volta imparate le basi (non tanto la sintassi del linguaggio che scegli, quanto l'importanza di capire i concetti, sviluppare la capacità di problem-solving, scrivere un algoritmo oer risulvere il problema in questione... Esercizio didattico o altro che sia), il resto poi è questione di studio, scegli il linguaggio (o i linguaggi) che meglio si adatta al tuo ambito di interesse.
Per questo voglio dire, libri generalisti e guide ne trovi quante ne vuoi, una volta che hai ben chiaro il tuo obiettivo (cosa vuoi studiare, in quale ambito applicarlo) è meglio proseguire su più livelli, inizi dalle basi e bene o male qualunque guida va bene allo scopo; poi approfondisci e cerchi nozioni più avanzate, magari anche specifiche e non generiche. Ad esempio con Python, dopo che hai le basi del linguaggio puoi approfondire una singola libreria come Numpy per il calcolo scientifico... Tutto dipende da cosa ti serve!