Este repositorio es una recopilación de guías paso a paso bien escritas para recrear nuestras tecnologías favoritas desde cero.
Lo que no puedo crear, no lo entiendo - Richard Feynman.
Es una excelente manera de aprender.
Representador 3D
Realidad aumentada
Cliente BitTorrent
Blockchain / Criptomoneda
Bot
Herramienta de línea de comandos
Base de datos
Estibador
Emulador/Máquina Virtual
Marco de interfaz de usuario/Biblioteca
Juego
git
Pila de red
Red neuronal
Sistema operativo
Motor de física
Lenguaje de programación
Motor de expresiones regulares
Motor de búsqueda
Caparazón
Motor de plantillas
Editor de texto
Sistema de reconocimiento visual
Motor de vóxeles
Navegador web
Servidor web
Sin categoría
3D Renderer
C++ : Introducción al trazado de rayos: un método sencillo para crear imágenes 3D
C++ : Cómo funciona OpenGL: renderizado de software en 500 líneas de código
C++ : motor Raycasting de Wolfenstein 3D
C++ : renderizado basado físicamente: de la teoría a la implementación
C++ : trazado de rayos en un fin de semana
C++ : Rasterización: una implementación práctica
C# / TypeScript / JavaScript : aprender a escribir un motor de software 3D desde cero en C#, TypeScript o JavaScript
Java/JavaScript : construye tu propio renderizador 3D
Java : Cómo crear su propio motor de renderizado 3D simple en Java puro
JavaScript / Pseudocódigo : gráficos por computadora desde cero
Python : un modelador 3D
Augmented Reality
C# : Cómo: Tutorial de la aplicación de realidad aumentada para principiantes con Vuforia y Unity 3D [vídeo]
C# : Cómo utilizar Unity ARCore [vídeo]
C# : Tutorial del portal AR con Unity [vídeo]
C# : Cómo crear un Dragón en Realidad Aumentada en Unity ARCore [vídeo]
C# : Tutorial de AR con realidad aumentada: Portal ARKit al revés [vídeo]
Python : Realidad Aumentada con Python y OpenCV
BitTorrent Client
C# : Creación de un cliente BitTorrent desde cero en C#
Go : creación de un cliente BitTorrent desde cero en Go
Nim : escribiendo un analizador Bencode
Node.js : escribe tu propio cliente bittorrent
Python : un cliente BitTorrent en Python 3.5
Blockchain / Cryptocurrency
ATS : Cadena de bloques funcional
C# : Programación de Blockchain en C#
Crystal : escriba su propio algoritmo blockchain y PoW usando Crystal
Go : Construyendo Blockchain en Go
Go : codifica tu propia cadena de bloques en menos de 200 líneas de Go
Java : Creando tu primera blockchain con Java
JavaScript : una implementación de criptomonedas en menos de 1500 líneas de código
JavaScript : construye tu propia Blockchain en JavaScript
JavaScript : aprenda y cree una cadena de bloques de JavaScript
JavaScript : creación de una cadena de bloques con JavaScript
JavaScript : Cómo lanzar su propia criptomoneda lista para producción
JavaScript : escribir una cadena de bloques en Node.js
Kotlin : implementemos una criptomoneda en Kotlin
Python : aprenda blockchains construyendo uno
Python : construye tu propia cadena de bloques: un tutorial de Python
Python : una introducción práctica a Blockchain con Python
Python : construyamos la cadena de bloques más pequeña
Ruby : Programación de cadenas de bloques paso a paso (Edición del libro de manuscritos)
Scala : Cómo construir una cadena de bloques simple basada en actores
TypeScript : Naivecoin: un tutorial para crear una criptomoneda
TypeScript : NaivecoinStake: un tutorial para construir una criptomoneda con el consenso de Prueba de participación
Rust : construcción de una cadena de bloques en Rust y Substrate
Bot
Haskell : crea tu propio robot IRC
Node.js : Creación de un robot AI simple de Facebook Messenger con API.ai en Node.js
Node.js : Cómo crear un bot de Telegram responsivo
Node.js : crea un bot de Discord
Node.js : gifbot - Creación de una aplicación GitHub
Node.js : creación de un chatbot de IA simple con Web Speech API y Node.js
Python : Cómo construir tu primer Slack Bot con Python
Python : Cómo construir un Slack Bot con Python usando la API de Slack Events y Django en menos de 20 minutos
Python : construye un bot de Reddit
Python : Cómo crear un bot de Reddit [vídeo]
Python : Cómo crear un bot de Telegram usando Python
Python : crea un bot de Twitter en Python usando Tweepy
Python : creación de Reddit Bot con Python y PRAW [vídeo]
R : cree un robot de comercio de criptomonedas con R
Rust : Un bot para Starcraft en Rust, C o cualquier otro idioma
Command-Line Tool
Go : visualiza tus contribuciones locales de git con Go
Go : crea una aplicación de línea de comandos con Go: lolcat
Ir : creación de un comando cli con Go: cowsay
Ir : Ir al tutorial de CLI: clon de fortuna
Nim : escribiendo una alternativa de almacenamiento para administrar archivos de puntos
Node.js : crea una herramienta CLI en Javascript
Rust : aplicaciones de línea de comandos en Rust
Rust : Escribir una herramienta de línea de comandos en Rust
Database
C : construyamos una base de datos simple
C++ : crea tu propio Redis desde cero
C# : cree su propia base de datos
Clojure : una base de datos inspirada en la arqueología
Crystal : Por qué deberías crear tu propia base de datos NoSQL
Ir : cree su propia base de datos desde cero: persistencia, indexación, simultaneidad
Ir : construye tu propio Redis desde cero
JavaScript : Dagoba: una base de datos de gráficos en memoria
Python : DBDB: base de datos de camas para perros
Python : escribe tu propio Redis en miniatura con Python
Ruby : construye tu propia tienda KV rápida y persistente en Ruby
Rust : construye tu propio cliente y servidor Redis
Docker
C : contenedores de Linux en 500 líneas de código
Go : construya su propio contenedor usando menos de 100 líneas de Go
Go : construir un contenedor desde cero en Go [vídeo]
Python : un taller sobre contenedores de Linux: reconstruir Docker desde cero
Python : una imitación de prueba de concepto de Docker, escrita 100% en Python
Shell : Docker implementado en alrededor de 100 líneas de bash
Emulator / Virtual Machine
C : intérpretes de código de bytes locales
C : Máquina virtual en C
C : escribe tu propia máquina virtual
C : Escribiendo un emulador de Game Boy, Cinoop
C++ : Cómo escribir un emulador (intérprete CHIP-8)
C++ : tutorial de emulación (intérprete CHIP-8)
C++ : tutorial de emulación (emulador de GameBoy)
C++ : tutorial de emulación (emulador de Master System)
C++ : Emulador de NES desde cero [vídeo]
Lisp común : CHIP-8 en Lisp común
JavaScript : Emulación de GameBoy en JavaScript
Python : Conceptos básicos de emulación: escriba su propio emulador/intérprete de Chip 8
Rust : 0dmg: Aprendiendo Rust construyendo un emulador parcial de Game Boy
Front-end Framework / Library
JavaScript : WTF es JSX (construyamos un renderizador JSX)
JavaScript : una guía de bricolaje para construir tu propio React
JavaScript : creación de React desde cero [vídeo]
JavaScript : Gooact: reacciona en 160 líneas de JavaScript
JavaScript : aprenda cómo funciona el paquete React Reconciler creando su propio DOM ligero de React
JavaScript : constrúyase usted mismo un Redux
JavaScript : ¡Escribamos Redux!
JavaScript : Redux: Implementación de Store desde cero [vídeo]
JavaScript : cree su propio AngularJS simplificado en 200 líneas de JavaScript
JavaScript : crea tu propio AngularJS
JavaScript : Cómo escribir tu propio DOM virtual
JavaScript : creación de un marco de interfaz, desde cero, con componentes (plantillas, estado, VDOM)
JavaScript : construye tu propio React
JavaScript : creación de un renderizador React personalizado [vídeo]
Game
C : Héroe hecho a mano
C : Cómo programar un juego de NES en C
C : Motor de ajedrez en C [vídeo]
C : Hagamos: Dave peligroso [vídeo]
C : Aprenda a programar videojuegos en C [vídeo]
C : Codificación de un solucionador de Sudoku en C [vídeo]
C : Codificación de un juego de rol Rogue/Nethack en C [vídeo]
C : Sobre Tetris y reimplementación
C++ : fuga
C++ : Comienzo de la programación de juegos v2.0
C++ : Tutorial de Tetris en plataforma C++ independiente centrado en la lógica del juego para principiantes.
C++ : Rehaciendo Cavestory en C++ [vídeo]
C++ : Reconstrucción de la historia de la cueva [vídeo]
C++ : Invasores del espacio desde cero
C# : aprenda C# creando un juego de rol simple
C# : Creación de un juego Roguelike en C#
C# : construir un juego de rol C#/WPF
Go : Juegos con Go [vídeo]
Java : Codifique un motor de juego 2D usando Java - Curso completo para principiantes [vídeo]
Java : desarrollo de juegos 3D con LWJGL 3
JavaScript : juego de ruptura en 2D con Phaser
JavaScript : Cómo crear Flappy Bird en HTML5 con Phaser
JavaScript : desarrollo de juegos con React, Redux y SVG
JavaScript : crea tu propio juego de billar de bolas 8 desde cero [vídeo]
JavaScript : Cómo crear tu primer Roguelike
JavaScript : Piense como un programador: cómo construir Snake usando solo JavaScript, HTML y CSS
Lua : ruta de bytes
Python : desarrollo de juegos con PyGame
Python : creación de juegos con Python y Pygame [pdf]
Python : Tutorial de Roguelike revisado
Ruby : desarrollo de juegos con Ruby
Rubí : Serpiente Rubí
Rust : Aventuras en Rust: un juego básico en 2D
Rust : Tutorial de Roguelike en Rust + tcod
Git
Haskell : Reimplementación de “git clone” en Haskell desde abajo hacia arriba
JavaScript : Gitlet
JavaScript : Construya GIT - Aprenda GIT
Python : suficiente cliente Git para crear un repositorio, confirmarlo y enviarlo a GitHub.
Python : ¡Escribe un Git!
Python : ugit: aprenda los aspectos internos de Git construyendo Git usted mismo
Ruby : Reconstrucción de Git en Ruby
Network Stack
C : Guía de Beej para la programación de redes
C : Codifiquemos una pila TCP/IP
C/Python : construye tu propia VPN/Switch virtual
Ruby : Cómo construir una pila de red en Ruby
Neural Network
C# : OCR de red neuronal
F# : Construcción de redes neuronales en F#
Ir : construye un perceptrón multicapa con Golang
Go : Cómo construir una red neuronal artificial simple con Go
Go : Construyendo una red neuronal desde cero en Go
JavaScript/Java : Redes neuronales: la naturaleza del código [vídeo]
JavaScript : redes neuronales desde cero para lingüistas de JavaScript (Parte 1: El perceptrón)
Python : una red neuronal en 11 líneas de Python
Python : implementar una red neuronal desde cero
Python : reconocimiento óptico de caracteres (OCR)
Python : clasificación de señales de tráfico con una red convolucional
Python : genera música usando la red neuronal LSTM en Keras
Python : una introducción a las redes neuronales convolucionales
Python : Redes neuronales: de cero a héroe
Operating System
Ensamblaje : escritura de un gestor de arranque Tiny x86
Ensamblaje : Baking Pi – Desarrollo de sistemas operativos
C : Creación de una pila de software y hardware para una computadora sencilla desde cero [vídeo]
C : Sistemas Operativos: De 0 a 1
C : El pequeño libro sobre el desarrollo de sistemas operativos.
C : Rueda tu propio sistema operativo clon UNIX de juguete
C : Kernel 101 – Escribamos un Kernel
C : Kernel 201: escribamos un kernel con soporte para teclado y pantalla
C : Construya un kernel multitarea mínimo para ARM desde cero
C : Cómo crear un sistema operativo desde cero
C : tutorial de Malloc
C : Hackear la memoria virtual
C : Aprendizaje sobre el desarrollo de sistemas operativos utilizando el kernel de Linux y Raspberry Pi.
C : Desarrollo de sistemas operativos para principiantes
C++ : escribe tu propio sistema operativo [vídeo]
C++ : escribir un gestor de arranque
Rust : escribir un sistema operativo en Rust
Rust : Tutorial sobre cómo agregar RISC-V al sistema operativo Rust
(cualquiera) : Linux desde cero
Physics Engine
C : Tutorial de física de videojuegos
C++ : serie de física de juegos de Allen Chou
C++ : Cómo crear un motor de física personalizado
C++ : Tutorial del motor de física 3D [vídeo]
JavaScript : cómo funcionan los motores de física
JavaScript : detección de colisiones de fase amplia mediante partición espacial
JavaScript : cree un motor de física 2D simple para juegos de JavaScript
Programming Language
(cualquiera) : mal - Hacer un Lisp
Asamblea : Jonesforth
C : El primer recolector de basura del bebé
C : Construya su propio Lisp: aprenda C y cree su propio lenguaje de programación en 1000 líneas de código
C : Escribir un recolector de basura simple en C
C : intérprete de C que se interpreta a sí mismo.
C : versión AC y x86 de "Construyamos un compilador" de Jack Crenshaw
C : Un viaje que explica cómo crear un compilador desde cero.
C++ : escribir su propio compilador de juguetes usando Flex
C++ : Cómo crear un compilador [vídeo]
C++ : Caleidoscopio: Implementación de un lenguaje con LLVM
F# : Comprensión de los combinadores de analizadores
Elixir : Desmitificando compiladores escribiendo el tuyo propio [vídeo]
Ir : El compilador súper pequeño
Go : escaneo léxico en Go [vídeo]
Haskell : construyamos un compilador
Haskell : escribirte un Haskell
Haskell : escriba usted mismo un esquema en 48 horas
Haskell : escribe un plan
Java : elaboración de intérpretes: un manual para crear lenguajes de programación
Java : creación del lenguaje JVM
JavaScript : el compilador súper pequeño
JavaScript : el intérprete súper pequeño
JavaScript : intérprete de Little Lisp
JavaScript : Cómo implementar un lenguaje de programación en JavaScript
JavaScript : vamos a escribir un Lisp
OCaml : escribir un compilador de C
OCaml : Escribiendo un Lisp, la serie
Pascal : construyamos un compilador
Python : un intérprete de Python escrito en Python
Python : lisp.py: crea tu propio intérprete Lisp
Python : Cómo escribir un intérprete Lisp en Python
Python : construyamos un intérprete simple
Python : cree su propio lenguaje de programación interpretado simple [vídeo]
Python : del código fuente al código máquina: cree su propio compilador desde cero
Racket : Beautiful Racket: Cómo crear tus propios lenguajes de programación con Racket
Ruby : un compilador desde cero
Ruby : compilador Markdown desde cero en Ruby
Rust : entonces desea crear una máquina virtual de lenguaje
Rust : aprendizaje de combinadores de analizadores con Rust
Swift : construir un LISP desde cero con Swift
TypeScript : cree su propio compilador WebAssembly
Regex Engine
C : un comparador de expresiones regulares
C : La coincidencia de expresiones regulares puede ser simple y rápida
Ir : Cómo construir un motor de expresiones regulares desde cero
JavaScript : cree un motor Regex en menos de 40 líneas de código
JavaScript : Cómo implementar expresiones regulares en JavaScript funcional usando derivados
JavaScript : implementación de un motor de expresión regular
Perl : cómo funcionan las expresiones regulares
Python : cree sus propios motores de expresiones regulares: retroceso, NFA, DFA
Scala : Sin magia: expresiones regulares
Search Engine
CSS : Un motor de búsqueda en CSS
Python : creación de un motor de búsqueda usando Redis y redis-py
Python : creación de un motor de indexación de espacios vectoriales en Python
Python : creación de un motor de búsqueda basado en Python [vídeo]
Python : hacer que la búsqueda de texto aprenda de los comentarios
Python : encontrar palabras importantes en texto usando TF-IDF
Shell
C : Tutorial - Escribir un Shell en C
C : ¡Construyamos un caparazón!
C : Escribir un Shell UNIX
C : construye tu propio caparazón
C : escribir un shell en C
Ir : escribir un shell simple en Go
Rust : construye tu propio caparazón usando Rust
Template Engine
JavaScript : motor de plantillas JavaScript en solo 20 líneas
JavaScript : comprensión de las microplantillas de JavaScript
Python : Enfoque: creación de un motor de plantillas de juguetes en Python
Python : un motor de plantillas
Ruby : Cómo escribir un motor de plantillas en menos de 30 líneas de código
Text Editor
C : crea tu propio editor de texto
C++ : Diseño de un editor de texto simple
Python : Tutorial de Python: crea tu propio editor de texto [vídeo]
Python : ¡Crea un editor de texto Python simple!
Ruby : cree un editor de texto colaborativo utilizando Rails
Rust : Hecto: construye tu propio editor de texto en Rust
Visual Recognition System
Python : desarrollo de un sistema de reconocimiento de matrículas con aprendizaje automático en Python
Python : creación de un canal de reconocimiento facial con aprendizaje profundo en Tensorflow
Voxel Engine
C++ : hagamos un motor Voxel
Java : Tutorial del motor Java Voxel [vídeo]
Web Browser
Rust : construyamos un motor de navegador
Python : ingeniería del navegador
Web Server
C# : escribir un servidor web desde cero
Node.js : cree su propio servidor web desde cero en JavaScript
Node.js : codifiquemos un servidor web desde cero con NodeJS Streams
Node.js : vamos a construir-express
PHP : escribir un servidor web en PHP puro
Python : un servidor web sencillo
Python : construyamos un servidor web.
Python : aplicación web desde cero
Python : creación de un servidor HTTP básico desde cero en Python
Python : Implementación de una API web RESTful con Python y Flask
Ruby : creación de un servidor websockets sencillo desde cero en Ruby
(cualquiera) : De NAND a Tetris: construcción de una computadora moderna desde los primeros principios
Aleación : la política del mismo origen
C : Cómo escribir un reproductor de vídeo en menos de 1000 líneas
C : aprenda a escribir una tabla hash en C
C : Los conceptos básicos de un emulador de terminal
C : escribir una llamada al sistema
C : Sol: un corredor MQTT desde cero
C++ : construye tus propios auriculares VR por $200
C++ : Cómo funcionan los administradores de ventanas X y cómo escribir uno
C++ : escribir un depurador de Linux
C++ : cómo se hace una introducción de 64k
C++ : crea tu propio motor de juego
C# : Redes C#: cree un servidor de chat TCP, juegos TCP, UDP Pong y más
C# : Carga y renderizado de animaciones esqueléticas 3D desde cero en C# y GLSL
Clojure : construcción de un corrector ortográfico
Go : cree un emulador de terminal simple en 100 líneas de Golang
Ir : creemos un equilibrador de carga simple
Ir : Codificación de vídeo desde cero
Java : Cómo crear una aplicación Reddit para Android [vídeo]
JavaScript : cree su propio paquete de módulos: minipaquete
JavaScript : aprenda las promesas de JavaScript creando una promesa desde cero
JavaScript : implementación de promesas desde cero (forma TDD)
JavaScript : implemente su propio método call(), apply() y bind() en JavaScript
JavaScript : algoritmos de JavaScript y estructuras de datos
JavaScript : cree una aplicación de transporte con React Native
JavaScript : cree su propio AdBlocker en (literalmente) 10 minutos
Kotlin : crea tu propia caché
Lua : creación de una CDN desde cero para aprender sobre CDN
Nim : escritura de un analizador de protocolos de Redis
Nim : escribiendo un sistema de compilación
Nim : Escribir un marco MiniTest
Nim : escribiendo un analizador DMIDecode
Nim : escribiendo un analizador INI
Nim : escribiendo un verificador de enlaces
Nim : escribir un servicio de acortamiento de URL
Node.js : cree un generador de sitios estáticos en 40 líneas con Node.js
Node.js : creación de una solución y un servidor de inicio de sesión único (SSO) simples desde cero en Node.js.
Node.js : Cómo crear una aplicación Node CLI del mundo real con Node
Node.js : construir un servidor DNS en Node.js
PHP : escribe tu propio MVC desde cero en PHP
PHP : crea tu propio blog
PHP : PHP moderno sin marco
PHP : codificar un motor de búsqueda web en PHP
Python : cree una biblioteca de aprendizaje profundo [vídeo]
Python : Cómo construir un escáner de documentos móvil espectacular en solo 5 minutos
Python : sistema de integración continua
Python : Sistemas de recomendación en Python: Tutorial para principiantes
Python : escriba un detector de spam de SMS con Scikit-learn
Python : un motor de recomendación simple basado en contenido en Python
Python : Predicciones del mercado de valores con LSTM en Python
Python : construcción de una red generativa adversaria (GAN) simple usando Tensorflow
Python : aprenda algoritmos de aprendizaje automático codificando: árboles de decisión
Python : algoritmo de decodificación JSON
Python : crea tu propio complemento Git con Python
Ruby : un podómetro en el mundo real
Ruby : creación de una aplicación de escritorio Linux con Ruby
Rust : Construyendo un servidor DNS en Rust
Rust : creación de un servicio de chat escalable desde cero
Rust : WebGL + Rust: Tutorial básico sobre el agua
TypeScript : Tiny Package Manager: aprende cómo funciona npm o Yarn
Se aceptan envíos, simplemente envíe un PR o cree un problema
Ayúdanos a revisar los envíos pendientes dejando comentarios y "reacciones"
Este repositorio es el trabajo de muchos contribuyentes. Fue iniciado por Daniel Stefanovic y ahora lo mantiene CodeCrafters, Inc. En la medida de lo posible según la ley, CodeCrafters, Inc. ha renunciado a todos los derechos de autor y derechos relacionados o conexos a este trabajo.