MIT lecturer Ana Bell discusses books to learn CS and programming
So first of all let me preface my own list of books with the following: These book recommendations are for some books that are really really good IMO but this list of books alone is far from all that you need. You need practice. Lots and lots of practice. You need interesting problems to work on that are sufficiently small in scope that they don&#x27;t each take too much time, but which still end up teaching you something. You need to know when to skip a problem if you&#x27;re banging your head and getting nowhere, and you need to know when to persist. So the following should not be taken as a list that will &quot;teach you CS and&#x2F;or programming&quot;, but rather a list of books to complement learning.<p>Also you need maths. Start with calculus. However, maths is difficult to learn on your own. I am sure some people are able to do it on their own but I think most would struggle to do so. At the very least follow something like <a href="https:&#x2F;&#x2F;www.khanacademy.org&#x2F;math&#x2F;calculus-home" rel="nofollow">https:&#x2F;&#x2F;www.khanacademy.org&#x2F;math&#x2F;calculus-home</a>. Personally I learned the maths I know at university but I&#x27;ve heard that Khan Academy is pretty high quality stuff.<p>So, like, this list is more of a &quot;books that you should check out while&#x2F;after you&#x27;ve studied CS and&#x2F;or programming at a university&quot;.<p>1. <i>Dive into Python 3</i>. Mark Pilgrim. 2009. Apress. <a href="http:&#x2F;&#x2F;www.diveintopython3.net&#x2F;" rel="nofollow">http:&#x2F;&#x2F;www.diveintopython3.net&#x2F;</a>. Python 3 is a great language. It&#x27;s easy to get started for beginners and yet it&#x27;s so powerful that if you really learn it you will find yourself using it probably for a lot of very advanced stuff for many many years to come.<p>2. <i>Inside Network Perimeter Security (2nd Edition)</i>. Northcutt, Zeltser, Winter and Ritchey. 2005. Sams. It&#x27;s not going to make you a networking security expert or anything but I found it to be a good intro.<p>3. <i>Structure and Interpretation of Computer Programs</i>. Abelson, Sussman and Sussman. 1984. MIT Press. The classic. If you don&#x27;t know about it already have a look at what people are saying; <a href="https:&#x2F;&#x2F;hn.algolia.com&#x2F;?query=sicp&amp;sort=byPopularity&amp;prefix&amp;page=0&amp;dateRange=all&amp;type=comment" rel="nofollow">https:&#x2F;&#x2F;hn.algolia.com&#x2F;?query=sicp&amp;sort=byPopularity&amp;prefix&amp;...</a>. Great book, and one that I will definitely be reading again in the future.<p>4. <i>Understanding Computation: From Simple Machines to Impossible Programs</i>. Tom Stuart. 2013. O&#x27;Reilly. <a href="http:&#x2F;&#x2F;computationbook.com&#x2F;" rel="nofollow">http:&#x2F;&#x2F;computationbook.com&#x2F;</a>. A fun and gentle book covering a range of computer science topics. He&#x27;s using Ruby which personally I do not use but it&#x27;s close enough in syntax to Python that I almost didn&#x27;t even think about it while reading. (No disrespect against Ruby, it&#x27;s just I personally don&#x27;t use it.)<p>5. <i>WebGL: Up and Running</i>. Tony Parsi. 2012. O&#x27;Reilly. A short book which manages to be concise without getting too dense. It gives a good intro to WebGL using Threes.js and contains a lot of small but interesting examples complete with code. WebGL has evolved quite a bit since the book was written but I think it still holds as an intro both to WebGL and to computer graphics in general. I don&#x27;t know if I would recommend Threes.js specifically (nor do I have anything against it -- I just haven&#x27;t ended up using that library myself) but the framework&#x2F;libraries used is second to the cause of teaching anyway and I think it makes sense that they used it to abstract away some of the boilerplate stuff.<p>6. <i>The Design of Design: Essays from a Computer Scientist</i>. Frederick P. Jr. Brooks. 2010. Addison-Wesley Professional. I liked this one a lot. So much that I had to include it even though we&#x27;ve already mentioned five books. This one is about software architecture. Additionally it also talks a bit about house architecture which might seem a bit odd at first but the book is well written and the stuff about houses ends up adding to the reading experience quite a lot IMO. You may have heard about another book of the same author; <i>The Mythical Man-Month</i>.<p>7. <i>The Design and Implementation of the FreeBSD Operating System (2nd Edition)</i>. McKusick, Neville-Neil and Watson. 2014. Addison-Wesley Professional. Well we&#x27;ve already broken the limit of five books so let&#x27;s add another one as well why not. This one is quite heavy reading material IMO. I started reading it years ago but didn&#x27;t finish it. I&#x27;ve read about 600 of the almost 1000 pages. I liked the parts that I&#x27;ve read so far though and I am sure I will finish this book at some point. It&#x27;s very interesting to learn about the lower level details of how an operating system is built and doubly so when the book is about an actual production quality OS that is actually in use. Triply so because FreeBSD is my favorite OS ;)<p>There are so many more books I&#x27;d like to mention as well but let&#x27;s keep the list somewhat short in the spirit of the OP link.<p>Also, install FreeBSD or a Linux distro and use it as your main OS.<p>Lastly I&#x27;d like to add that you don&#x27;t necessarily need to read absolutely all of these books, and that you don&#x27;t need to read them cover to cover.<p>If you&#x27;ve never programmed, start with <i>Dive into Python 3</i>. If you have some experience, just skim through it and see if there is anything of interest.<p>Also like I said, books are not enough. You need to do exercises and also I recommend watching some talks from PyCon, DefCon, Game Developers Conference, etc.