Этот репозиторий представляет собой сборник хорошо написанных пошаговых руководств по воссозданию наших любимых технологий с нуля.
Чего я не могу создать, того я не понимаю — Ричард Фейнман.
Это отличный способ учиться.
3D-рендерер
Дополненная реальность
BitTorrent-клиент
Блокчейн / Криптовалюта
Бот
Инструмент командной строки
База данных
Докер
Эмулятор/Виртуальная машина
Интерфейсная платформа/библиотека
Игра
Гит
Сетевой стек
Нейронная сеть
Операционная система
Физический движок
Язык программирования
Механизм регулярных выражений
Поисковая система
Оболочка
Шаблонизатор
Текстовый редактор
Система визуального распознавания
Воксельный движок
Веб-браузер
Веб-сервер
Без категории
3D Renderer
C++ : Введение в трассировку лучей: простой метод создания 3D-изображений
C++ : Как работает OpenGL: программный рендеринг в 500 строк кода
C++ : движок Raycasting Wolfenstein 3D.
C++ : Физический рендеринг: от теории к реализации
C++ : трассировка лучей за одни выходные
C++ : Растеризация: практическая реализация
C#/TypeScript/JavaScript : научиться писать программный 3D-движок с нуля на C#, TypeScript или JavaScript.
Java/JavaScript : создайте свой собственный 3D-рендерер.
Java : Как создать свой собственный простой движок 3D-рендеринга на чистой Java
JavaScript/Псевдокод : Компьютерная графика с нуля
Python : 3D-моделист
Augmented Reality
C# : Практическое руководство: руководство по приложению дополненной реальности для начинающих с Vuforia и Unity 3D [видео]
C# : Как использовать Unity ARCore [видео]
C# : Учебное пособие по порталу AR с Unity [видео]
C# : Как создать дракона в дополненной реальности в Unity ARCore [видео]
C# : Учебное пособие по дополненной реальности AR: ARKit Portal to the Upside Down [видео]
Python : дополненная реальность с Python и OpenCV
BitTorrent Client
C# : Создание клиента BitTorrent с нуля на C#.
Go : Создание BitTorrent-клиента с нуля на Go.
Ним : Написание парсера Bencode
Node.js : напишите свой собственный BitTorrent-клиент.
Python : BitTorrent-клиент на Python 3.5.
Blockchain / Cryptocurrency
ATS : Функциональный блокчейн
C# : программирование блокчейна на C#
Crystal : напишите свой собственный блокчейн и алгоритм PoW, используя Crystal.
Go : создание блокчейна на Go
Go : напишите свой собственный блокчейн менее чем за 200 строк Go.
Java : создание вашего первого блокчейна с помощью Java
JavaScript : реализация криптовалюты менее чем в 1500 строк кода.
JavaScript : создайте свой собственный блокчейн на JavaScript.
JavaScript : изучите и создайте блокчейн JavaScript
JavaScript : создание блокчейна с помощью JavaScript
JavaScript : как запустить собственную криптовалюту, готовую к производству
JavaScript : написание блокчейна в Node.js
Котлин : давайте реализуем криптовалюту на Котлине.
Python : изучите блокчейны, создав их
Python : Создайте свой собственный блокчейн: руководство по Python
Python : практическое введение в блокчейн с помощью Python
Python : давайте построим самый крошечный блокчейн
Ruby : шаг за шагом программирование блокчейнов (книжное издание рукописей)
Scala : Как построить простой блокчейн на основе актеров
TypeScript : Naivecoin: руководство по созданию криптовалюты
TypeScript : NaivecoinStake: руководство по созданию криптовалюты с консенсусом Proof of Stake
Rust : создание блокчейна на Rust и Substrate
Bot
Haskell : создайте собственного IRC-бота
Node.js : создание простого AI-бота Facebook Messenger с API.ai в Node.js
Node.js : Как создать отзывчивого бота для Telegram
Node.js : создайте бота Discord
Node.js : gifbot — Создание приложения GitHub
Node.js : создание простого чат-бота с искусственным интеллектом с использованием API веб-речи и Node.js
Python : как создать своего первого бота Slack с помощью Python
Python : как создать Slack Bot с помощью Python с использованием Slack Events API и Django менее чем за 20 минут
Python : создаем бота Reddit
Python : как создать бота Reddit [видео]
Python : как создать бота Telegram с помощью Python
Python : создайте бота Twitter на Python с помощью Tweepy
Python : создание бота Reddit с помощью Python и PRAW [видео]
R : Создайте бота для торговли криптовалютой с помощью R
Rust : бот для Starcraft на Rust, C или любом другом языке.
Command-Line Tool
Go : визуализируйте свои локальные вклады в git с помощью Go.
Go : Создайте приложение командной строки с помощью Go: lolcat
Go : Создание команды cli с помощью Go: Cowsay
Go : Учебное пособие по Go CLI: клон состояния
Ним : Написание альтернативы stow для управления точечными файлами.
Node.js : создание инструмента CLI на Javascript.
Rust : приложения командной строки в Rust.
Rust : написание инструмента командной строки на Rust
Database
C : Давайте создадим простую базу данных.
C++ : создайте свой собственный Redis с нуля
C# : создайте собственную базу данных
Clojure : база данных, основанная на археологии
Crystal : Почему вам следует создать собственную базу данных NoSQL?
Перейти : Создайте свою собственную базу данных с нуля: постоянство, индексирование, параллелизм
Перейти : Создайте свой собственный Redis с нуля
JavaScript : Dagoba: графовая база данных в памяти.
Python : DBDB: База данных собачьих кроватей
Python : напишите свой собственный миниатюрный Redis с помощью Python
Ruby : создайте свой собственный быстрый и постоянный магазин KV на Ruby.
Rust : Создайте свой собственный клиент и сервер Redis
Docker
C : Контейнеры Linux в 500 строк кода.
Go : создайте свой собственный контейнер, используя менее 100 строк Go
Go : Создание контейнера с нуля в Go [видео]
Python : Мастер-класс по контейнерам Linux: пересобрать Docker с нуля
Python : экспериментальная имитация Docker, написанная на 100% Python.
Shell : Docker реализован примерно в 100 строках bash.
Emulator / Virtual Machine
C : Самодельные интерпретаторы байт-кода.
C : Виртуальная машина на C.
C : Напишите свою собственную виртуальную машину.
C : Написание эмулятора Game Boy, Cinoop.
C++ : Как написать эмулятор (интерпретатор CHIP-8)
C++ : Учебное пособие по эмуляции (интерпретатор CHIP-8)
C++ : Учебное пособие по эмуляции (эмулятор GameBoy)
C++ : Учебное пособие по эмуляции (эмулятор главной системы)
C++ : эмулятор NES с нуля [видео]
Common Lisp : CHIP-8 в Common Lisp
JavaScript : эмуляция GameBoy в JavaScript
Python : Основы эмуляции: напишите свой собственный эмулятор/интерпретатор Chip 8
Rust : 0dmg: изучение Rust путем создания частичного эмулятора Game Boy.
Front-end Framework / Library
JavaScript : WTF — это JSX (давайте создадим JSX-рендерер)
JavaScript : руководство по созданию собственного React
JavaScript : создание React с нуля [видео]
JavaScript : Gooact: Реагируйте в 160 строках JavaScript.
JavaScript : узнайте, как работает пакет React Reconciler, создав собственный облегченный React DOM.
JavaScript : создайте себе Redux
JavaScript : давайте напишем Redux!
JavaScript : Redux: реализация Store с нуля [видео]
JavaScript : создайте свой собственный упрощенный AngularJS в 200 строках JavaScript
JavaScript : создайте свой собственный AngularJS
JavaScript : как написать свой собственный виртуальный DOM
JavaScript : создание внешней среды с нуля с использованием компонентов (шаблон, состояние, VDOM).
JavaScript : создайте свой собственный React
JavaScript : создание собственного средства рендеринга React [видео]
Game
C : Герой ручной работы
C : Как запрограммировать игру для NES на C
C : Chess Engine In C [видео]
C : Давайте сделаем: Опасный Дэйв [видео]
C : Изучите программирование видеоигр на C [видео]
C : Программирование решателя судоку на C [видео]
C : Программирование ролевой игры Rogue/Nethack на C [видео]
C : О Тетрисе и его повторной реализации
С++ : Прорыв
C++ : Начало программирования игр, версия 2.0
C++ : Учебное пособие по тетрису на независимой платформе C++, ориентированное на игровую логику для начинающих.
C++ : переделка Cavestory на C++ [видео]
C++ : реконструкция пещерной истории [видео]
C++ : Космические захватчики с нуля
C# : Изучите C#, создав простую ролевую игру
C# : Создание игры-рогалика на C#
C# : создание ролевой игры на C#/WPF
Го : Игры с Го [видео]
Java : программирование 2D-игрового движка с использованием Java — полный курс для начинающих [видео]
Java : разработка 3D-игр с помощью LWJGL 3
JavaScript : 2D-игра с использованием Phaser.
JavaScript : как создать Flappy Bird на HTML5 с помощью Phaser
JavaScript : разработка игр с помощью React, Redux и SVG
JavaScript : создайте свою собственную игру в бильярд «8-Ball» с нуля [видео]
JavaScript : как создать свой первый рогалик
JavaScript : Думай как программист: как создать Snake, используя только JavaScript, HTML и CSS
Lua : БАЙТОВЫЙ ПУТЬ
Python : разработка игр с помощью PyGame
Python : создание игр с помощью Python и Pygame [pdf]
Python : пересмотренное руководство по рогалику
Ruby : разработка игр на Ruby
Руби : Рубиновая змея
Rust : Приключения в Rust: базовая 2D-игра
Rust : Учебное пособие по рогалику в Rust + tcod
Git
Haskell : переопределение «git clone» в Haskell снизу вверх
JavaScript : Гитлет
JavaScript : сборка GIT — изучение GIT
Python : достаточно клиента Git, чтобы создать репозиторий, зафиксировать и отправить себя на GitHub.
Python : напишите себе Git!
Python : ugit: Изучите внутреннее устройство Git, создав Git самостоятельно
Ruby : восстановление Git в Ruby
Network Stack
C : Руководство Биджа по сетевому программированию.
C : Давайте напишем стек TCP/IP.
C/Python : создайте свой собственный VPN/виртуальный коммутатор
Ruby : Как построить сетевой стек в Ruby
Neural Network
C# : распознавание символов нейронной сети
F# : построение нейронных сетей на F#
Идем : Создайте многослойный перцептрон с помощью Golang.
Go : Как построить простую искусственную нейронную сеть с помощью Go
Go : создание нейронной сети с нуля на Go
JavaScript/Java : нейронные сети – природа кода [видео]
JavaScript : Нейронные сети с нуля для лингвистов JavaScript (Часть 1 — Персептрон)
Python : нейронная сеть в 11 строках Python
Python : реализация нейронной сети с нуля
Python : оптическое распознавание символов (OCR)
Python : классификация дорожных знаков с помощью сверточной сети
Python : создание музыки с использованием нейронной сети LSTM в Keras
Python : введение в сверточные нейронные сети
Python : Нейронные сети: от нуля до героя
Operating System
Сборка : написание крошечного загрузчика x86
Сборка : Baking Pi – Разработка операционных систем
C : Создание программного и аппаратного стека для простого компьютера с нуля [видео]
C : Операционные системы: от 0 до 1.
C : Маленькая книжка о разработке ОС.
C : Создайте свой собственный игрушечный UNIX-клон ОС.
C : Ядро 101 – Давайте напишем ядро.
C : Ядро 201 — Давайте напишем ядро с поддержкой клавиатуры и экрана.
C : Создайте минимальное многозадачное ядро для ARM с нуля.
C : Как создать ОС с нуля
C : Учебное пособие по Malloc
C : Взломать виртуальную память
C : Изучение разработки операционных систем с использованием ядра Linux и Raspberry Pi.
C : Разработка операционных систем для чайников.
C++ : напишите свою собственную операционную систему [видео]
C++ : написание загрузчика
Rust : написание ОС на Rust
Rust : добавление RISC-V Учебное пособие по операционной системе Rust
(любой) : Linux с нуля
Physics Engine
C : Учебник по физике в видеоиграх
C++ : Серия игр по физике Аллена Чоу
C++ : Как создать собственный физический движок
C++ : Учебное пособие по 3D-физическому движку [видео]
JavaScript : как работают физические движки
JavaScript : обнаружение широких фазовых столкновений с использованием пространственного разделения
JavaScript : создание простого 2D-физического движка для игр на JavaScript.
Programming Language
(любой) : mal - Сделать Лисп
Сборка : Джонсфорт
C : Первый детский сборщик мусора
C : Создайте свой собственный Lisp: изучите C и создайте свой собственный язык программирования с помощью 1000 строк кода.
C : Написание простого сборщика мусора на C
C : интерпретатор C, который интерпретирует сам себя.
C : версия книги Джека Креншоу «Давайте построим компилятор» для AC и x86.
C : Путешествие, объясняющее, как создать компилятор с нуля.
C++ : написание собственного игрушечного компилятора с использованием Flex
C++ : Как создать компилятор [видео]
C++ : Калейдоскоп: реализация языка с помощью LLVM
F# : Понимание комбинаторов парсеров
Эликсир : Демистифицируем компиляторы, написав свои собственные [видео]
Go : Супер крошечный компилятор
Go : лексическое сканирование в Go [видео]
Haskell : давайте создадим компилятор
Haskell : напишите себе Haskell
Haskell : напишите себе схему за 48 часов
Haskell : напишите вам схему
Java : Создание интерпретаторов: Руководство по созданию языков программирования
Java : создание языка JVM
JavaScript : супер-крошечный компилятор
JavaScript : суперминиатюрный интерпретатор
JavaScript : маленький интерпретатор Lisp
JavaScript : как реализовать язык программирования на JavaScript.
JavaScript : давайте напишем Lisp
OCaml : написание компилятора C
OCaml : Написание Lisp, серия
Паскаль : Давайте создадим компилятор
Python : интерпретатор Python, написанный на Python
Python : lisp.py: Создайте свой собственный интерпретатор Lisp
Python : как написать интерпретатор Lisp на Python
Python : давайте создадим простой интерпретатор
Python : создайте свой собственный простой интерпретируемый язык программирования [видео]
Python : от исходного кода к машинному коду: создайте свой собственный компилятор с нуля
Racket : Beautiful Racket: как создавать свои собственные языки программирования с помощью Racket
Ruby : компилятор с нуля
Ruby : компилятор Markdown с нуля в Ruby.
Rust : Итак, вы хотите создать языковую виртуальную машину
Rust : изучение комбинаторов парсеров с помощью Rust
Swift : создание LISP с нуля с помощью Swift
TypeScript : создайте свой собственный компилятор WebAssembly
Regex Engine
C : Сопоставитель регулярных выражений
C : Сопоставление регулярных выражений может быть простым и быстрым
Перейти : Как создать механизм регулярных выражений с нуля
JavaScript : создайте механизм регулярных выражений менее чем за 40 строк кода
JavaScript : как реализовать регулярные выражения в функциональном JavaScript с использованием производных
JavaScript : реализация механизма регулярных выражений
Perl : Как работают регулярные выражения
Python : создайте свои собственные механизмы регулярных выражений: возврат, NFA, DFA
Scala : Никакой магии: регулярные выражения
Search Engine
CSS : поисковая система на CSS.
Python : создание поисковой системы с использованием Redis и redis-py
Python : создание механизма индексирования векторного пространства на Python
Python : создание поисковой системы на основе Python [видео]
Python : как заставить текстовый поиск учиться на обратной связи
Python : поиск важных слов в тексте с помощью TF-IDF
Shell
C : Учебник. Написание оболочки на C
С : Давайте построим оболочку!
C : Написание оболочки UNIX
C : Создайте свою собственную оболочку
C : Напишите оболочку на C.
Go : написание простой оболочки на Go.
Rust : создайте свою собственную оболочку с помощью Rust
Template Engine
JavaScript : шаблонизатор JavaScript всего за 20 строк.
JavaScript : понимание микрошаблонов JavaScript
Python : Подход: создание игрушечного шаблонизатора на Python
Python : механизм шаблонов
Ruby : Как написать шаблонизатор менее чем за 30 строк кода
Text Editor
C : Создайте свой собственный текстовый редактор
C++ : разработка простого текстового редактора
Python : Учебник по Python: создайте свой собственный текстовый редактор [видео]
Python : создайте простой текстовый редактор Python!
Ruby : создание совместного текстового редактора с использованием Rails
Rust : Hecto: создайте свой собственный текстовый редактор на Rust
Visual Recognition System
Python : разработка системы распознавания номерных знаков с помощью машинного обучения на Python
Python : создание конвейера распознавания лиц с помощью глубокого обучения в Tensorflow
Voxel Engine
C++ : давайте создадим воксельный движок
Java : Учебное пособие по Java Voxel Engine [видео]
Web Browser
Rust : Давайте создадим движок браузера
Python : разработка браузеров
Web Server
C# : написание веб-сервера с нуля
Node.js : создайте свой собственный веб-сервер с нуля на JavaScript
Node.js : давайте напишем веб-сервер с нуля с помощью NodeJS Streams.
Node.js : давайте-построим-экспресс
PHP : написание веб-сервера на чистом PHP.
Python : простой веб-сервер
Python : давайте создадим веб-сервер.
Python : веб-приложение с нуля
Python : создание базового HTTP-сервера с нуля на Python.
Python : реализация RESTful веб-API с помощью Python и Flask
Ruby : создание простого сервера веб-сокетов с нуля на Ruby.
(любой) : От NAND до Тетриса: создание современного компьютера на основе первых принципов
Сплав : политика одинакового происхождения
C : Как написать видеоплеер менее чем в 1000 строк
C : Узнайте, как написать хеш-таблицу на C.
C : Самые основы эмулятора терминала.
C : Написать системный вызов
C : Sol — MQTT-брокер с нуля.
C++ : создайте собственную VR-гарнитуру за 200 долларов.
C++ : Как работают оконные менеджеры X и как их написать
C++ : написание отладчика Linux
C++ : Как создается вступление 64k
C++ : создайте свой собственный игровой движок
C# : Сеть C#: создание TCP-сервера обмена сообщениями, TCP-игр, UDP Pong и т. д.
C# : Загрузка и рендеринг скелетной 3D-анимации с нуля на C# и GLSL.
Clojure : Создание средства проверки правописания
Go : Создайте простой эмулятор терминала в 100 строках Golang
Идем : давайте создадим простой балансировщик нагрузки
Go : Кодирование видео с нуля
Java : как создать приложение Reddit для Android [видео]
JavaScript : создайте свой собственный комплект модулей — мини-пакет
JavaScript : изучите промисы JavaScript, создав промисы с нуля
JavaScript : реализация обещаний с нуля (способ TDD)
JavaScript : Реализуйте свои собственные методы — call(), apply() иbind() в JavaScript.
JavaScript : алгоритмы JavaScript и структуры данных
JavaScript : создание приложения для заказа поездок с помощью React Native
JavaScript : создайте свой собственный блокировщик рекламы за (буквально) 10 минут
Котлин : создайте свой собственный кеш
Lua : создание CDN с нуля, чтобы узнать о CDN
Ним : Написание парсера протокола Redis
Ним : Написание системы сборки
Ним : Написание фреймворка MiniTest
Ним : Написание парсера DMIDecode
Ним : Написание INI-парсера
Ним : Написание средства проверки ссылок
Ним : Создание службы сокращения URL-адресов
Node.js : Создайте генератор статического сайта в 40 строк с помощью Node.js.
Node.js : создание простого сервера единого входа (SSO) и решения с нуля в Node.js.
Node.js : Как создать реальное приложение Node CLI с помощью Node.
Node.js : создание DNS-сервера в Node.js.
PHP : напишите свой собственный MVC с нуля на PHP.
PHP : Создайте свой собственный блог
PHP : современный PHP без фреймворка
PHP : код веб-поисковой системы на PHP
Python : создание библиотеки глубокого обучения [видео]
Python : как создать потрясающий мобильный сканер документов всего за 5 минут
Python : система непрерывной интеграции
Python : рекомендательные системы в Python: руководство для начинающих
Python : написание детектора SMS-спама с помощью Scikit-learn
Python : простой механизм рекомендаций на основе контента на Python
Python : прогнозы фондового рынка с помощью LSTM на Python
Python : построение простой генеративно-состязательной сети (GAN) с использованием Tensorflow
Python : Изучите алгоритмы машинного обучения путем программирования: деревья решений
Python : алгоритм декодирования JSON
Python : создайте свой собственный плагин Git с помощью Python
Ruby : Шагомер в реальном мире
Ruby : создание настольного приложения Linux с помощью Ruby
Rust : Создание DNS-сервера на Rust.
Rust : написание масштабируемого чат-сервиса с нуля
Rust : WebGL + Rust: базовое руководство по воде
TypeScript : Tiny Package Manager: изучает, как работают npm или Yarn.
Предложения приветствуются, просто отправьте PR или создайте проблему.
Помогите нам просмотреть ожидающие отправки, оставив комментарии и «реакции».
Этот репозиторий является работой многих участников. Он был начат Дэниелом Стефановичем, и в настоящее время поддерживается CodeCrafters, Inc. Насколько это возможно по закону, CodeCrafters, Inc. отказалась от всех авторских и смежных или смежных прав на эту работу.