EbookFoundation/free-programming-books. 무료 학습 자원 — 프로그래밍 책 · 온라인 강의 · 치트시트 · 인터랙티브 튜토리얼 · 코딩 놀이터 · 팟캐스트 · 알고리즘 문제집을 여러 언어로 모은 거대한 큐레이션 목록이다. 비영리 단체 Free Ebook Foundation이 관리하며, 전부 평범한 Markdown 파일로 돼 있다. 오랫동안 GitHub 전체에서 가장 많은 별을 받은 레포로 꼽혀 왔다(집계 시점에 따라 순위는 바뀔 수 있음). 실행되는 앱이 아니라, 1만 3천여 개의 링크를 사람 손으로 선별·검증·다국어화해 온 awesome 리스트의 정점이다. (저장소: EbookFoundation/free-programming-books · 형식 Markdown 큐레이션(Jekyll 사이트) · 라이선스 CC BY 4.0 · ★ 약 391k · 기여자 2,000+ · 관리 Free Ebook Foundation)
"전 세계 개발자가 함께 채워 온, '무료로 배울 수 있는 모든 것'의 다국어 도서관 목록."
프로그래밍을 배우고 싶은데 돈은 없을 때, 어디서 무료 자료를 찾을까요? 이 레포가 그 답입니다. 1만 개가 넘는 무료 자원을 자원 종류(책·강의·치트시트·놀이터…), 프로그래밍 언어(파이썬·러스트·고…), 그리고 읽는 사람의 언어(한국어·중국어·스페인어…)로 분류해 두었습니다. 전부 평범한 텍스트(Markdown) 파일이라 누구나 GitHub에서 읽거나, 발행된 웹사이트에서 검색할 수 있습니다. 그리고 이 목록 자체가 전 세계 2,000명 넘는 자원봉사자가 함께 키워 온, 비영리 재단의 공공재입니다.
핵심을 한 번 더 — 이 레포에는 실행할 애플리케이션이 없습니다(최상위에 package.json조차 없습니다). 그래서 이 문서도 "코드 아키텍처"가 아니라, "이 거대한 목록이 어떻게 조직·검증·발행되는가"와 "어떻게 활용해 공부하는가"를 파고듭니다. 특히 1만 개 링크를 자동화로 관리하는 방식은 대규모 오픈소스 협업의 훌륭한 교본입니다.
"압도적 규모, 비영리 재단의 신뢰, 그리고 'Stack Overflow 글 → GitHub 1위 레포'라는 전설적 역사."
인터넷에는 무료 학습 자료가 넘치지만, 흩어져 있어 찾기 어렵고, 링크는 시간이 지나면 죽습니다. "정말 무료인지", "내 언어로 된 게 있는지", "최신인지"를 일일이 확인하기도 번거롭습니다. 개인이 북마크로 관리하기엔 양이 너무 많습니다.
검색은 광고·유료·낚시 링크에 묻히기 쉽고, '진짜 무료이고 합법적인' 자료만 걸러 주지 않습니다. 또 비영어권 학습자에게 자기 모국어 자료를 찾아 주지도 못하죠. 무엇보다, 한 번 찾은 좋은 링크가 1년 뒤엔 404가 돼 있기 일쑤입니다(링크 로트).
이 레포는 자원봉사자가 '진짜 무료'만 선별하고, 자동 검사기(linter + 링크 검사)가 형식·정렬·죽은 링크를 PR마다 점검합니다. 책은 언어별로도 주제별로도 찾을 수 있고, 학습자의 모국어 파일(한국어 -ko 등)도 따로 있습니다. 모두 CC BY로 공개돼 자유롭게 재사용됩니다.
| 지표 | 값 |
|---|---|
| 총 링크 | 약 12,991개(books·courses·casts·more 합산) |
| 영어 '언어별 책' | 153개 섹션, ~1,868 링크 (-langs.md) |
| 영어 '주제별 책' | 47개 주제 섹션 (-subjects.md) |
| 책 번역본 | 46개 비영어 언어(아랍어~베트남어) |
| 스타 / 기여자 | 약 391k ★ / 2,000+ 기여자 / 50,000+ 포크 |
| 라이선스 | CC BY 4.0 |
이 레포 = 전 세계가 함께 만든 무료 도서관 + 사서 시스템. 책(자료)은 자원봉사자들이 기증·검수하고, 사서 로봇(자동 검사기)이 매일 서가를 돌며 "이 책 아직 있나(죽은 링크 아닌가)", "분류가 알파벳순으로 맞나"를 점검합니다. 게다가 각국 언어로 된 분관까지 운영하죠.
이 레포의 시작은 Stack Overflow의 한 글("List of Freely Available Programming Books")이었습니다. 그게 점점 커지자 Victor Felder가 협업을 위해 GitHub으로 옮겼고, 지금은 Free Ebook Foundation(비영리)이 관리합니다. 매년 Hacktoberfest에 참여해 신규 기여자를 받아들이고요. '질문 글 하나가 GitHub 최상위 레포가 된' 이 서사가, 오픈소스 협업의 힘을 보여 주는 상징으로 자주 회자됩니다.
"내용은 Markdown, 발행은 Jekyll(GitHub Pages), 품질은 PR마다 도는 3종 검사기(npm·Ruby·Python)."
앱 런타임은 없습니다. 이 레포의 '스택'은 문서 + 발행 + 검증 자동화 파이프라인입니다. 흥미롭게도 단순한 목록치고 엔지니어링이 꽤 진지합니다.
| 구성 | 내용 |
|---|---|
| 형식 | 100% Markdown. .editorconfig로 UTF-8·LF·4칸 들여쓰기 강제(단, .md의 줄끝 공백은 보존 — 마크다운 줄바꿈이기 때문). |
| 정적 사이트 | Jekyll + GitHub Pages. remote_theme: pages-themes/minimal, kramdown 마크다운 엔진, jemoji·jekyll-relative-links 플러그인. |
| 발행 주소 | ebookfoundation.github.io/free-programming-books |
| 검색 | 별도 자매 레포(free-programming-books-search)에서 제목·저자로 전체 검색 제공. |
.md만 고치면, Jekyll이 자동으로 보기 좋은 웹페이지로 바꿔 발행합니다 — 서버·DB 없이 텍스트 파일만으로 사이트가 돌아가는 구조입니다..github/workflows/에 정의된 GitHub Actions가 PR이 올라올 때마다 품질을 지킵니다.
| 워크플로 | 하는 일 |
|---|---|
| fpb-lint | Node.js로 형식·알파벳 정렬 검사기(free-programming-books-lint npm 패키지) 실행. 이 레포만의 맞춤 린터. |
| check-urls | Ruby 젬 awesome_bot으로 바뀐 파일의 죽은 링크를 병렬(최대 10) 검사(--allow-redirect 등). |
| rtl-ltr-linter | 저장소 안 Python 스크립트(scripts/rtl_ltr_linter.py)로 아랍어·히브리어 등 양방향(BIDI) 텍스트가 깨지지 않는지 검사. |
| comment-pr | 린트가 끝나면 결과를 PR에 자동 댓글로 달고 linter error 라벨을 붙임(고치면 제거). |
| stale / dependabot | 오래된 PR 자동 정리, Actions 의존성 주간 업데이트. |
참고로 최상위에 package.json은 없습니다. 형식 린터(fpb-lint)는 별도 npm 패키지로 분리돼 있고, 링크 검사는 Ruby, BIDI 검사는 Python — 검증이 로컬 git 훅이 아니라 'PR마다 서버에서 도는' 방식이라는 게 핵심입니다.
"세 개의 축 — ① 자원 종류(책·강의·치트시트), ② 언어별 vs 주제별, ③ 읽는이의 모국어."
같은 책 더미를 두 가지 방식으로 색인합니다. free-programming-books-langs.md는 프로그래밍 언어별(C·Python·Rust… 153개 섹션)이고, free-programming-books-subjects.md는 주제별(알고리즘·AI·블록체인·데이터과학·OS·보안·프롬프트 엔지니어링… 47개 섹션)입니다. "파이썬 책"을 찾는 사람과 "머신러닝 책"을 찾는 사람의 길이 다르기 때문입니다.
| 폴더 | 담는 것 |
|---|---|
| books/ | 책(언어별 + 주제별 + 46개 번역) |
| courses/ | 무료 온라인 강의(영어 free-courses-en.md만 ~174KB) |
| casts/ | 팟캐스트 · 스크린캐스트 |
| more/ | 치트시트(~389) · 인터랙티브 튜토리얼 · 코딩 놀이터(~245) · 알고리즘 문제집(~135) |
각 자원 종류는 로케일 접미사(-en·-ko·-zh·-pt_BR…)로 갈라집니다. 놀라운 건 목록뿐 아니라 운영 문서까지 번역된다는 점 — 기여 안내(CONTRIBUTING) 24개, 사용법(HOWTO) 36개, 행동강령 33개 언어. 전 세계 자원봉사자를 조율하기 위한 진짜 i18n 사례입니다.
# 모든 항목은 알파벳순, 정해진 형식
* [제목](URL) - 저자 (포맷) (라이선스) *(비고)*
# 실제 예시 (Ada 섹션)
* [Ada for the C++ or Java Developer](https://...) - Quentin Ochem (PDF) (CC BY-NC-SA)
이 엄격한 문법 덕분에 fpb-lint(형식·정렬)와 awesome_bot(링크)이 자동 검사를 할 수 있습니다 — 구성의 규칙성과 자동화가 한 몸으로 움직입니다.
"내용 폴더(books·courses·casts·more) + 운영 폴더(docs·scripts·.github)로 깔끔히 나뉜다."
| 경로 | 역할 |
|---|---|
| books/ · courses/ casts/ · more/ | 내용 본체. 자원 종류별 폴더, 그 안에서 언어/주제/번역으로 분기. |
| docs/ | 운영 문서(기여·사용법·행동강령), 20~35개 언어로 번역. |
| scripts/ | 이 레포의 유일한 '실행 코드' — Python BIDI 린터. |
| .github/workflows/ | PR마다 도는 검증 자동화(형식·링크·BIDI·댓글봇·stale). |
| _config.yml | Jekyll 정적 사이트 발행 설정. |
"두 가지로 배운다 — ① 무료 자료를 찾아 공부, ② '대규모 협업 자동화'의 본보기로 연구."
언어별: books/free-programming-books-langs.md에서 색인으로 내 언어(Python·Rust·Go…) 점프 → 포맷(PDF/HTML) 보고 책 선택. 주제별: ...-subjects.md로 알고리즘·ML·보안 같은 테마 학습. 모국어별: 한국어 -ko 등 번역 파일. 책 너머로 치트시트·놀이터·팟캐스트·문제집까지 있고, 자매 검색 사이트로 전체를 빠르게 찾을 수 있습니다.
이 레포는 "1만 개 링크와 2,000명 기여자를 어떻게 봇으로 관리하나"의 산 교재입니다. 기여 깔때기(비-Git 사용자는 이슈, Git 사용자는 PR), 자동 품질 게이트(fpb-lint 형식 검사 → awesome_bot 링크 검사 → BIDI 검사 → 실패 시 봇이 자동 댓글·라벨), 그리고 충돌 라벨링·stale 종료·dependabot까지 — 첫 검수의 대부분을 사람 없이 처리합니다.
편집 규칙이 문서로 못 박혀 있습니다 — 진짜 무료만, Google Drive/Dropbox/Mega 같은 파일 호스트 금지, 가장 권위 있는 출처 우선, http보다 https, 추적 파라미터·단축 URL 제거, 그리고 (PDF)·( :card_file_box: archived)·CC BY-SA 같은 표준 표기. '품질을 규칙으로 만든' 좋은 사례입니다.
"읽기엔 아무것도 필요 없다. 기여해서 검사기를 돌려 보려면 Node/Ruby/Python."
| 대상 | 요구사항 |
|---|---|
| 읽는 사람 | 없음. GitHub이나 발행된 Pages 사이트를 브라우저로 보면 끝(계정·설치 불필요). |
| 기여 최소 | GitHub 계정 + 기본 Markdown 지식. 브라우저만으로도 기여 가능. |
| 형식 린터(선택) | Node.js: npm i -g free-programming-books-lint → fpb-lint books casts courses more |
| 링크 검사(선택) | Ruby: gem install awesome_bot → awesome_bot <파일>.md |
| BIDI 검사(선택) | Python 3.11 + python-bidi + PyYAML (RTL 언어 파일을 건드릴 때만) |
"써 보기 → 문법 뜯어보기 → 죽은 링크 고쳐 첫 PR → 린터 돌리기 → 자료 추가 → 자동화 연구."
지금 배우는 언어를 ...-langs.md에서 찾아 무료 책 한 권을 열어 한 챕터를 읽고, 같은 주제를 courses/free-courses-en.md에서도 찾아보세요. 언어별 vs 주제별 내비게이션 감각을 익히는 게 목표입니다.
아무 5개 항목을 골라 제목 / URL / 저자 / 포맷 / 라이선스 / 비고로 쪼개 보세요. 그리고 형식이 어긋난 한 줄을 CONTRIBUTING 규칙에 맞게 고쳐 쓰면, 린터가 무엇을 검사하는지 체득됩니다.
gem install awesome_bot && awesome_bot books/free-programming-books-langs.md로 404를 찾아, Wayback Machine 보관 URL로 교체하고 ( :card_file_box: archived) 표기를 달아 Pull Request를 올려 보세요. 실제 기여 + CI 루프를 경험합니다.
npm i -g free-programming-books-lint 후, 일부러 한 항목의 알파벳 순서를 어긋나게 만들고 fpb-lint books로 에러를 확인·수정해 보세요. CI가 잡기 전에 정렬·형식 게이트를 이해하게 됩니다.
목록에 없는 진짜 무료 책/강의를 (검색 사이트로 먼저 중복 확인 후) 알파벳 위치에 맞춰 전체 메타데이터와 함께 추가하고, 템플릿의 "왜 무료인지" 근거를 달아 PR을 보내 보세요.
scripts/rtl_ltr_linter.py와 check-urls.yml를 읽고, PR이 열림 → 린트 → 자동 댓글 → 라벨로 흐르는 과정을 그려 보세요. 그다음 "https 대체가 있는 http 링크를 경고"하는 새 검사를 어떻게 추가할지 스케치해 봅니다.
"활용자 트랙과 '오픈소스 운영' 트랙, 두 갈래로."
| 주차 | 주제 | 학습 내용 |
|---|---|---|
| 1주차 | 활용 마스터 | 언어별·주제별·모국어 내비게이션, 검색 사이트로 자료 빠르게 찾기. 내 학습 자료 셋업. |
| 2주차 | Markdown · Git 협업 | GFM 문법, 포크→브랜치→PR 흐름, CONTRIBUTING 규칙. 첫 PR(죽은 링크 수정). |
| 3주차 | CI · 린팅 | GitHub Actions 구조, fpb-lint/awesome_bot 로컬 실행, 린터 에러 읽기. 자료 추가 PR. |
| 4주차 | 대규모 협업 · i18n | 봇 자동화(stale·dependabot·conflict 라벨), 다국어 운영, BIDI 처리. 자동화 스크립트 정독. |
"큐레이션 + 발행 + 자동화 용어를 한자리에."
| 용어 | 의미 |
|---|---|
| 큐레이션 / awesome 리스트 | 사람이 선별·검수한 자료 모음. 이 레포는 공식 Awesome 배지 보유. |
| CC BY 4.0 | 출처만 밝히면 자유 재사용 가능한 콘텐츠 라이선스(코드용 MIT/Apache와 구분). |
| fpb-lint | 이 레포 전용 npm 린터 — 형식·알파벳 정렬을 PR마다 검사. |
| awesome_bot | 마크다운의 모든 링크를 두드려 죽은 URL(링크 로트)을 찾는 Ruby 젬. |
| GitHub Pages / Jekyll / kramdown | 깃허브 무료 호스팅 / 정적 사이트 생성기 / 마크다운 엔진. Markdown을 웹페이지로 발행. |
| i18n / 현지화 | 언어별 적응. 목록도 운영 문서도 로케일 접미사(-ko·-pt_BR)로 번역. |
| 링크 로트(link rot) | 시간이 지나며 URL이 죽어 가는 현상. 큰 목록의 최대 유지보수 과제. |
| CI / 린팅 | 변경마다 자동 검사(형식·링크·BIDI)를 돌려 PR을 통과시키는 체계. |
| RTL / BIDI | 오른쪽→왼쪽 문자(아랍어·히브리어)와 그 혼용 시 순서를 다루는 규칙. 전용 Python 린터로 검사. |
| Free Ebook Foundation | 이 레포를 관리하는 비영리 단체. 자유 전자책의 창작·배포·보존을 지원. |
"발행 사이트와 검색 사이트를 함께 보면 활용도가 올라간다."