We are still actively working on the spam issue.

Difference between revisions of "Programming resources"

From InstallGentoo Wiki
Jump to: navigation, search
(Lisp)
(Awk: I forgot to capitalize AWK.)
 
(57 intermediate revisions by 24 users not shown)
Line 3: Line 3:
  
 
First, check GitHub's extensive list of free programming books:
 
First, check GitHub's extensive list of free programming books:
https://github.com/vhf/free-programming-books/blob/master/free-programming-books.md
+
https://github.com/EbookFoundation/free-programming-books/blob/main/books/free-programming-books-en.md
  
Second, a very comprehensive list:
+
The gentoomen have also provided a [https://g.sicp.me/books/gentoomen-library.torrent torrent]/[magnet:?xt=urn:btih:0bbfaaf5f469a2bd3d762f6942a302f7014a35e9&tr.1=udp://tracker.ccc.de:80&tr.2=udp://tracker.openbittorrent.com:80&tr.3=udp://tracker.opentrackr.org:1337&tr.4=udp://tracker.coppersurfer.tk:6969&tr.5=udp://tracker.leechers-paradise.org:6969&tr.6=udp://zer0day.ch:1337&tr.7=udp://explodie.org:6969 magnet] which has a metric fuckton of books, and if you prefer actual physical books, you can get them for really cheap from http://abebooks.com
http://programming-motherfucker.com/
 
  
The gentoomen have also provided a torrent at http://books.gentoomen.org/ which has a metric fuckton of books, and if you prefer actual physical books, you can get them for really cheap from http://abebooks.com
+
If you don't see the book you're looking for listed, search the following lists for other sources of books:
 +
 
 +
== God-tier books ==
 +
[[File:1420500175412.jpg|thumb|right|Read 'em up!]]
 +
These books are essential books that people should have, or at least have read or know about:
 +
 
 +
* [[Wikipedia:Compilers:_Principles,_Techniques,_and_Tools |Compilers: Principles, Techniques and Tools]] (a.k.a The Dragon Book). This book is loaded with all the theory and concepts needed to design, implement and optimise a compiler. It's the go-to compiler book.
 +
* [[Wikipedia:Operating_Systems:_Design_and_Implementation |Operating Systems: Design and Implementation]] (a.k.a the MINIX book). This is one of the books [[Linus Torvalds]] used to write the original Linux kernel. This also contains over 500 pages of the entire MINIX source code at the back as an appendix, and if you're lucky, a MINIX installation CD with instructions.
 +
* [[Wikipedia:The_Art_of_Computer_Programming |The Art of Computer Programming]] by Donald Knuth (essentially the holy grail of [[Computer Science]] literature). Bill Gates said that if anyone can read every volume in TAOCP from cover to cover, then they should definitely send him their CV/Resume.
 +
* [https://www.cs.cmu.edu/~15712/papers/mythicalmanmonth00fred.pdf The Mythical Man Month: Essays on Software Engineering]. A compilation of essays on what experienced software engineers and programmers have learned from their successes and failures over many years.
 +
* [[Wikipedia:Design_Patterns |Design Patterns: Elements of Reusable Object-Oriented Software]]. Design patterns and principles designed to help object-oriented software.
 +
* [[Wikipedia:The_Cathedral_and_the_Bazaar |The Cathedral and the Bazaar]]. Eric S. Raymond's book on Closed-house development (cathedral) vs open-source, distributed development (bazaar), and how the latter is much more effective.
 +
* The C Programming Language, mentioned below. Also known as K&R because it was written by the founders of C, Brian '''K'''ernighan and Dennis '''R'''itchie.
 +
* Structure and Interpretation of Computer Programs, listed below
 +
* [http://books.cat-v.org/computer-science/unix-programming-environment/ The UNIX Programming Environment, 2nd edition] An excellent introductory *nix book. Written by Brian Kernighan (of K&R) and Rob Pike (Plan9, Golang), both of whom were part of the Unix team at Bell Labs.
 +
* [http://basepath.com/aup/ Advanced UNIX Programming, 2nd Edition] Recommended as a follow on book from The UNIX Programming Environment. Contains information on over 300 syscalls.
 +
* [[Wikipedia:The_Pragmatic_Programmer |The Pragmatic Programmer]] Cuts through the increasing specialization and technicalities of modern software development to examine the core process—what do you do, as an individual and as a team, if you want to create software that’s easy to work with and good for your users.
 +
* [[Wikipedia:Introduction_to_Algorithms |Introduction to Algorithms]] The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers.
 +
* [[Wikipedia:The_Tao_of_Programming |The Tao of Programming]] The themes of the book espouse many hacker ideals – managers should leave programmers to their work; code should be small, elegant, and maintainable; corporate wisdom is more often than not an oxymoron; and so on.
 +
* [http://www.hackersdelight.org/ Hacker's Delight] It discusses a variety of programming algorithms for common tasks involving integer types, often with the aim of performing the minimum number of operations or replacing slow operations by faster ones.
 +
* [[Wikipedia:Code_Complete |Code Complete]] A compendium of software construction techniques, from naming variables to deciding when to write a subroutine.
 +
 
 +
== Ada ==
 +
* '''Programming in Ada 2012''' by John Barnes
  
If you don't see the book you're looking for listed, search the following lists for other sources of books:
+
== AWK ==
 +
* '''The AWK Programming Language''' by Alfred V. Aho, Brian W. Kernighan, and Peter J. Weinberger
  
 
== C ==
 
== C ==
* [http://data.a5.tf/Books/Programming/C/O%27Reilly%20-%20Practical%20C%20Programming.pdf O'Reilly - Practical C Programming]
+
* '''The C Programming Language (commonly K&R)''' by Brian Kernighan and Dennis Ritchie, the creators of the C language. One of a select few "classics" of CS literature. This book's reverential status in the Computer Science community means its hard to find a clear-headed evaluation of its strengths and drawbacks. While a supremely clear and technical piece of writing, it objectively does teach a version of C (C89) that is long out of date: learners will find themselves unfamiliar with many commonly used practices.  ([https://web.archive.org/web/20161202075259/https://hassanolity.files.wordpress.com/2013/11/the_c_programming_language_2.pdf PDF Download])
* [http://data.a5.tf/Books/Programming/C/The%20C%20Programming%20Language%20-%202nd%20edition.pdf O'Reilly - The C Programming Language]
+
* '''O'Reilly - Practical C Programming''' ([https://repo.zenk-security.com/Programmation/O%20Reilly%20-%20Practical%20C%20Programming,%203rd%20Edition.pdf PDF Download])
 +
* '''C Programming: A Modern Approach''' by K. N. King. This is an alternative to K&R, considered by some to be pedagogically superior at the expense of length. At more than 800 pages, it goes a lot more in depth into C: offering a far greater range of exercises, up-to-date practices, and a comprehensive Q&A section at the end of every chapter. It also teaches C99, broadly considered the last "major" update to C (later standards of C are more focused on tweaks). Structurally, ''A Modern Approach'' is written in such a way that "teaches" you C, making it distinct from the more technical writing of K&R; learners will have valid reasons to prefer one style over the other.
 +
* '''Beej's Guide to Network Programming''' by Brian "Beej Jorgensen" Hall ([http://beej.us/guide/bgnet/output/print/bgnet_USLetter.pdf PDF Download])
 +
* '''Modern C''' by Jens Gustedt. This book aims to teach C in the distinct way it is used in professional environments today. The code the author writes is immediately distinct from C books written in the 20th century. Suitable for both complete beginners and those with C experience; the latter will find it just as useful with this book "relearning" the language in a different way. ([https://hal.inria.fr/hal-02383654/file/ModernC.pdf Official PDF Download])
  
 
== C++ ==
 
== C++ ==
* [http://roneducate.weebly.com/uploads/6/2/3/8/6238184/c_for_everyone_2nd_edition_horstmann_wiley_plus_textbook.pdf C++ for Everyone, 2nd ed.]
+
=== Beginner ===
* [http://data.a5.tf/Books/Programming/C%2B%2B/Accelerated%20C%2B%2B%202000.pdf Accelerated C++ 2000]
+
==== For the inexperienced ====
 +
 
 +
* Programming: Principles and Practice Using C++, 2nd Ed. by Bjarne Stroustrup
 +
 
 +
==== With experience in programming ====
 +
* C++ for Everyone, 2nd ed. ([http://roneducate.weebly.com/uploads/6/2/3/8/6238184/c_for_everyone_2nd_edition_horstmann_wiley_plus_textbook.pdf PDF download])
 +
* Accelerated C++ 2000 ([https://tfetimes.com/wp-content/uploads/2015/11/Accelerated_C-_Practical_Programming_by_Example_-_Andrew_Koenig_Barbara_E._Moo_-_Addison-Wesley_-_2000.pdf PDF download])
 +
* C++ Primer, 5th Edition. ([https://breezeflutter.files.wordpress.com/2013/06/c_primer_5th_edition.pdf PDF])
 +
=== OG Best Practices ===
 +
* Effective C++, 3rd Edition by Scott Meyers
 +
* Modern Effective C++, 1st Edition by Scott Meyers
 +
* Effective STL, 1st Edition by Scott Meyers
 +
=== Intermediate ===
 +
* More Effective C++, 1st Edition by Scott Meyers
 +
* Exceptional C++ by Herb Sutter
 +
* More Exceptional C++, 1st Edition by Herb Sutter
 +
* Exceptional Style Guide, 1st Edition by Herb Sutter
 +
* C++ Coding Standards, 1st Edition by Scott Meyers and Andrei Alexandrescu
 +
* C++ Templates: The Complete Guide, 1st Edition by David Vandevoorde and Nicolai M. Josuttis
 +
=== Advanced ===
 +
* Modern C++ Design, 1st Edition by Andrei Alexandrescu
 +
* C++ Template Metaprogramming by David Abrahams and Aleksey Gurtovoy
 +
* C++ Concurrency In Action, 1st Edition by Anthony Williams
 +
* Advanced C++ Metaprogramming by Davide Di Gennaro
 +
=== References ===
 +
* The C++ Programming Language by Bjarne Stroustrup
 +
* C++ Standard Library Tutorial and Reference by Nicolai Josuttis
 +
* The C++ IO Streams and Locales
 +
=== C++11 / C++14 standards references ===
 +
* Overview of the New C++ (C++11/C++14) by Scott Meyers ([http://www.artima.com/shop/overview_of_the_new_cpp link])
 +
* C++ Core Guidelines by Bjarne Stroustrup and Herb Stutter ([https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md Github readme.md file])
 +
* C++ Best Practices, ([https://www.gitbook.com/book/lefticus/cpp-best-practices/details GitBook/PDF download])
 +
 
 +
*([https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list C++ sauce list])
  
 
== C# ==
 
== C# ==
* [http://data.a5.tf/Books/Programming/C%23/Apress%20Accelerated%20C%20Sharp%202010.pdf Apress Accelerated C# 2010]
+
* Apress Accelerated C# 2010 ([http://www.clicktocontinue.com/books/apress.accelerated.c.sharp.2010.jan.2010.pdf PDF download])
 +
 
 +
== Forth ==
 +
* Thinking Forth ([http://thinking-forth.sourceforge.net/ PDF download])
 +
 
 +
== Go ==
 +
* '''The Go Programming Language''' by Alan A. A. Donovan & Brian W. Kernighan ([https://www.gopl.io/ Website for the book])
 +
 
 +
== Java ==
 +
 
 +
* '''Java, A Beginner's Guide''' by Herbert Schildt
 +
* '''Head First Java, 2nd Edition''' by Kathy Sierra & Bert Bates
 +
* '''Effective Java''' by Joshua Bloch
 +
* '''Thinking in Java''' by Bruce Eckel
  
 
== Haskell ==
 
== Haskell ==
* [http://learnyouahaskell.com/chapters Learn You a Haskell for Great Good!]
+
* Learn You a Haskell for Great Good! ([http://learnyouahaskell.com/chapters Read it online])
* [http://book.realworldhaskell.org/read/ Real World Haskell]
+
* Real World Haskell ([http://book.realworldhaskell.org/read Read it online])
 +
* Haskell Programming From First Principles ([https://haskellbook.com/ Website for the book])
 +
* Programming in Haskell ([https://www.cs.nott.ac.uk/~pszgmh/pih.html Website for the book])
  
 
== Lisp ==
 
== Lisp ==
  
 +
=== Scheme ===
 
* [[Structure and Interpretation of Computer Programs]] ([https://mitpress.mit.edu/sicp/full-text/book/book.html Read it online])
 
* [[Structure and Interpretation of Computer Programs]] ([https://mitpress.mit.edu/sicp/full-text/book/book.html Read it online])
 +
* The Little Schemer
 +
* The Seasoned Schemer
 +
* The Reasoned Schemer
 +
* The Realm of Racket ([http://realmofracket.com/ Website for the book])
 +
* How to Design Programs, 2nd Edition ([http://www.ccs.neu.edu/home/matthias/HtDP2e/index.html Read it online])
 +
 +
=== Common Lisp ===
 
* Common Lisp: A Gentle Introduction to Symbolic Computation ([http://www.cs.cmu.edu/~dst/LispBook/ PDF download])
 
* Common Lisp: A Gentle Introduction to Symbolic Computation ([http://www.cs.cmu.edu/~dst/LispBook/ PDF download])
* Practical Common Lisp ([http://gigamonkeys.com/book/ Read it Online])
+
* Practical Common Lisp ([http://gigamonkeys.com/book/ Read it online])
 
* On Lisp ([http://www.paulgraham.com/onlisp.html PDF and Postscript download])
 
* On Lisp ([http://www.paulgraham.com/onlisp.html PDF and Postscript download])
 +
* Let Over Lambda ([http://letoverlambda.com/ Website for the book]) ([http://letoverlambda.com/index.cl/toc The first six chapters])
 +
* The Land of Lisp ([http://landoflisp.com/ Website for the book])
  
 
== Pascal ==
 
== Pascal ==
* [http://www.marcocantu.com/epascal/ Essential Pascal]
+
* Essential Pascal ([http://www.marcocantu.com/epascal/EssentialPascal.zip PDF download])
* [http://code-sd.com/books/startprog/ Start Programming Using Object Pascal]
+
* Tutorials Point Pascal ([http://www.tutorialspoint.com/pascal/pascal_tutorial.pdf PDF download])
 +
* Start Programming Using Object Pascal ([http://code-sd.com/startprog/StartProgUsingPascal.pdf PDF download])
 +
 
 +
== Ruby ==
 +
* '''The Ruby Programming Language''' by David Flanagan and Yukihiro Matsumoto
 +
* '''Ruby In A Nutshell''' by Yukihiro Matsumoto
 +
* '''Programming Ruby 1.9 & 2.0 (4th edition)''' (a.k.a. The Pickaxe) by Dave Thomas, Chad Fowler and Andy Hunt
 +
* '''Metaprogramming Ruby''' by Paolo Perrotta
 +
* '''Eloquent Ruby''' by Russ Olsen
 +
* '''The Well-Grounded Rubyist''' by David A. Black
 +
 
 +
== Rust ==
 +
* The Rust Prgramming Language by Steve Klabnik and Carol Nichols ([https://doc.rust-lang.org/stable/book/ Free online. The best way to learn the language and known as 'the book'])
 +
* An unofficial video form of 'the book' can be found on YouTube ([https://www.youtube.com/channel/UCSp-OaMpsO8K0KkOqyBl7_w Lets Get Rusty])
 +
* Doug Milford's YouTube series ([https://www.youtube.com/watch?v=Az3jBd4xdF4&list=PLLqEtX6ql2EyPAZ1M2_C0GgVd4A-_L4_5 another great intro to Rust programming])
 +
* Rust For Rustaceans by Jon Gjengset ([https://nostarch.com/rust-rustaceans expensive but advised reading after The Rust Programming Language ])
 +
* Rust In Action by Tim McNara ([https://www.rustinaction.com/ Teaches systems programming projects])
  
 
== Python ==
 
== Python ==
* [http://inventwithpython.com/chapters/ Invent Your Own Computer Games with Python]
+
* Invent Your Own Computer Games with Python ([http://inventwithpython.com/chapters/ Read it online])
** [http://inventwithpython.com/pygame/chapters/ Making Games with Python and Pygame]
+
** Making Games with Python and Pygame ([http://inventwithpython.com/pygame/chapters/ Read it online])
** [http://inventwithpython.com/hacking/chapters/ Hacking Secret Ciphers with Python]
+
** Hacking Secret Ciphers with Python ([http://inventwithpython.com/hacking/chapters/ Read it online])
* [https://7chan.org/pr/src/Starting_Out_with_Python_-_2nd_Edition.pdf Starting Out with Python, 2nd ed.]
+
* Starting Out with Python, 2nd ed. ([https://7chan.org/pr/src/Starting_Out_with_Python_-_2nd_Edition.pdf PDF download])
* [http://www.greenteapress.com/thinkpython/html/index.html Think Python: How to Think Like a Computer Scientist, Ver 2.0.12]
+
* Think Python: How to Think Like a Computer Scientist, Ver 2.0.12 ([http://www.greenteapress.com/thinkpython/html/index.html Read it online])
* [http://learnpythonthehardway.org/book/ Learn Python The Hard Way, 3rd Edition]
+
* Learn Python The Hard Way, 3rd Edition ([http://learnpythonthehardway.org/book/ Read it online])
 +
* Automate the Boring Stuff with Python ([https://automatetheboringstuff.com/ Read it online]). Especially good for those who have never programmed before.
 +
* Composing Programs ([https://www.composingprograms.com/ Read it online]).  Inspired by Structure and Interpretation of Computer Programs.  More of a beginner computer science book than a purely Python book.
  
 
[[Category:Programming]]
 
[[Category:Programming]]
 +
[[Category:Recommendations]]

Latest revision as of 12:01, 16 November 2024

The principal programming paradigms

The following is a list of recommended books for learning how to program:

First, check GitHub's extensive list of free programming books: https://github.com/EbookFoundation/free-programming-books/blob/main/books/free-programming-books-en.md

The gentoomen have also provided a torrent/magnet which has a metric fuckton of books, and if you prefer actual physical books, you can get them for really cheap from http://abebooks.com

If you don't see the book you're looking for listed, search the following lists for other sources of books:

God-tier books

Read 'em up!

These books are essential books that people should have, or at least have read or know about:

  • Compilers: Principles, Techniques and Tools (a.k.a The Dragon Book). This book is loaded with all the theory and concepts needed to design, implement and optimise a compiler. It's the go-to compiler book.
  • Operating Systems: Design and Implementation (a.k.a the MINIX book). This is one of the books Linus Torvalds used to write the original Linux kernel. This also contains over 500 pages of the entire MINIX source code at the back as an appendix, and if you're lucky, a MINIX installation CD with instructions.
  • The Art of Computer Programming by Donald Knuth (essentially the holy grail of Computer Science literature). Bill Gates said that if anyone can read every volume in TAOCP from cover to cover, then they should definitely send him their CV/Resume.
  • The Mythical Man Month: Essays on Software Engineering. A compilation of essays on what experienced software engineers and programmers have learned from their successes and failures over many years.
  • Design Patterns: Elements of Reusable Object-Oriented Software. Design patterns and principles designed to help object-oriented software.
  • The Cathedral and the Bazaar. Eric S. Raymond's book on Closed-house development (cathedral) vs open-source, distributed development (bazaar), and how the latter is much more effective.
  • The C Programming Language, mentioned below. Also known as K&R because it was written by the founders of C, Brian Kernighan and Dennis Ritchie.
  • Structure and Interpretation of Computer Programs, listed below
  • The UNIX Programming Environment, 2nd edition An excellent introductory *nix book. Written by Brian Kernighan (of K&R) and Rob Pike (Plan9, Golang), both of whom were part of the Unix team at Bell Labs.
  • Advanced UNIX Programming, 2nd Edition Recommended as a follow on book from The UNIX Programming Environment. Contains information on over 300 syscalls.
  • The Pragmatic Programmer Cuts through the increasing specialization and technicalities of modern software development to examine the core process—what do you do, as an individual and as a team, if you want to create software that’s easy to work with and good for your users.
  • Introduction to Algorithms The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers.
  • The Tao of Programming The themes of the book espouse many hacker ideals – managers should leave programmers to their work; code should be small, elegant, and maintainable; corporate wisdom is more often than not an oxymoron; and so on.
  • Hacker's Delight It discusses a variety of programming algorithms for common tasks involving integer types, often with the aim of performing the minimum number of operations or replacing slow operations by faster ones.
  • Code Complete A compendium of software construction techniques, from naming variables to deciding when to write a subroutine.

Ada

  • Programming in Ada 2012 by John Barnes

AWK

  • The AWK Programming Language by Alfred V. Aho, Brian W. Kernighan, and Peter J. Weinberger

C

  • The C Programming Language (commonly K&R) by Brian Kernighan and Dennis Ritchie, the creators of the C language. One of a select few "classics" of CS literature. This book's reverential status in the Computer Science community means its hard to find a clear-headed evaluation of its strengths and drawbacks. While a supremely clear and technical piece of writing, it objectively does teach a version of C (C89) that is long out of date: learners will find themselves unfamiliar with many commonly used practices. (PDF Download)
  • O'Reilly - Practical C Programming (PDF Download)
  • C Programming: A Modern Approach by K. N. King. This is an alternative to K&R, considered by some to be pedagogically superior at the expense of length. At more than 800 pages, it goes a lot more in depth into C: offering a far greater range of exercises, up-to-date practices, and a comprehensive Q&A section at the end of every chapter. It also teaches C99, broadly considered the last "major" update to C (later standards of C are more focused on tweaks). Structurally, A Modern Approach is written in such a way that "teaches" you C, making it distinct from the more technical writing of K&R; learners will have valid reasons to prefer one style over the other.
  • Beej's Guide to Network Programming by Brian "Beej Jorgensen" Hall (PDF Download)
  • Modern C by Jens Gustedt. This book aims to teach C in the distinct way it is used in professional environments today. The code the author writes is immediately distinct from C books written in the 20th century. Suitable for both complete beginners and those with C experience; the latter will find it just as useful with this book "relearning" the language in a different way. (Official PDF Download)

C++

Beginner

For the inexperienced

  • Programming: Principles and Practice Using C++, 2nd Ed. by Bjarne Stroustrup

With experience in programming

OG Best Practices

  • Effective C++, 3rd Edition by Scott Meyers
  • Modern Effective C++, 1st Edition by Scott Meyers
  • Effective STL, 1st Edition by Scott Meyers

Intermediate

  • More Effective C++, 1st Edition by Scott Meyers
  • Exceptional C++ by Herb Sutter
  • More Exceptional C++, 1st Edition by Herb Sutter
  • Exceptional Style Guide, 1st Edition by Herb Sutter
  • C++ Coding Standards, 1st Edition by Scott Meyers and Andrei Alexandrescu
  • C++ Templates: The Complete Guide, 1st Edition by David Vandevoorde and Nicolai M. Josuttis

Advanced

  • Modern C++ Design, 1st Edition by Andrei Alexandrescu
  • C++ Template Metaprogramming by David Abrahams and Aleksey Gurtovoy
  • C++ Concurrency In Action, 1st Edition by Anthony Williams
  • Advanced C++ Metaprogramming by Davide Di Gennaro

References

  • The C++ Programming Language by Bjarne Stroustrup
  • C++ Standard Library Tutorial and Reference by Nicolai Josuttis
  • The C++ IO Streams and Locales

C++11 / C++14 standards references

C#

Forth

Go

Java

  • Java, A Beginner's Guide by Herbert Schildt
  • Head First Java, 2nd Edition by Kathy Sierra & Bert Bates
  • Effective Java by Joshua Bloch
  • Thinking in Java by Bruce Eckel

Haskell

Lisp

Scheme

Common Lisp

Pascal

Ruby

  • The Ruby Programming Language by David Flanagan and Yukihiro Matsumoto
  • Ruby In A Nutshell by Yukihiro Matsumoto
  • Programming Ruby 1.9 & 2.0 (4th edition) (a.k.a. The Pickaxe) by Dave Thomas, Chad Fowler and Andy Hunt
  • Metaprogramming Ruby by Paolo Perrotta
  • Eloquent Ruby by Russ Olsen
  • The Well-Grounded Rubyist by David A. Black

Rust

Python

  • Invent Your Own Computer Games with Python (Read it online)
  • Starting Out with Python, 2nd ed. (PDF download)
  • Think Python: How to Think Like a Computer Scientist, Ver 2.0.12 (Read it online)
  • Learn Python The Hard Way, 3rd Edition (Read it online)
  • Automate the Boring Stuff with Python (Read it online). Especially good for those who have never programmed before.
  • Composing Programs (Read it online). Inspired by Structure and Interpretation of Computer Programs. More of a beginner computer science book than a purely Python book.