free-programming-books

:books: Freely available programming books

View the Project on GitHub EbookFoundation/free-programming-books

Read this in other languages

Contributor License Agreement

By contributing, you agree to the LICENSE of this repository.

Contributor Code of Conduct

By contributing, you agree to respect the Code of Conduct of this repository. (translations)

In a nutshell

  1. “A link to easily download a book” is not always a link to a free book. Please only contribute free content. Make sure it’s free. We do not accept links to pages that require working email addresses to obtain books, but we welcome listings that request them.

  2. You don’t have to know Git: if you found something of interest which is not already in this repo, please open an Issue with your links propositions.
    • If you know Git, please Fork the repo and send Pull Requests (PR).
  3. We have 6 kinds of lists. Choose the right one:

    • Books : PDF, HTML, ePub, a gitbook.io based site, a Git repo, etc.
    • Courses : A course is a learning material which is not a book. This is a course.
    • Interactive Tutorials : An interactive website which lets the user type code or commands and evaluates the result (by “evaluate” we don’t mean “grade”). e.g.: Try Haskell, Try Git.
    • Playgrounds : are online and interactive websites, games or desktop software for learning programming. Write, compile (or run), and share code snippets. Playgrounds often allow you to fork and get your hands dirty by playing with code.
    • Podcasts and Screencasts : Podcasts and screencasts.
    • Problem Sets & Competitive Programming : A website or software which lets you assess your programming skills by solving simple or complex problems, with or without code review, with or without comparing the results with other users.
  4. Make sure to follow the guidelines below and respect the Markdown formatting of the files.

  5. GitHub Actions will run tests to make sure your lists are alphabetized and formatting rules are followed. Be sure to check that your changes pass the tests.

Guidelines

Formatting

The idea is to have:

Example:

[...]
* [An Awesome Book](http://example.com/example.html)
                                (blank line)
                                (blank line)
### Example
                                (blank line)
* [Another Awesome Book](http://example.com/book.html)
* [Some Other Book](http://example.com/other.html)

Alphabetical order

If you see a misplaced link, check the linter error message to know which lines should be swapped.

Notes

While the basics are relatively simple, there is a great diversity in the resources we list. Here are some notes on how we deal with this diversity.

Metadata

Our lists provide a minimal set of metadata: titles, URLs, creators, platforms, and access notes.

Titles
URLs
Creators
Time-limited Courses and Trials
Platforms and Access Notes

Genres

The first rule in deciding which list a resource belongs in is to see how the resource describes itself. If it calls itself a book, then maybe it’s a book.

Genres we don’t list

Because the Internet is vast, we don’t include in our lists:

Our competitive programming lists are not as strict about these exclusions. The scope of the repo is determined by the community; if you want to suggest a change or addition to the scope, please use an issue to make the suggestion.

Books vs. Other Stuff

We’re not that fussy about book-ness. Here are some attributes that signify that a resource is a book:

There are lots of books that we list that don’t have these attributes; it can depend on context.

Books vs. Courses

Sometimes these can be hard to distinguish!

Courses often have associated textbooks, which we would list in our books lists. Courses have lectures, exercises, tests, notes or other didactic aids. A single lecture or video by itself is not a course. A PowerPoint is not a course.

Interactive Tutorials vs. Other stuff

If you can print it out and retain its essence, it’s not an Interactive Tutorial.

Automation