├── CONTRIBUTING.md ├── resources.md └── README.md /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # CONTRIBUTING GUIDELINES 2 | 3 | * Tutorial(s) should work towards the completion of a small to large project in C 4 | * The use of other programming languages are okay as long as the focus is on C 5 | * Tutorials should be place under the correct category (i.e. a game tutorial would go under the Game Development category) and in alphabetical order 6 | * If submitting a multi-part series that doesn't include a Table of Contents, submit as follows: 7 | ``` 8 | Title: 9 | * [Part 1](link_to_part_1) 10 | * [Part 2](link_to_part_2) 11 | * [Part 3](link_to_part_3) 12 | ... 13 | ``` 14 | * If submitting a video series link directly to playtlist when possible (i.e. [Learn Video Game Programming in C](https://www.youtube.com/playlist?list=PLT6WFYYZE6uLMcPGS3qfpYm7T_gViYMMt)) 15 | * Mark tutorial(s) with appropriate tags: `book`, `video`, `in-progress`. (i.e. Handmade Hero `video` `in-progress`) 16 | * Mark abanonded tutorials with `abandoned` tag (i.e. Handmade Quake `video` `abandoned`) 17 | -------------------------------------------------------------------------------- /resources.md: -------------------------------------------------------------------------------- 1 | # Resources 2 | 3 | * C 4 | * [awesome-c](https://github.com/kozross/awesome-c) 5 | * [Modern C](https://gforge.inria.fr/frs/download.php/latestfile/5298/ModernC.pdf) 6 | * A Guide to Undefined Behavior in C and C++ 7 | * [Part 1](https://blog.regehr.org/archives/213) 8 | * [Part 2](https://blog.regehr.org/archives/226) 9 | * [Part 3](https://blog.regehr.org/archives/232) 10 | * What Every C Programmer Should Know About Undefined Behavior 11 | * [Part 1](http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html) 12 | * [Part 2](http://blog.llvm.org/2011/05/what-every-c-programmer-should-know_14.html) 13 | * [Part 3](http://blog.llvm.org/2011/05/what-every-c-programmer-should-know_21.html) 14 | * [What a C programmer should know about memory](http://marek.vavrusa.com/memory/) 15 | * [What Every Computer Scientist Should Know About Floating Point Arithmetic](https://cr.yp.to/2005-590/goldberg.pdf) 16 | * [What Every Programmer Should Know About Memory](https://people.freebsd.org/~lstewart/articles/cpumemory.pdf) 17 | * Practice Projects 18 | * [The UChicago χ-Projects](http://chi.cs.uchicago.edu/index.html) 19 | * Similar List 20 | * [awesome-diy-software](https://github.com/cweagans/awesome-diy-software) 21 | * [Build Your Own X](https://github.com/danistefanovic/build-your-own-x) 22 | * [Projects-from-Scratch](https://github.com/AlgoryL/Projects-from-Scratch) 23 | * [Project Based Learning](https://github.com/tuvtran/project-based-learning) 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Project Based Tutorials in C 2 | 3 | A list of tutorials that work towards the making of small to large projects in C. 4 | 5 | ## Table of Contents 6 | 7 | * [Computer Architecture](#computer-architecture) 8 | * [Computer Networking](#computer-networking) 9 | * [Databases](#databases) 10 | * [Game Development](#game-development) 11 | * [Operating Systems](#operating-systems) 12 | * [Programming Languages](#programming-languages) 13 | * [Uncategorized](#uncategorized) 14 | 15 | ## Computer Architecture 16 | 17 | * [Bitwise](https://github.com/pervognsen/bitwise) `video` `in-progress` 18 | * [Emulator 101](http://emulator101.com/) 19 | * [Implementing a Virtual Machine in C](https://felixangell.com/blog/virtual-machine-in-c) 20 | * Writing a Chip 8 Emulator `in-progress` 21 | * [Part 1](http://craigthomas.ca/blog/2014/06/21/writing-a-chip-8-emulator-part-1/) 22 | * [Part 2](http://craigthomas.ca/blog/2014/07/17/writing-a-chip-8-emulator-part-2/) 23 | * [Part 3](http://craigthomas.ca/blog/2015/02/19/writing-a-chip-8-emulator-draw-command-part-3/) 24 | * [Part 4](http://craigthomas.ca/blog/2017/10/15/writing-a-chip-8-emulator-built-in-font-set-part-4/) 25 | * [Part 5](http://craigthomas.ca/blog/2018/09/07/writing-a-chip-8-emulator-instruction-set-part-5/) 26 | * [Writing a Game Boy emulator](https://cturt.github.io/cinoop.html) 27 | * [Write your Own Virtual Machine](https://justinmeiners.github.io/lc3-vm/) 28 | 29 | ## Computer Networking 30 | 31 | * [Beej's Guide to Network Programming](http://beej.us/guide/bgnet/html/multi/index.html) `book` 32 | * [Concurrent Servers](https://eli.thegreenplace.net/2017/concurrent-servers-part-1-introduction/) 33 | * [HTTP Server: Everything you need to know to Build a simple HTTP server from scratch](https://medium.com/from-the-scratch/http-server-what-do-you-need-to-know-to-build-a-simple-http-server-from-scratch-d1ef8945e4fa) 34 | * Let's code a TCP/IP stack 35 | * [Part 1: Ethernet & ARP](http://www.saminiir.com/lets-code-tcp-ip-stack-1-ethernet-arp/) 36 | * [Part 2: IPv4 & ICMPv4](http://www.saminiir.com/lets-code-tcp-ip-stack-2-ipv4-icmpv4/) 37 | * [Part 3: TCP Basics & Handshake](http://www.saminiir.com/lets-code-tcp-ip-stack-3-tcp-handshake/) 38 | * [Part 4: TCP Data Flow & Socket API](http://www.saminiir.com/lets-code-tcp-ip-stack-4-tcp-data-flow-socket-api/) 39 | * [Part 5: TCP Retransmission](http://www.saminiir.com/lets-code-tcp-ip-stack-5-tcp-retransmission/) 40 | * [Let's make a NTP Client in C](https://lettier.github.io/posts/2016-04-26-lets-make-a-ntp-client-in-c.html) 41 | * Write an MQTT broker from scratch 42 | * [Part 1 - The protocol](https://codepr.github.io/posts/sol-mqtt-broker) 43 | * [Part 2 - Networking](https://codepr.github.io/posts/sol-mqtt-broker-p2) 44 | * [Part 3 - Server](https://codepr.github.io/posts/sol-mqtt-broker-p3) 45 | * [Part 4 - Data structures](https://codepr.github.io/posts/sol-mqtt-broker-p4) 46 | * [Part 5 - Topic abstraction](https://codepr.github.io/posts/sol-mqtt-broker-p5) 47 | * [Part 6 - Handlers](https://codepr.github.io/posts/sol-mqtt-broker-p6) 48 | 49 | ## Databases 50 | 51 | * [Let's Build a Simple Database](https://cstack.github.io/db_tutorial/) 52 | 53 | ## Game Development 54 | 55 | * [Astroids Clone](https://gtk.dashgl.com/?folder=Astroids) 56 | * [Brickout Clone](https://gtk.dashgl.com/?folder=Brickout) 57 | * [Chess Engine In C](https://www.youtube.com/playlist?list=PLZ1QII7yudbc-Ky058TEaOstZHVbT-2hg) `video` 58 | * [Coding A Sudoku Solver in C](https://www.youtube.com/playlist?list=PLkTXsX7igf8edTYU92nU-f5Ntzuf-RKvW) `video` 59 | * [Coding a Rogue/Nethack RPG in C](https://www.youtube.com/playlist?list=PLkTXsX7igf8erbWGYT4iSAhpnJLJ0Nk5G) `video` 60 | * [Creating a 2D platformer](https://www.parallelrealities.co.uk/tutorials/#ppp) 61 | * [Creating a 2D shoot 'em up](https://www.parallelrealities.co.uk/tutorials/#shooter) 62 | * [Creating a 2D top-down shooter](https://www.parallelrealities.co.uk/tutorials/#bad) 63 | * [Handmade Hero](https://handmadehero.org/) `video` `in-progress` 64 | * [Hangman](https://www.youtube.com/playlist?list=PLZ1QII7yudbd2ZHYSEWrSddsvD5PW_r5O) `video` 65 | * [How to Program an NES game in C](https://nesdoug.com/) 66 | * [How to Program a Text Adventure in C](https://helderman.github.io/htpataic/htpataic01.html) `in-progress` 67 | * [Invaders Clone](https://gtk.dashgl.com/?folder=Invaders) 68 | * [Learn How To Develop Your Own GameBoy Games](https://www.youtube.com/playlist?list=PLeEj4c2zF7PaFv5MPYhNAkBGrkx4iPGJo) `video` `in-progress` 69 | * [Learn Video Game Programming in C](https://www.youtube.com/playlist?list=PLT6WFYYZE6uLMcPGS3qfpYm7T_gViYMMt) `video` 70 | * [Let's Make: Dangerous Dave](https://www.youtube.com/playlist?list=PLSkJey49cOgTSj465v2KbLZ7LMn10bCF9) `video` 71 | * [Making a game in C from scratch](https://www.youtube.com/playlist?list=PL7Ej6SUky1357r-Lqf_nogZWHssXP-hvH) `video` 72 | * [On Tetris and Reimplementation](https://brennan.io/2015/06/12/tetris-reimplementation/) 73 | * [SDL 2 Isometric Game Tutorial](https://www.youtube.com/playlist?list=PL6Ikt4l3NbVjb7WR-eTgjOBMNCn7f3u7x) `video` `in-progress` 74 | * [Simple Tic Tac Toe in C](https://www.youtube.com/playlist?list=PLZ1QII7yudbc7_ZgXA-gIXmME41Rs2GP5) `video` 75 | * [Tic-tac-toe Game in C with SDL](https://www.youtube.com/watch?v=gCVMkKgs3uQ) `video` 76 | * Video Game Physics Tutorial 77 | * [Part I: An Introduction to Rigid Body Dynamics](https://www.toptal.com/game/video-game-physics-part-i-an-introduction-to-rigid-body-dynamics) 78 | * [Part II: Collision Detection for Solid Objects](https://www.toptal.com/game/video-game-physics-part-ii-collision-detection-for-solid-objects) 79 | * [Part III: Constrained Rigid Body Simulation](https://www.toptal.com/game/video-game-physics-part-iii-constrained-rigid-body-simulation) 80 | * [Write Othello Game from scratch in C](https://www.hanshq.net/othello.html) 81 | * [Write The Old-School Fire Effect and Bare-Metal Programming in Assembly and C](https://www.hanshq.net/fire.html) 82 | * [Writing 2D Games in C using SDL](https://www.youtube.com/watch?v=yFLa3ln16w0) `video` 83 | * [Writing a Game Boy Advance Game](https://www.reinterpretcast.com/writing-a-game-boy-advance-game) 84 | 85 | ## Operating Systems 86 | 87 | * [Build a minimal multi-tasking OS kernel for ARM from scratch](https://github.com/jserv/mini-arm-os) 88 | * [Build Your Own Shell](https://github.com/tokenrove/build-your-own-shell) 89 | * [Building an Operating System for the Raspberry Pi](https://jsandler18.github.io/) 90 | * [Hack the Virtual Memory](https://blog.holbertonschool.com/hack-virtual-memory-stack-registers-assembly-code/) 91 | * [How to Create an OS from Scratch](https://github.com/cfenollosa/os-tutorial) `in-progress` 92 | * [Learning KVM - implement your own kernel](https://david942j.blogspot.com/2018/10/note-learning-kvm-implement-your-own.html) 93 | * [Learning operating system development using Linux kernel and Raspberry Pi](https://github.com/s-matyukevich/raspberry-pi-os) `in-progress` 94 | * [Let's build a shell!](https://github.com/kamalmarhubi/shell-workshop) 95 | * [Let's Write a Malloc](https://danluu.com/malloc-tutorial/) 96 | * Let’s write a Kernel 97 | * [Part 1 - Kernel 101](https://arjunsreedharan.org/post/82710718100/kernel-101-lets-write-a-kernel) 98 | * [Part 2 - Kernel 201](https://arjunsreedharan.org/post/99370248137/kernel-201-lets-write-a-kernel-with-keyboard) 99 | * [Linux Containers in 500 Lines of Code](https://blog.lizzie.io/linux-containers-in-500-loc.html) 100 | * [Operating systems development for Dummies](https://medium.com/@lduck11007/operating-systems-development-for-dummies-3d4d786e8ac) 101 | * [Operating Systems: From 0 to 1](https://tuhdo.github.io/os01/) `book` 102 | * [Rewrite cat](https://learnto.computer/screencasts/bsd-cat) `video` 103 | * Rewrite mkdir `video` 104 | * [mkdir](https://learnto.computer/screencasts/bsd-mkdir) 105 | * [Building paths for mkdir -p](https://learnto.computer/screencasts/bsd-mkdir-p) 106 | * [Roll your own toy UNIX-clone OS](http://www.jamesmolloy.co.uk/tutorial_html/) 107 | * [The little book about OS development](https://littleosbook.github.io/) `book` 108 | * [Write a Shell in C](https://brennan.io/2015/01/16/write-a-shell-in-c/) 109 | * [Write a Simple Memory Allocator](https://arjunsreedharan.org/post/148675821737/write-a-simple-memory-allocator) 110 | * [Write a System Call](https://brennan.io/2016/11/14/kernel-dev-ep3/) 111 | * [Writing a FUSE Filesystem](https://www.cs.nmsu.edu/~pfeiffer/fuse-tutorial/) 112 | * [Writing a shell in C](https://danishprakash.github.io/2018/01/15/write-a-shell.html) 113 | * Writing a Unix Shell 114 | * [Part 1](https://indradhanush.github.io/blog/writing-a-unix-shell-part-1) 115 | * [Part 2](https://indradhanush.github.io/blog/writing-a-unix-shell-part-2) 116 | * [Part 3](https://indradhanush.github.io/blog/writing-a-unix-shell-part-3) 117 | 118 | ## Programming Languages 119 | 120 | * [A Regular Expression Matcher](https://www.cs.princeton.edu/courses/archive/spr09/cos333/beautiful.html) 121 | * [A Regular Expression Matching Can Be Simple And Fast](https://swtch.com/~rsc/regexp/regexp1.html) 122 | * [Baby's First Garbage Collector](http://journal.stuffwithstuff.com/2013/12/08/babys-first-garbage-collector/) 123 | * [Build Your Own Lisp](http://www.buildyourownlisp.com/) `book` 124 | * [Compiler Design in C](https://holub.com/goodies/compiler/compilerDesignInC.pdf) `book` 125 | * [Crafting Interpreters](http://www.craftinginterpreters.com/) `book` `in-progress` 126 | * [Let's Build a Compiler: A C & x86 version](https://github.com/lotabout/Let-s-build-a-compiler) 127 | * Write a C Interpreter 128 | * [Part 0 - Preface](https://github.com/lotabout/write-a-C-interpreter/blob/master/tutorial/en/0-Preface.md) 129 | * [Part 1 - Skeleton](https://github.com/lotabout/write-a-C-interpreter/blob/master/tutorial/en/1-Skeleton.md) 130 | * [Part 2 - Virtual Machine](https://github.com/lotabout/write-a-C-interpreter/blob/master/tutorial/en/2-Virtual-Machine.md) 131 | * [Part 3 - Lexer](https://github.com/lotabout/write-a-C-interpreter/blob/master/tutorial/en/3-Lexer.md) 132 | * [Part 4 - Top-down Parsing](https://github.com/lotabout/write-a-C-interpreter/blob/master/tutorial/en/4-Top-down-Parsing.md) 133 | * [Part 5 - Variables](https://github.com/lotabout/write-a-C-interpreter/blob/master/tutorial/en/5-Variables.md) 134 | * [Part 6 - Functions](https://github.com/lotabout/write-a-C-interpreter/blob/master/tutorial/en/6-Functions.md) 135 | * [Part 7 - Statements](https://github.com/lotabout/write-a-C-interpreter/blob/master/tutorial/en/7-Statements.md) 136 | * [Part 8 - Expressions](https://github.com/lotabout/write-a-C-interpreter/blob/master/tutorial/en/8-Expressions.md) 137 | * [Writing a Simple Garbage Collector in C](http://maplant.com/gc.html) 138 | * Scheme from Scratch 139 | * [Part 1 - Introduction](http://peter.michaux.ca/articles/scheme-from-scratch-introduction) 140 | * [Part 2 - Integers](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_1-integers) 141 | * [Part 3 - Booleans](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_2-booleans) 142 | * [Part 4 - Characters](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_3-characters) 143 | * [Part 5 - Strings](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_4-strings) 144 | * [Part 6 - The Empty List](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_5-the-empty-list) 145 | * [Part 7 - Pairs](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_6-pairs) 146 | * [Part 8 - Symbols](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_7-symbols) 147 | * [Part 9 - Quote](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_8-quote) 148 | * [Part 10 - Environments](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_9-environments) 149 | * [Part 11 - if](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_10-if) 150 | * [Part 12 - Primitive Procedures Part 1](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_11-primitive-procedures-part-1) 151 | * [Part 13 - Primitive Procedures Part 2](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_12-primitive-procedures-part-2) 152 | * [Part 14 - Lambda the Ultimate](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_13-lambda-the-ultimate) 153 | * [Part 15 - Begin](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_14-begin) 154 | * [Part 16 - Cond](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_15-cond) 155 | * [Part 17 - Let](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_16-let) 156 | * [Part 18 - And and Or](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_17-and-and-or) 157 | * [Part 19 - Apply](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_18-apply) 158 | * [Part 20 - Eval](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_19-eval) 159 | * [Part 21 - I/O](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_20-io) 160 | * [Part 22 - Standard Library](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_21-standard-library) 161 | * [Part 23 - Garbage Collection](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_22-garbage-collection) 162 | * [Part 24 - Conclusion](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-conclusion) 163 | 164 | ## Uncategorized 165 | 166 | * A dummy blockchain implementation in C 167 | * [Part 1](https://myram.xyz/c-blockchain-implementation-1/) 168 | * [Part 2](https://myram.xyz/c-blockchain-implementation-2/) 169 | * [Build Your Own Text Editor](https://viewsourcecode.org/snaptoken/kilo/) 170 | * [How to Write a Video Player in Less Than 1000 Lines](http://dranger.com/ffmpeg/ffmpeg.html) 171 | * [Learn FFmpeg libav the Hard Way](https://github.com/leandromoreira/ffmpeg-libav-tutorial) `in-progress` 172 | * [Write a hash table in C](https://github.com/jamesroutley/write-a-hash-table) 173 | * [Write BigInt Calculator in C](https://www.hanshq.net/bigint.html) 174 | * [Write Your Own Zip from scratch in C](https://www.hanshq.net/zip.html) 175 | * [Writing an SVG Library](http://www.codedrome.com/svg-library-in-c/) 176 | --------------------------------------------------------------------------------