這個儲存庫是精心編寫的分步指南的彙編,用於從頭開始重新創建我們最喜歡的技術。
我無法創造的東西,我就不理解──理查‧費曼。
這是一個很好的學習方式。
3D渲染器
擴增實境
BitTorrent 用戶端
區塊鏈/加密貨幣
機器人
命令列工具
資料庫
碼頭工人
模擬器/虛擬機
前端框架/函式庫
遊戲
git
網路堆疊
神經網路
作業系統
物理引擎
程式設計語言
正規表示式引擎
搜尋引擎
殼
模板引擎
文字編輯器
視覺辨識系統
體素引擎
網頁瀏覽器
網路伺服器
未分類
3D Renderer
C++ :光線追蹤簡介:創建 3D 影像的簡單方法
C++ : OpenGL 的工作原理:用 500 行程式碼進行軟體渲染
C++ :德軍總部 3D 的光線投射引擎
C++ :基於物理的渲染:從理論到實現
C++ :一個週末的光線追踪
C++ :光柵化:實際實現
C# / TypeScript / JavaScript :學習如何使用 C#、TypeScript 或 JavaScript 從頭開始寫 3D 軟引擎
Java / JavaScript :建立您自己的 3D 渲染器
Java :如何用純 Java 建立自己的簡單 3D 渲染引擎
JavaScript / 偽代碼:從頭開始的電腦圖形學
Python : 3D 建模器
Augmented Reality
C# :操作方法:初學者的 Vuforia 和 Unity 3D 擴增實境應用程式教學[影片]
C# :如何使用 Unity ARCore [影片]
C# : Unity 的 AR Portal 教學[影片]
C# :如何在 Unity ARCore 中的擴增實境中創建一條龍[影片]
C# :如何擴增實境 AR 教學:ARKit 入口網站顛倒[影片]
Python :使用 Python 和 OpenCV 擴增實境
BitTorrent Client
C# :用 C# 從頭開始建置 BitTorrent 用戶端
Go :用 Go 從頭開始建立 BitTorrent 用戶端
Nim :編寫 Bencode 解析器
Node.js :編寫您自己的 BitTorrent 用戶端
Python : Python 3.5 中的 BitTorrent 用戶端
Blockchain / Cryptocurrency
ATS :功能性區塊鏈
C# :用 C# 進行區塊鏈編程
Crystal :使用 Crystal 編寫自己的區塊鏈和 PoW 演算法
Go :用 Go 建構區塊鏈
Go :用不到 200 行 Go 程式碼編寫自己的區塊鏈
Java :使用 Java 創建您的第一個區塊鏈
JavaScript :不到 1500 行程式碼的加密貨幣實現
JavaScript :用 JavaScript 建立自己的區塊鏈
JavaScript :學習並建立 JavaScript 區塊鏈
JavaScript :使用 JavaScript 創建區塊鏈
JavaScript :如何啟動您自己的生產就緒型加密貨幣
JavaScript :在 Node.js 中編寫區塊鏈
Kotlin :讓我們在 Kotlin 中實現加密貨幣
Python :透過建立區塊鏈來學習區塊鏈
Python :建立您自己的區塊鏈:Python 教程
Python :使用 Python 進行區塊鏈實用介紹
Python :讓我們建立最小的區塊鏈
Ruby :逐步編程區塊鏈(手稿書籍版)
Scala :如何建立一個簡單的基於參與者的區塊鏈
TypeScript : Naivecoin:建立加密貨幣的教學課程
TypeScript : NaivecoinStake:使用權益證明共識建立加密貨幣的教學課程
Rust :在 Rust 和 Substrate 中建立區塊鏈
Bot
Haskell :打造自己的 IRC 機器人
Node.js :在 Node.js 中使用 API.ai 建立簡單的 Facebook Messenger AI 機器人
Node.js :如何製作響應式電報機器人
Node.js :創建一個 Discord 機器人
Node.js : gifbot - 建立 GitHub 應用程式
Node.js :使用 Web 語音 API 和 Node.js 建立簡單的 AI 聊天機器人
Python :如何使用 Python 建立您的第一個 Slack 機器人
Python :如何在 20 分鐘內使用 Slack Events API 和 Django 使用 Python 建立 Slack 機器人
Python :建構 Reddit 機器人
Python :如何製作 Reddit 機器人[影片]
Python :如何使用 Python 建立 Telegram 機器人
Python :使用 Tweepy 在 Python 中建立 Twitter 機器人
Python :使用 Python 和 PRAW 建立 Reddit 機器人[影片]
R :使用 R 建構加密貨幣交易機器人
Rust :使用 Rust、C 或任何其他語言編寫的《星海爭霸》機器人
Command-Line Tool
Go :使用 Go 視覺化您本地的 git 貢獻
Go :使用 Go 建立命令列應用程式:lolcat
Go :使用 Go 建構 cli 指令:cowsay
Go : Go CLI 教學:財富克隆
Nim :寫一個 stow 替代方案來管理點文件
Node.js :用 Javascript 建立 CLI 工具
Rust : Rust 中的命令列應用程式
Rust :用 Rust 寫命令列工具
Database
C :讓我們建立一個簡單的資料庫
C++ :從頭開始建立自己的 Redis
C# :建立您自己的資料庫
Clojure :一個受考古學啟發的資料庫
Crystal :為什麼你應該建立自己的 NoSQL 資料庫
Go :從頭開始建立自己的資料庫:持久性、索引、並發性
Go :從頭開始建立自己的 Redis
JavaScript : Dagoba:記憶體中的圖形資料庫
Python : DBDB:狗床資料庫
Python :用Python寫自己的微型Redis
Ruby :在 Ruby 中建立您自己的快速、持久的 KV 存儲
Rust :建立您自己的 Redis 用戶端和伺服器
Docker
C : 500 行程式碼的 Linux 容器
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 : Common Lisp 中的 CHIP-8
JavaScript : JavaScript 中的 GameBoy 模擬
Python :仿真基礎:編寫您自己的 Chip 8 模擬器/解譯器
Rust : 0dmg:透過建構部分 Game Boy 模擬器來學習 Rust
Front-end Framework / Library
JavaScript : WTF 是 JSX(讓我們建立一個 JSX 渲染器)
JavaScript :建立您自己的 React 的 DIY 指南
JavaScript :從頭開始建立 React [影片]
JavaScript : Gooact:用 160 行 JavaScript 進行 React
JavaScript :透過建立自己的輕量級 React DOM 來了解 React Reconciler 套件的工作原理
JavaScript :自己建置 Redux
JavaScript :讓我們來寫 Redux!
JavaScript : Redux:從頭開始實作儲存[影片]
JavaScript :用 200 行 JavaScript 建立自己的簡化 AngularJS
JavaScript :製作自己的 AngularJS
JavaScript :如何寫自己的虛擬 DOM
JavaScript :使用元件(模板、狀態、VDOM)從頭開始建立前端框架
JavaScript :建立自己的 React
JavaScript :建立自訂 React 渲染器[影片]
Game
C :手工英雄
C :如何用 C 語言寫 NES 遊戲程序
C : C 語言的西洋棋引擎[影片]
C :讓我們一起製作:危險的戴夫[影片]
C :學習 C 電玩程式設計[影片]
C :用 C 語言寫數獨求解器[影片]
C :用 C 語言寫 Rogue/Nethack RPG [影片]
C :關於俄羅斯方塊和重新實現
C++ :突破
C++ :開始遊戲程式設計 v2.0
C++ :獨立於 C++ 平台的俄羅斯方塊教程,專注於初學者的遊戲邏輯
C++ :用 C++ 重建 Cavestory [影片]
C++ :重建洞穴故事[影片]
C++ :從頭開始的太空侵略者
C# :透過建立簡單的 RPG 來學習 C#
C# :用 C# 創作 Roguelike 遊戲
C# :建構 C#/WPF RPG
圍棋:圍棋遊戲[影片]
Java :使用 Java 編寫 2D 遊戲引擎 - 初學者完整課程[影片]
Java :使用 LWJGL 3 進行 3D 遊戲開發
JavaScript :使用 Phaser 的 2D 突破遊戲
JavaScript :如何使用 Phaser 在 HTML5 中製作 Flappy Bird
JavaScript :使用 React、Redux 和 SVG 開發遊戲
JavaScript :從頭開始建立自己的 8 球撞球遊戲[影片]
JavaScript :如何製作你的第一個 Roguelike
JavaScript :像程式設計師一樣思考:如何只使用 JavaScript、HTML 和 CSS 建立 Snake
Lua :位元組路徑
Python :使用 PyGame 開發遊戲
Python :使用 Python 和 Pygame 製作遊戲[pdf]
Python : Roguelike 教學修訂
Ruby :使用 Ruby 開發遊戲
紅寶石:紅寶石蛇
Rust : Rust 歷險記:一款基本的 2D 遊戲
Rust : Rust + tcod 中的 Roguelike 教學
Git
Haskell :在 Haskell 中自下而上重新實作“git clone”
JavaScript : Gitlet
JavaScript :建立 GIT - 學習 GIT
Python :足以建立儲存庫、提交並將自身推送到 GitHub 的 Git 用戶端
Python :自己寫一個 Git!
Python : ugit:透過自己建構 Git 來學習 Git 內部原理
Ruby :用 Ruby 重建 Git
Network Stack
C : Beej 網路程式設計指南
C :讓我們寫一個 TCP/IP 堆疊
C / Python :建立您自己的 VPN/虛擬交換機
Ruby :如何在 Ruby 中建構網路堆疊
Neural Network
C# :神經網路 OCR
F# :在 F# 建構神經網絡
Go :使用 Golang 建構多層感知器
Go :如何使用 Go 建立簡單的人工神經網絡
Go :用 Go 從頭開始建立神經網絡
JavaScript / Java :神經網路 - 程式碼的本質[影片]
JavaScript : JavaScript 語言學家從頭開始的神經網路(第 1 部分 - 感知器)
Python : 11行Python的神經網絡
Python :從頭開始實作神經網絡
Python :光學字元辨識(OCR)
Python :使用卷積網路進行交通標誌分類
Python :在 Keras 中使用 LSTM 神經網路產生音樂
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++ :遊戲物理系列,作者:Allen Chou
C++ :如何建立自訂實體引擎
C++ : 3D 物理引擎教學[影片]
JavaScript :物理引擎如何運作
JavaScript :使用空間分割區進行廣泛階段碰撞偵測
JavaScript :為 JavaScript 遊戲建立簡單的 2D 物理引擎
Programming Language
(任何) : mal - 口齒不清
組裝:瓊斯福斯
C :寶寶的第一個垃圾收集器
C : Build Your Own Lisp:學習 C 並用 1000 行程式碼建立自己的程式語言
C :用 C 語言寫一個簡單的垃圾收集器
C :解釋自身的 C 解譯器。
C : Jack Crenshaw 的「Let's Build a Compiler」的 AC 和 x86 版本
C :解釋如何從頭開始建立編譯器的旅程
C++ :使用 Flex 編寫自己的玩具編譯器
C++ :如何建立編譯器[影片]
C++ :萬花筒:使用 LLVM 實作語言
F# :理解解析器組合器
Elixir :透過寫自己的程式碼來揭開編譯器的神秘面紗[影片]
Go :超小型編譯器
Go : Go 中的詞法掃描[影片]
Haskell :讓我們來建構一個編譯器
Haskell :給你寫一個Haskell
Haskell :在 48 小時內為自己寫一個方案
Haskell :為你寫一個方案
Java :製作解譯器:製作程式語言的手冊
Java :建立 JVM 語言
JavaScript :超小型編譯器
JavaScript :超小型解譯器
JavaScript :小 Lisp 解譯器
JavaScript :如何用 JavaScript 實作程式語言
JavaScript :讓我們去寫一個 Lisp
OCaml :寫 C 編譯器
OCaml :寫 Lisp,系列
Pascal :讓我們來建構一個編譯器
Python :用 Python 寫的 Python 解釋器
Python : lisp.py:製作自己的 Lisp 解譯器
Python :如何用 Python 寫 Lisp 解釋器
Python :讓我們建立一個簡單的解釋器
Python :製作自己的簡單解釋型程式語言[影片]
Python :從原始碼到機器碼:從頭開始建立自己的編譯器
Racket :美麗的 Racket:如何使用 Racket 製作自己的程式語言
Ruby :從頭開始的編譯器
Ruby :用 Ruby 從頭開始 Markdown 編譯器
Rust :所以你想建立一個語言虛擬機
Rust :使用 Rust 學習解析器組合器
Swift :使用 Swift 從頭開始建立 LISP
TypeScript :建立您自己的 WebAssembly 編譯器
Regex Engine
C :正規表示式匹配器
C :正規表示式比對可以簡單快速
Go :如何從頭開始建立正規表示式引擎
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 寫 Shell
C :讓我們建立一個 shell!
C :編寫 UNIX Shell
C :建造自己的外殼
C :用C語言寫一個shell
Go :用 Go 寫一個簡單的 shell
Rust :使用 Rust 建立自己的 Shell
Template Engine
JavaScript :只需 20 行的 JavaScript 模板引擎
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 體素引擎教學[影片]
Web Browser
Rust :讓我們建立一個瀏覽器引擎
Python :瀏覽器工程
Web Server
C# :從頭開始編寫 Web 伺服器
Node.js :使用 JavaScript 從頭開始建立自己的 Web 伺服器
Node.js :讓我們使用 NodeJS Streams 從頭開始寫一個 Web 伺服器
Node.js :讓建構表達
PHP :用純 PHP 寫網頁伺服器
Python :一個簡單的 Web 伺服器
Python :讓我們建立一個 Web 伺服器。
Python :從頭開始的 Web 應用程式
Python :用 Python 從頭開始建立基本的 HTTP 伺服器
Python :使用 Python 和 Flask 實作 RESTful Web API
Ruby :用 Ruby 從頭開始建立一個簡單的 Websockets 伺服器
(任意) :從 NAND 到俄羅斯方塊:從第一原理建構現代計算機
合金:同源政策
C :如何用 1000 行以內編寫影片播放器
C :學習如何用 C 語言寫哈希表
C :終端仿真器的基礎知識
C :編寫系統調用
C : Sol - 從頭開始的 MQTT 代理
C++ :花費 200 美元打造自己的 VR 耳機
C++ : X 視窗管理器如何運作以及如何寫一個
C++ :編寫 Linux 偵錯器
C++ : 64k 簡介是如何製作的
C++ :製作自己的遊戲引擎
C# : C# 網路:建立 TCP 聊天伺服器、TCP 遊戲、UDP Pong 等
C# :在 C# 和 GLSL 中從頭開始載入和渲染 3D 骨骼動畫
Clojure :建立拼字檢查器
Go :用 100 行 Golang 建構一個簡單的終端模擬器
Go :讓我們建立一個簡單的負載平衡器
Go :從頭開始視訊編碼
Java :如何建立 Android Reddit 應用程式[影片]
JavaScript :建立自己的模組捆綁器 - Minipack
JavaScript :透過從頭開始建立 Promise 來學習 JavaScript Promise
JavaScript :從頭開始實作 Promise(TDD 方式)
JavaScript :在 JavaScript 中實作您自己的 call()、apply() 和 bind() 方法
JavaScript : JavaScript 演算法與資料結構
JavaScript :使用 React Native 建立打車應用程式
JavaScript :在(字面上)10 分鐘內建立您自己的 AdBlocker
Kotlin :建立您自己的緩存
Lua :從頭開始建立 CDN 以了解 CDN
Nim :編寫 Redis 協定解析器
Nim :編寫建置系統
Nim :編寫 MiniTest 框架
Nim :編寫 DMIDecode 解析器
Nim :編寫 INI 解析器
Nim :編寫連結檢查器
Nim :編寫 URL 縮短服務
Node.js :使用 Node.js 在 40 行內建立靜態站點產生器
Node.js :在 Node.js 中從頭開始建立簡單的單一登入 (SSO) 伺服器和解決方案。
Node.js :如何使用 Node 建立真實的 Node CLI 應用程式
Node.js :在 Node.js 中建立 DNS 伺服器
PHP :用 PHP 從頭開始寫自己的 MVC
PHP :創建自己的部落格
PHP :沒有框架的現代 PHP
PHP :用 PHP 寫 Web 搜尋引擎
Python :建立深度學習庫[影片]
Python :如何在短短 5 分鐘內建立一個強大的行動文件掃描儀
Python :持續整合系統
Python : Python 中的推薦系統:初學者教程
Python :使用 Scikit-learn 撰寫簡訊垃圾郵件偵測器
Python : Python 中的一個簡單的基於內容的推薦引擎
Python :使用 Python 中的 LSTM 進行股市預測
Python :使用 Tensorflow 建立簡單的生成對抗網路 (GAN)
Python :透過編碼學習機器學習演算法:決策樹
Python : JSON解碼演算法
Python :使用 python 建立您自己的 Git 插件
Ruby :現實世界中的計步器
Ruby :使用 Ruby 建立 Linux 桌面應用程式
Rust :用 Rust 建置 DNS 伺服器
Rust :從頭開始編寫可擴展的聊天服務
Rust : WebGL + Rust:基本水教學
TypeScript : Tiny Package Manager:了解 npm 或 Yarn 的工作原理
歡迎提交,只需發送 PR 或建立問題
透過留下評論和「反應」幫助我們審查待提交的內容
該存儲庫是許多貢獻者的成果。它由 Daniel Stefanovic 發起,現在由 CodeCrafters, Inc. 維護。