Bästa svaret
Använd definitivt SICP, om du klarar utmaningen. Du kan stat med SICP när du inte vet någonting om programmering alls, eftersom det börjar från de första principerna, men det kräver viss matematik, inte mycket men lite. Författarna har ett vackert klart språk för att beskriva begrepp och idéer.
Jag tog upp SICP när jag redan var ute på universitetet och tyckte att det fortfarande var en stor upplysning. Jag kan till och med säga att det här är den bok som har lärt mig mest av alla böcker jag läser, även om jag inte ens har gjort det ännu. Jag rekommenderar att du konfigurerar dina SICP-övningar med exempelvis Rackets SICP-språk.
Svar
Ja, absolut, bestämt ja.
SICP är inte en bok om datorprogrammering, det är inte heller en bok om programvaruteknik, OOP eller någon av dessa andra gizmos och doodads. SICP handlar om datavetenskap: att förstå datorn som en abstrakt maskin som används för att manipulera information.
I kapitel ett introducerade du till Scheme, ett språk som skapats av en av författarna. Du har visat hur kontrollflödet modifieras och hanteras i ett stort program genom beräkning i en lexiskt innesluten miljö AKA-subrutin. Boken guidar dig genom båda de viktigaste sätten att underrutiner kan implementeras, och förklarar bristerna och nyttan med båda.
I kapitel två lär du dig att strukturera data och bygga nya betydelser för rådata från tidigare befintliga datatyper. Du har visat kraften i symbolisk manipulation på olika platser som datoralgebrasystem och Huffman-kodande träd.
Kapitel tre är det mest grundläggande av alla kapitel. I kapitel tre lär du dig om tilldelning och kraften i mutationsvariabler. De tidigare beräkningsmodellerna som diskuterats i boken utvidgas nu radikalt för att tillgodose språkets förmåga att bibehålla och påverka tillståndet.
I kapitel fyra presenterades du för en av de mest lysande idéer i datavetenskapens historia: LISP-makrot och homoiconicity av Scheme-program. Till skillnad från C: s substitutionsmakron tillåter LISP-makron dig att manipulera den grundläggande strukturen i programmets abstrakta syntaxträd vid körningstid och låta dig implementera nya programmeringsparadigmer i LISP.
Det sista kapitlet tar ett helt annat tillvägagångssätt och behandlar datorn som en registermaskin. Du har visat hur en LISP-kompilator inte skiljer sig från något av Scheme-programmen du har sett, och sedan antydde begreppet universalitet. Slutligen gick du igenom och skapade en riktig LISP-kompilator.
Den här boken var fantastisk, den förändrade mitt tänkande från datavetenskap innebär att berätta för en dator hur man skriver ut siffror på skärmen till datavetenskap innebär att förstå handeln offs av olika abstraktioner och hur man använder dem korrekt.
tl; dr Läs den här boken. Om du inte gillar den, vann du förmodligen ” inte njuta av CS.