* Update free-programming-books-subjects.md
I am the author of a new language-agnostic introduction-to-programming textbook, discovered this site, and would like to add my book. The use case I am thinking of is this:
A kid wants to learn to program, doesn't know which in language, and comes to this:
BY PROGRAMMING LANGUAGE
Originally, this list included a section called "Language Agnostic" for books about
programming subjects not restricted to a specific programming language. That
section got so big, we decided to split it into its own file, the BY SUBJECT file.
The kid in intrigued by the idea of learning programming in a language-agnostic manner, goes to BY SUBJECT, and but finds there a list of specialized and advanced-sounding topics. The kid just wants to learn to program, and not finding a suitable category in which to look, is encouraged thereby to return to BY PROGRAMMING LANGUAGE, pick a specific language, and go down that path.
Little did the kid suspect that there are language-agnostic introductory-programming texts in Theoretical Computer Science. It took Eric Hellman to point out to me that this is where such great language-agnostic introductory-programming texts as SICP/Ableson&Sussman are catalogued (Yes, SICP uses Scheme, but it isn't really about "How to Program in Scheme"). But the kid will never find SICP, because "Theoretic Computer Science" is an intimidating misnomer. (And furthermore, the category does include highly-theoretical books.) The kid has lost an opportunity, and has been led to believe that programming is all about learning one of the standard programming languages.
I am proposing to:
1. Rename the category "Language-Agnostic Introductory Programming / Theoretical Computer Science".
2. Move into alphabetical order in the list of subjects.
3. Insert my own book there.
My preference (frankly) would be to separate introductory programming textbooks from highly theoretical books, but (certainly, as a newcomer to the site) I don't propose such a step.
* New subject: "Programming"
Split "Theoretical Computer Science" into "Programming" and (the residual list) "Theoretical Computer Science".
Add my book to "Programming".
* Clarify where Language-Agnostic books went.
Add one sentence to the preamble clarifying where Language-Agnostic books went.
* Add an extra line
Added an extra line to fix a lint error
Originally, this list included a section called "Language Agnostic" for books about programming subjects not restricted to a specific programming language.
Originally, this list included a section called "Language Agnostic" for books about programming subjects not restricted to a specific programming language.
That section got so big, we decided to split it into its own file, the [BY SUBJECT file](free-programming-books-subjects.md).
That section got so big, we decided to split it into its own file, the [BY SUBJECT file](free-programming-books-subjects.md).
Books on general-purpose programming that don't focus on a specific language are in listed in the subject "Programming". Books on specialized topics are listed in their own sub-sections.
* [What I've Learned From Failure](https://leanpub.com/shippingsoftware/read) - Reginald Braithwaite
* [What I've Learned From Failure](https://leanpub.com/shippingsoftware/read) - Reginald Braithwaite
### Programming
* [Design of a Programmer](https://www.smashwords.com/books/view/639609) - Prakash Hegade (PDF)
* [Introduction to Computer Science](http://www.cse.iitd.ernet.in/~suban/CSL102/) - Prof. Subhashis Banerjee, IIT Delhi
* [Introduction to Computing](http://www.computingbook.org) - David Evans
* [Principled Programming / Introduction to Coding in Any Imperative Language](https://www.cs.cornell.edu/info/people/tt/Principled_Programming.html) - Tim Teitelbaum
* [Programming and Programming Languages](https://papl.cs.brown.edu/2019/) - Shriram Krishnamurthi
* [Structure and Interpretation of Computer Programs](https://web.mit.edu/6.001/6.037/sicp.pdf) - Harold Abelson, Gerald Jay Sussman, Julie Sussman (PDF)
* [Structure and Interpretation of Computer Programs](https://sarabander.github.io/sicp/html/index.xhtml) - Harold Abelson, Gerald Jay Sussman, Julie Sussman (HTML)
* [The Black Art of Programming](http://self.gutenberg.org/wplbn0002828847-the-black-art-of-programming-by-mcilroy-mark.aspx?) - Mark McIlroy
* [The Craft of Programming](https://kilthub.cmu.edu/articles/The_Craft_of_Programming/6610514) - John C. Reynolds
* [The Nature of Code](https://natureofcode.com/book) - Daniel Shiffman (HTML)
* [Think Complexity](https://greenteapress.com/wp/think-complexity-2e/) - - Allen B. Downey (2nd Edition) (PDF, HTML)
### Programming Paradigms
### Programming Paradigms
* [Flow based Programming](http://jpaulmorrison.com/fbp/) - J Paul Morrison
* [Flow based Programming](http://jpaulmorrison.com/fbp/) - J Paul Morrison
* [Category Theory for Computing Science](http://www.tac.mta.ca/tac/reprints/articles/22/tr22.pdf) (PDF)
* [Category Theory for Computing Science](http://www.tac.mta.ca/tac/reprints/articles/22/tr22.pdf) (PDF)
* [Category Theory for Programmers](https://github.com/hmemcpy/milewski-ctfp-pdf) - Bartosz Milewski (PDF)
* [Category Theory for Programmers](https://github.com/hmemcpy/milewski-ctfp-pdf) - Bartosz Milewski (PDF)
* [Delftse Foundations of Computation](https://textbooks.open.tudelft.nl/textbooks/catalog/book/13) - Stefan Hugtenburgand, Neil Yorke-Smith @ TU Delft Open (PDF)
* [Delftse Foundations of Computation](https://textbooks.open.tudelft.nl/textbooks/catalog/book/13) - Stefan Hugtenburgand, Neil Yorke-Smith @ TU Delft Open (PDF)
* [Design of a Programmer](https://www.smashwords.com/books/view/639609) - Prakash Hegade (PDF)
* [Homotopy Type Theory: Univalent Foundations of Mathematics](http://homotopytypetheory.org/book/) (PDF)
* [Homotopy Type Theory: Univalent Foundations of Mathematics](http://homotopytypetheory.org/book/) (PDF)
* [Introduction to Computer Science](http://www.cse.iitd.ernet.in/~suban/CSL102/) - Prof. Subhashis Banerjee, IIT Delhi
* [Introduction to Computing](http://www.computingbook.org)
* [Introduction to Theory of Computation](http://cglab.ca/~michiel/TheoryOfComputation/) - Anil Maheshwari, Michiel Smid (PDF)
* [Introduction to Theory of Computation](http://cglab.ca/~michiel/TheoryOfComputation/) - Anil Maheshwari, Michiel Smid (PDF)
* [Models of Computation](http://cs.brown.edu/people/jes/book/) - John E. Savage
* [Models of Computation](http://cs.brown.edu/people/jes/book/) - John E. Savage
* [Practical Foundations for Programming Languages, Preview](https://www.cs.cmu.edu/~rwh/pfpl/2nded.pdf) - Robert Harper (PDF)
* [Practical Foundations for Programming Languages, Preview](https://www.cs.cmu.edu/~rwh/pfpl/2nded.pdf) - Robert Harper (PDF)
* [Principles of Programming Languages](https://web.archive.org/web/20150418034451/http://www.cs.jhu.edu/~scott/pl/book/dist/) - Scott F. Smith
* [Principles of Programming Languages](https://web.archive.org/web/20150418034451/http://www.cs.jhu.edu/~scott/pl/book/dist/) - Scott F. Smith
* [Programming and Programming Languages](https://papl.cs.brown.edu/2019/) - Shriram Krishnamurthi
* [Programming in Martin-Löf's Type Theory](http://www.cse.chalmers.se/research/group/logic/book/) - Bengt Nordstroem
* [Programming in Martin-Löf's Type Theory](http://www.cse.chalmers.se/research/group/logic/book/) - Bengt Nordstroem
* [Programming Languages: Theory and Practice](http://people.cs.uchicago.edu/~blume/classes/aut2008/proglang/text/offline.pdf) - Robert Harper (PDF)
* [Programming Languages: Theory and Practice](http://people.cs.uchicago.edu/~blume/classes/aut2008/proglang/text/offline.pdf) - Robert Harper (PDF)
* [Semantics with Applications: A Formal Introduction](http://www.cs.ru.nl/~herman/onderwijs/semantics2019/wiley.pdf) - Hanne Riis Nielson, Flemming Nielson (PDF)
* [Semantics with Applications: A Formal Introduction](http://www.cs.ru.nl/~herman/onderwijs/semantics2019/wiley.pdf) - Hanne Riis Nielson, Flemming Nielson (PDF)
* [Structure and Interpretation of Computer Programs](https://web.mit.edu/6.001/6.037/sicp.pdf) - Harold Abelson, Gerald Jay Sussman, Julie Sussman (PDF)
* [Structure and Interpretation of Computer Programs](https://sarabander.github.io/sicp/html/index.xhtml) - Harold Abelson, Gerald Jay Sussman, Julie Sussman (HTML)
* [The Black Art of Programming](http://self.gutenberg.org/wplbn0002828847-the-black-art-of-programming-by-mcilroy-mark.aspx?) - Mark McIlroy
* [The Craft of Programming](https://kilthub.cmu.edu/articles/The_Craft_of_Programming/6610514) - John C. Reynolds
* [The Nature of Code](https://natureofcode.com/book) - Daniel Shiffman (HTML)
* [Theory of Computation, Making Connections](https://joshua.smcvt.edu/computation) - Jim Hefferon (PDF)
* [Think Complexity](https://greenteapress.com/wp/think-complexity-2e/) - - Allen B. Downey (2nd Edition) (PDF, HTML)
### <aid="version-control-systems"></a><aid="git"></a><aid="svn"></a><aid="subversion"></a><aid="mercurial"></a>Version Control Systems
### <aid="version-control-systems"></a><aid="git"></a><aid="svn"></a><aid="subversion"></a><aid="mercurial"></a>Version Control Systems