Files
c-project-based-tutorials/README.md
2018-04-09 15:55:07 -04:00

100 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# C Project Based Tutorials
A list of C tutorials that work through the creation of small and or large projects.
## Books
* [Build Your Own Lisp](http://www.buildyourownlisp.com/)
* [Crafting Interpreters](http://www.craftinginterpreters.com/) [In-progress]
* [The little book about OS development](https://littleosbook.github.io/)
* [Operating Systems: From 0 to 1](https://tuhdo.github.io/os01/)
* [Beej's Guide to Network Programming](http://beej.us/guide/bgnet/html/multi/index.html)
* [Sudoku Programming with C](https://www.amazon.com/dp/1484209966/)
* [Making 8-bit Arcade Games in C](https://www.amazon.com/dp/1545484759/)
* [A Retargetable C Compiler: Design and Implementation](https://www.amazon.com/dp/0805316701/)
* [Modern Compiler Implementation in C](https://www.amazon.com/dp/052158390X/)
* [The Craft of Text Editing](https://www.amazon.com/dp/1411682971/)
* [Game Engine Black Book: Wolfenstein 3D](https://www.amazon.com/dp/1539692876/)
## Articles
* [Let's Build a Simple Database](https://cstack.github.io/db_tutorial/)
* [Linux Containers in 500 Lines of Code](https://blog.lizzie.io/linux-containers-in-500-loc.html)
* [Let's Write a Malloc](https://danluu.com/malloc-tutorial/)
* [A Regular Expression Matcher](https://www.cs.princeton.edu/courses/archive/spr09/cos333/beautiful.html)
* [Write a Shell in C](https://brennan.io/2015/01/16/write-a-shell-in-c/)
* [Writing a FUSE Filesystem](https://www.cs.nmsu.edu/~pfeiffer/fuse-tutorial/)
* [Build Your Own Text Editor](https://viewsourcecode.org/snaptoken/kilo/)
* [Write a hash table in C](https://github.com/jamesroutley/write-a-hash-table)
* Lets write a Kernel
* [Part 1 - Kernel 101](https://arjunsreedharan.org/post/82710718100/kernel-101-lets-write-a-kernel)
* [Part 2 - Kernal 201](https://arjunsreedharan.org/post/99370248137/kernel-201-lets-write-a-kernel-with-keyboard)
* [Write a simple memory allocator](https://arjunsreedharan.org/post/148675821737/write-a-simple-memory-allocator)
* [How to Program an NES game in C](https://nesdoug.com/)
* [Baby's First Garbage Collector](http://journal.stuffwithstuff.com/2013/12/08/babys-first-garbage-collector/)
* [Implementing a virtual machine in C](https://felixangell.com/blog/virtual-machine-in-c)
* Scheme from Scratch
* [Part 1 - Introduction](http://peter.michaux.ca/articles/scheme-from-scratch-introduction)
* [Part 2 - Integers](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_1-integers)
* [Part 3 - Booleans](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_2-booleans)
* [Part 4 - Characters](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_3-characters)
* [Part 5 - Strings](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_4-strings)
* [Part 6 - The Empty List](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_5-the-empty-list)
* [Part 7 - Pairs](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_6-pairs)
* [Part 8 - Symbols](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_7-symbols)
* [Part 9 - Quote](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_8-quote)
* [Part 10 - Environments](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_9-environments)
* [Part 11 - if](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_10-if)
* [Part 12 - Primitive Procedures Part 1](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_11-primitive-procedures-part-1)
* [Part 13 - Primitive Procedures Part 2](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_12-primitive-procedures-part-2)
* [Part 14 - Lambda the Ultimate](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_13-lambda-the-ultimate)
* [Part 15 - Begin](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_14-begin)
* [Part 16 - Cond](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_15-cond)
* [Part 17 - Let](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_16-let)
* [Part 18 - And and Or](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_17-and-and-or)
* [Part 19 - Apply](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_18-apply)
* [Part 20 - Eval](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_19-eval)
* [Part 21 - I/O](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_20-io)
* [Part 22 - Standard Library](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_21-standard-library)
* [Part 23 - Garbage Collection](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-v0_22-garbage-collection)
* [Part 24 - Conclusion](http://peter.michaux.ca/articles/scheme-from-scratch-bootstrap-conclusion)
* Writing a C Compiler [In-progress]
* [Part 1 - Integers](https://norasandler.com/2017/11/29/Write-a-Compiler.html)
* [Part 2 - Unary Operators](https://norasandler.com/2017/12/05/Write-a-Compiler-2.html)
* [Part 3 - Binary Operators](https://norasandler.com/2017/12/15/Write-a-Compiler-3.html)
* [Part 4 - Even More Binary Operators](https://norasandler.com/2017/12/28/Write-a-Compiler-4.html)
* [Part 5 - Local Variables](https://norasandler.com/2018/01/08/Write-a-Compiler-5.html)
* [Part 6 - Conditionals](https://norasandler.com/2018/02/25/Write-a-Compiler-6.html)
* [Part 7 - Compound Statements](https://norasandler.com/2018/03/14/Write-a-Compiler-7.html)
* [Let's code a TCP/IP stack](http://www.saminiir.com/lets-code-tcp-ip-stack-1-ethernet-arp/)
* Write a C Interpreter
* [Part 0 - Preface](https://github.com/lotabout/write-a-C-interpreter/blob/master/tutorial/en/0-Preface.md)
* [Part 1 - Skeleton](https://github.com/lotabout/write-a-C-interpreter/blob/master/tutorial/en/1-Skeleton.md)
* [Part 2 - Virtual Machine](https://github.com/lotabout/write-a-C-interpreter/blob/master/tutorial/en/2-Virtual-Machine.md)
* [Part 3 - Lexer](https://github.com/lotabout/write-a-C-interpreter/blob/master/tutorial/en/3-Lexer.md)
* [Part 4 - Top-down Parsing](https://github.com/lotabout/write-a-C-interpreter/blob/master/tutorial/en/4-Top-down-Parsing.md)
* [Part 5 - Variables](https://github.com/lotabout/write-a-C-interpreter/blob/master/tutorial/en/5-Variables.md)
* [Part 6 - Functions](https://github.com/lotabout/write-a-C-interpreter/blob/master/tutorial/en/6-Functions.md)
* [Part 7 - Statements](https://github.com/lotabout/write-a-C-interpreter/blob/master/tutorial/en/7-Statements.md)
* [Part 8 - Expressions](https://github.com/lotabout/write-a-C-interpreter/blob/master/tutorial/en/8-Expressions.md)
* [Hack the Virtual Memory](https://blog.holbertonschool.com/hack-virtual-memory-stack-registers-assembly-code/)
* [Emulator 101](http://emulator101.com/)
* [How to Program a Text Adventure in C](https://helderman.github.io/htpataic/htpataic01.html) [In-progress]
## Videos
* [Chess Engine In C](https://www.youtube.com/playlist?list=PLZ1QII7yudbc-Ky058TEaOstZHVbT-2hg)
* [Learn Video Game Programming in C](https://www.youtube.com/playlist?list=PLT6WFYYZE6uLMcPGS3qfpYm7T_gViYMMt)
* [Let's Make: Dangerous Dave](https://www.youtube.com/playlist?list=PLSkJey49cOgTSj465v2KbLZ7LMn10bCF9)
* [Coding A Sudoku Solver in C](https://www.youtube.com/playlist?list=PLkTXsX7igf8edTYU92nU-f5Ntzuf-RKvW)
* [Coding a Rogue/Nethack RPG in C](https://www.youtube.com/playlist?list=PLkTXsX7igf8erbWGYT4iSAhpnJLJ0Nk5G)
* [Learn Socket Programming in C from Scratch](https://www.udemy.com/learn-socket-programming-in-c-from-scratch/)
* [Bitwise](https://github.com/pervognsen/bitwise) [In-progress]
* [Handmade Hero](https://handmadehero.org/) [In-progress]
## Similar
* [Projects-from-Scratch](https://github.com/AlgoryL/Projects-from-Scratch)
* [awesome-diy-software](https://github.com/cweagans/awesome-diy-software)
* [Project Based Learning](https://github.com/tuvtran/project-based-learning)