Ce référentiel est une compilation de guides étape par étape bien rédigés pour recréer nos technologies préférées à partir de zéro.
Ce que je ne peux pas créer, je ne le comprends pas — Richard Feynman.
C'est une excellente façon d'apprendre.
Rendu 3D
Réalité augmentée
Client BitTorrent
Blockchain / Crypto-monnaie
Bot
Outil de ligne de commande
Base de données
Docker
Émulateur / Machine Virtuelle
Framework front-end/Bibliothèque
Jeu
Git
Pile réseau
Réseau neuronal
Système opérateur
Moteur physique
Langage de programmation
Moteur d'expression régulière
Moteur de recherche
Coquille
Moteur de modèles
Éditeur de texte
Système de reconnaissance visuelle
Moteur Voxel
Navigateur Web
Serveur Web
Non classé
3D Renderer
C++ : Introduction au Ray Tracing : une méthode simple pour créer des images 3D
C++ : Comment fonctionne OpenGL : rendu logiciel en 500 lignes de code
C++ : Moteur Raycasting de Wolfenstein 3D
C++ : Rendu physique : de la théorie à la mise en œuvre
C++ : Ray Tracing en un week-end
C++ : Rastérisation : une implémentation pratique
C# / TypeScript / JavaScript : Apprendre à écrire un moteur logiciel 3D à partir de zéro en C#, TypeScript ou JavaScript
Java / JavaScript : Créez votre propre moteur de rendu 3D
Java : Comment créer votre propre moteur de rendu 3D simple en Java pur
JavaScript / Pseudocode : Infographie à partir de zéro
Python : un modélisateur 3D
Augmented Reality
C# : Comment : Tutoriel d'application de réalité augmentée pour les débutants avec Vuforia et Unity 3D [vidéo]
C# : Comment Unity ARCore [vidéo]
C# : Tutoriel AR Portal avec Unity [vidéo]
C# : Comment créer un Dragon en Réalité Augmentée dans Unity ARCore [vidéo]
C# : Tutoriel de réalité augmentée AR : portail ARKit vers l'envers [vidéo]
Python : Réalité Augmentée avec Python et OpenCV
BitTorrent Client
C# : Créer un client BitTorrent à partir de zéro en C#
Go : Créer un client BitTorrent à partir de zéro dans Go
Nim : Écrire un analyseur Bencode
Node.js : Écrivez votre propre client bittorrent
Python : Un client BitTorrent en Python 3.5
Blockchain / Cryptocurrency
ATS : Blockchain Fonctionnelle
C# : Programmation de la Blockchain en C#
Crystal : Écrivez votre propre algorithme blockchain et PoW à l'aide de Crystal
Go : Construire une blockchain dans Go
Go : Codez votre propre blockchain en moins de 200 lignes de Go
Java : Créer votre première blockchain avec Java
JavaScript : Une implémentation de cryptomonnaie en moins de 1500 lignes de code
JavaScript : Construisez votre propre Blockchain en JavaScript
JavaScript : apprendre et créer une blockchain JavaScript
JavaScript : Créer une blockchain avec JavaScript
JavaScript : Comment lancer votre propre crypto-monnaie prête pour la production
JavaScript : Écrire une Blockchain dans Node.js
Kotlin : Implémentons une cryptomonnaie dans Kotlin
Python : Apprenez les blockchains en en construisant une
Python : Construisez votre propre blockchain : un tutoriel Python
Python : Une introduction pratique à la Blockchain avec Python
Python : Construisons la plus petite blockchain
Ruby : Programmation des blockchains étape par étape (édition du livre des manuscrits)
Scala : Comment construire une blockchain simple basée sur des acteurs
TypeScript : Naivecoin : un tutoriel pour construire une cryptomonnaie
TypeScript : NaivecoinStake : un tutoriel pour construire une cryptomonnaie avec le consensus Proof of Stake
Rust : Construire une blockchain dans Rust & Substrat
Bot
Haskell : lancez votre propre bot IRC
Node.js : Création d'un simple robot IA Facebook Messenger avec API.ai dans Node.js
Node.js : Comment créer un bot de télégramme réactif
Node.js : Créer un bot Discord
Node.js : gifbot - Créer une application GitHub
Node.js : Créer un chatbot IA simple avec l'API Web Speech et Node.js
Python : Comment créer votre premier robot Slack avec Python
Python : Comment créer un Slack Bot avec Python à l'aide de l'API Slack Events et de Django en moins de 20 minutes
Python : créer un robot Reddit
Python : Comment créer un bot Reddit [vidéo]
Python : Comment créer un robot Telegram à l'aide de Python
Python : Créer un robot Twitter en Python à l'aide de Tweepy
Python : Créer un bot Reddit avec Python et PRAW [vidéo]
R : Créez un robot de trading de crypto-monnaie avec R
Rust : Un bot pour Starcraft en Rust, C ou tout autre langage
Command-Line Tool
Go : Visualisez vos contributions git locales avec Go
Go : Créez une application en ligne de commande avec Go : lolcat
Go : Construire une commande cli avec Go : cowsay
Go : Tutoriel Go CLI : clone de fortune
Nim : Ecrire une alternative stow pour gérer les dotfiles
Node.js : Créer un outil CLI en Javascript
Rust : applications en ligne de commande dans Rust
Rust : Écrire un outil de ligne de commande dans Rust
Database
C : Construisons une base de données simple
C++ : créez votre propre Redis à partir de zéro
C# : créez votre propre base de données
Clojure : une base de données inspirée de l'archéologie
Crystal : Pourquoi devriez-vous créer votre propre base de données NoSQL
Go : Créez votre propre base de données à partir de zéro : persistance, indexation, concurrence
Allez : créez votre propre Redis à partir de zéro
JavaScript : Dagoba : une base de données de graphes en mémoire
Python : DBDB : base de données sur les lits pour chiens
Python : Écrivez votre propre Redis miniature avec Python
Ruby : créez votre propre magasin KV rapide et persistant dans Ruby
Rust : créez votre propre client et serveur Redis
Docker
C : Conteneurs Linux en 500 lignes de code
Go : créez votre propre conteneur en utilisant moins de 100 lignes de Go
Go : Construire un conteneur à partir de zéro dans Go [vidéo]
Python : Un atelier sur les conteneurs Linux : Reconstruire Docker from Scratch
Python : Une imitation de preuve de concept de Docker, écrite en 100% Python
Shell : Docker implémenté dans une centaine de lignes de bash
Emulator / Virtual Machine
C : Interpréteurs de bytecode développés en interne
C : Machine virtuelle en C
C : Écrivez votre propre machine virtuelle
C : Ecriture d'un émulateur Game Boy, Cinoop
C++ : Comment écrire un émulateur (interpréteur CHIP-8)
C++ : Tutoriel d'émulation (interpréteur CHIP-8)
C++ : Tutoriel d'émulation (émulateur GameBoy)
C++ : Tutoriel d'émulation (émulateur Master System)
C++ : Émulateur NES From Scratch [vidéo]
Common Lisp : CHIP-8 en Common Lisp
JavaScript : émulation GameBoy en JavaScript
Python : Bases de l'émulation : écrivez votre propre émulateur/interprète Chip 8
Rust : 0dmg : Apprendre Rust en créant un émulateur Game Boy partiel
Front-end Framework / Library
JavaScript : WTF est JSX (Construisons un moteur de rendu JSX)
JavaScript : Un guide DIY pour créer votre propre React
JavaScript : Construire React From Scratch [vidéo]
JavaScript : Gooact : Réagissez en 160 lignes de JavaScript
JavaScript : découvrez comment fonctionne le package React Reconciler en créant votre propre DOM React léger
JavaScript : Construisez-vous un Redux
JavaScript : Écrivons Redux !
JavaScript : Redux : implémentation de Store from Scratch [vidéo]
JavaScript : créez votre propre AngularJS simplifié en 200 lignes de JavaScript
JavaScript : créez votre propre AngularJS
JavaScript : Comment écrire votre propre DOM virtuel
JavaScript : Construire un framework frontend, from scratch, avec des composants (templating, state, VDOM)
JavaScript : créez votre propre React
JavaScript : Créer un moteur de rendu React personnalisé [vidéo]
Game
C : Héros fait à la main
C : Comment programmer un jeu NES en C
C : Moteur d'échecs en C [vidéo]
C : Faisons : Dangerous Dave [vidéo]
C : Apprendre la programmation de jeux vidéo en C [vidéo]
C : Codage d'un solveur de Sudoku en C [vidéo]
C : Coder un RPG Rogue/Nethack en C [vidéo]
C : Sur Tetris et la réimplémentation
C++ : évasion
C++ : Débuter la programmation de jeux v2.0
C++ : Tutoriel Tetris en plateforme C++ indépendant axé sur la logique de jeu pour les débutants
C++ : Refaire Cavestory en C++ [vidéo]
C++ : Reconstruire Cave Story [vidéo]
C++ : Space Invaders à partir de zéro
C# : Apprenez le C# en créant un RPG simple
C# : Créer un jeu Roguelike en C#
C# : Créer un RPG C#/WPF
Go : Jeux avec Go [vidéo]
Java : Coder un moteur de jeu 2D à l'aide de Java - Cours complet pour débutants [vidéo]
Java : Développement de jeux 3D avec LWJGL 3
JavaScript : jeu de réflexion 2D utilisant Phaser
JavaScript : Comment créer Flappy Bird en HTML5 avec Phaser
JavaScript : développer des jeux avec React, Redux et SVG
JavaScript : Créez votre propre jeu 8-Ball Pool à partir de zéro [vidéo]
JavaScript : Comment créer votre premier Roguelike
JavaScript : pensez comme un programmeur : comment créer Snake en utilisant uniquement JavaScript, HTML et CSS
Lua : BYTEPATH
Python : Développer des jeux avec PyGame
Python : Créer des jeux avec Python et Pygame [pdf]
Python : Tutoriel Roguelike révisé
Ruby : Développer des jeux avec Ruby
Rubis : Serpent Rubis
Rust : Adventures in Rust : un jeu 2D de base
Rust : Tutoriel Roguelike dans Rust + tcod
Git
Haskell : Réimplémenter « git clone » dans Haskell de bas en haut
JavaScript : Gitlet
JavaScript : Construire GIT - Apprendre GIT
Python : juste assez d'un client Git pour créer un dépôt, valider et se pousser vers GitHub
Python : Écrivez-vous un Git !
Python : ugit : Apprenez les composants internes de Git en créant vous-même Git
Ruby : Reconstruire Git en Ruby
Network Stack
C : Guide de Beej sur la programmation réseau
C : Codons une pile TCP/IP
C / Python : Construisez votre propre VPN/Switch virtuel
Ruby : Comment créer une pile réseau dans Ruby
Neural Network
C# : OCR de réseau neuronal
F# : Construire des réseaux de neurones en F#
Go : Construire un perceptron multicouche avec Golang
Go : Comment construire un réseau de neurones artificiels simple avec Go
Go : Construire un réseau neuronal à partir de zéro dans Go
JavaScript / Java : Réseaux de neurones - La nature du code [vidéo]
JavaScript : Réseaux de neurones à partir de zéro pour les linguistes JavaScript (Partie 1 — Le Perceptron)
Python : Un Réseau de Neurones en 11 lignes de Python
Python : implémenter un réseau de neurones à partir de zéro
Python : Reconnaissance Optique de Caractères (OCR)
Python : Classification des panneaux de signalisation avec un réseau convolutif
Python : générer de la musique à l'aide du réseau neuronal LSTM dans Keras
Python : une introduction aux réseaux de neurones convolutifs
Python : Réseaux de neurones : de zéro à héros
Operating System
Assemblage : écriture d'un petit chargeur de démarrage x86
Assemblage : Baking Pi – Développement de systèmes d’exploitation
C : Construire une pile logicielle et matérielle pour un ordinateur simple à partir de zéro [vidéo]
C : Systèmes d'exploitation : De 0 à 1
C : Le petit livre sur le développement des OS
C : roulez votre propre système d'exploitation clone UNIX jouet
C : Kernel 101 – Écrivons un noyau
C : Kernel 201 – Écrivons un noyau avec prise en charge du clavier et de l'écran
C : Construire un noyau multitâche minimal pour ARM à partir de zéro
C : Comment créer un OS à partir de zéro
C : Tutoriel Malloc
C : Pirater la mémoire virtuelle
C : Apprentissage du développement de système d'exploitation utilisant le noyau Linux et Raspberry Pi
C : Développement de systèmes d'exploitation pour les nuls
C++ : Écrivez votre propre système d'exploitation [vidéo]
C++ : Écriture d'un chargeur de démarrage
Rust : Écrire un OS dans Rust
Rust : Ajouter le didacticiel du système d'exploitation RISC-V Rust
(n'importe lequel) : Linux à partir de zéro
Physics Engine
C : Tutoriel de physique du jeu vidéo
C++ : Série sur la physique des jeux par Allen Chou
C++ : Comment créer un moteur physique personnalisé
C++ : Tutoriel du moteur physique 3D [vidéo]
JavaScript : Comment fonctionnent les moteurs physiques
JavaScript : Détection de collisions à grande phase à l'aide du partitionnement spatial
JavaScript : créez un moteur physique 2D simple pour les jeux JavaScript
Programming Language
(n'importe lequel) : mal - Faites un Lisp
Assemblée : Jonesforth
C : Le premier éboueur de bébé
C : Construisez votre propre Lisp : Apprenez le C et créez votre propre langage de programmation en 1000 lignes de code
C : Écrire un simple garbage collector en C
C : Interpréteur C qui s'interprète lui-même.
C : Version AC & x86 du "Let's Build a Compiler" de Jack Crenshaw
C : Un parcours expliquant comment créer un compilateur à partir de zéro
C++ : Écrire votre propre compilateur de jouets à l'aide de Flex
C++ : Comment créer un compilateur [vidéo]
C++ : Kaléidoscope : Implémentation d'un langage avec LLVM
F# : Comprendre les combinateurs d'analyseurs
Elixir : Démystifier les compilateurs en écrivant le vôtre [vidéo]
Allez : Le compilateur Super Tiny
Go : Analyse lexicale dans Go [vidéo]
Haskell : Construisons un compilateur
Haskell : Écrivez-vous un Haskell
Haskell : Écrivez-vous un schéma en 48 heures
Haskell : Écrivez-vous un plan
Java : Création d'interpréteurs : Un manuel pour créer des langages de programmation
Java : Création du langage JVM
JavaScript : le compilateur Super Tiny
JavaScript : le super petit interprète
JavaScript : interpréteur Little Lisp
JavaScript : Comment implémenter un langage de programmation en JavaScript
JavaScript : Allons écrire un Lisp
OCaml : Écrire un compilateur C
OCaml : Writing a Lisp, la série
Pascal : Construisons un compilateur
Python : un interpréteur Python écrit en Python
Python : lisp.py : créez votre propre interpréteur Lisp
Python : Comment écrire un interpréteur Lisp en Python
Python : Construisons un interpréteur simple
Python : créez votre propre langage de programmation simple interprété [vidéo]
Python : Du code source au code machine : créez votre propre compilateur à partir de zéro
Racket : Beautiful Racket : Comment créer vos propres langages de programmation avec Racket
Ruby : un compilateur à partir de zéro
Ruby : compilateur Markdown à partir de zéro dans Ruby
Rust : Vous voulez donc créer une VM de langage
Rust : Apprendre les combinateurs d'analyseurs avec Rust
Swift : Construire un LISP à partir de zéro avec Swift
TypeScript : créez votre propre compilateur WebAssembly
Regex Engine
C : Un matcheur d'expressions régulières
C : La correspondance d'expressions régulières peut être simple et rapide
Aller : Comment créer un moteur d'expression régulière à partir de zéro
JavaScript : créez un moteur Regex en moins de 40 lignes de code
JavaScript : Comment implémenter des expressions régulières en javascript fonctionnel à l'aide de dérivés
JavaScript : Implémentation d'un moteur d'expressions régulières
Perl : Comment fonctionnent les expressions rationnelles
Python : Créez vos propres moteurs d'expressions régulières : Backtracking, NFA, DFA
Scala : Pas de magie : expressions régulières
Search Engine
CSS : Un moteur de recherche en CSS
Python : Construire un moteur de recherche avec Redis et redis-py
Python : Construire un moteur d'indexation d'espace vectoriel en Python
Python : Créer un moteur de recherche basé sur Python [vidéo]
Python : Faire en sorte que la recherche de texte apprenne des commentaires
Python : Rechercher des mots importants dans un texte à l'aide de TF-IDF
Shell
C : Tutoriel - Ecrire un Shell en C
C : Construisons une coquille !
C : Écriture d'un shell UNIX
C : Construisez votre propre coque
C : Ecrire un shell en C
Go : Ecrire un shell simple en Go
Rust : créez votre propre shell en utilisant Rust
Template Engine
JavaScript : moteur de template JavaScript en seulement 20 lignes
JavaScript : Comprendre les micro-modèles JavaScript
Python : Approche : Créer un moteur de modèles de jouets en Python
Python : un moteur de modèles
Ruby : Comment écrire un moteur de template en moins de 30 lignes de code
Text Editor
C : Créez votre propre éditeur de texte
C++ : Concevoir un éditeur de texte simple
Python : Tutoriel Python : Créez votre propre éditeur de texte [vidéo]
Python : créez un éditeur de texte Python simple !
Ruby : Créer un éditeur de texte collaboratif à l'aide de Rails
Rust : Hecto : créez votre propre éditeur de texte dans Rust
Visual Recognition System
Python : Développer un système de reconnaissance de plaque d'immatriculation avec Machine Learning en Python
Python : Construire un pipeline de reconnaissance faciale avec du Deep Learning dans Tensorflow
Voxel Engine
C++ : Créons un moteur Voxel
Java : Tutoriel du moteur Java Voxel [vidéo]
Web Browser
Rust : construisons un moteur de navigateur
Python : Ingénierie du navigateur
Web Server
C# : Écrire un serveur Web à partir de zéro
Node.js : créez votre propre serveur Web à partir de zéro en JavaScript
Node.js : Codons un serveur Web à partir de zéro avec NodeJS Streams
Node.js : permet-build-express
PHP : Ecrire un serveur web en PHP pur
Python : un serveur Web simple
Python : construisons un serveur Web.
Python : application Web à partir de zéro
Python : Construire un serveur HTTP de base à partir de zéro en Python
Python : Implémentation d'une API Web RESTful avec Python & Flask
Ruby : Construire un serveur Websockets simple à partir de zéro dans Ruby
(tous) : De la NAND à Tetris : construire un ordinateur moderne à partir des premiers principes
Alliage : la politique de même origine
C : Comment écrire un lecteur vidéo en moins de 1000 lignes
C : Apprenez à écrire une table de hachage en C
C : Les bases d'un émulateur de terminal
C : Écrire un appel système
C : Sol - Un courtier MQTT à partir de zéro
C++ : Construisez votre propre casque VR pour 200$
C++ : Comment fonctionnent les gestionnaires de fenêtres X et comment en écrire un
C++ : écriture d'un débogueur Linux
C++ : Comment est réalisée une intro 64k
C++ : Créez votre propre moteur de jeu
C# : Réseau C# : créez un serveur de discussion TCP, des jeux TCP, UDP Pong et plus encore
C# : Chargement et rendu d'animations squelettiques 3D à partir de zéro en C# et GLSL
Clojure : Construire un correcteur orthographique
Go : Construisez un émulateur de terminal simple en 100 lignes de Golang
Aller : créons un équilibreur de charge simple
Go : Encodage vidéo à partir de zéro
Java : Comment créer une application Android Reddit [vidéo]
JavaScript : Créez votre propre bundle de modules - Minipack
JavaScript : apprenez les promesses JavaScript en créant une promesse à partir de zéro
JavaScript : Implémentation des promesses à partir de zéro (méthode TDD)
JavaScript : implémentez votre propre méthode : call(), apply() et bind() en JavaScript
JavaScript : algorithmes JavaScript et structures de données
JavaScript : créez une application de covoiturage avec React Native
JavaScript : créez votre propre AdBlocker en (littéralement) 10 minutes
Kotlin : créez votre propre cache
Lua : Construire un CDN à partir de zéro pour en savoir plus sur le CDN
Nim : Écriture d'un analyseur de protocole Redis
Nim : Ecrire un système de Build
Nim : Écriture d'un framework MiniTest
Nim : Écriture d'un analyseur DMIDecode
Nim : Écrire un analyseur INI
Nim : Écrire un vérificateur de liens
Nim : Écriture d'un service de raccourcissement d'URL
Node.js : Construire un générateur de site statique en 40 lignes avec Node.js
Node.js : Création d'un serveur et d'une solution d'authentification unique (SSO) simples à partir de zéro dans Node.js.
Node.js : Comment créer une application Node CLI réelle avec Node
Node.js : Créer un serveur DNS dans Node.js
PHP : écrivez votre propre MVC à partir de zéro en PHP
PHP : Créez votre propre blog
PHP : PHP moderne sans framework
PHP : Coder un moteur de recherche Web en PHP
Python : Créer une bibliothèque de Deep Learning [vidéo]
Python : Comment créer un scanner de documents mobile génial en seulement 5 minutes
Python : système d'intégration continue
Python : Systèmes de recommandation en Python : tutoriel pour débutants
Python : Écrivez un détecteur de spam SMS avec Scikit-learn
Python : un moteur de recommandation simple basé sur le contenu en Python
Python : Prédictions boursières avec LSTM en Python
Python : Construire un réseau contradictoire génératif (GAN) simple à l'aide de Tensorflow
Python : Apprenez les algorithmes de ML en codant : arbres de décision
Python : algorithme de décodage JSON
Python : Créez votre propre plugin Git avec python
Ruby : Un podomètre dans le monde réel
Ruby : Créer une application de bureau Linux avec Ruby
Rust : Construire un serveur DNS dans Rust
Rust : écrire un service de discussion évolutif à partir de zéro
Rust : WebGL + Rust : Tutoriel de base sur l'eau
TypeScript : Tiny Package Manager : apprend le fonctionnement de npm ou Yarn
Les soumissions sont les bienvenues, envoyez simplement un PR ou créez un problème
Aidez-nous à examiner les soumissions en attente en laissant des commentaires et des « réactions »
Ce référentiel est l'œuvre de nombreux contributeurs. Il a été lancé par Daniel Stefanovic et est maintenant maintenu par CodeCrafters, Inc. Dans la mesure du possible par la loi, CodeCrafters, Inc. a renoncé à tous les droits d'auteur et droits connexes ou voisins sur cette œuvre.