Project Based Learning
Project Based Learning
Project Based Learning
com/practical-tutorials/project-based-learning
A list of programming tutorials in which aspiring software developers learn how to build an
application from scratch. These tutorials are divided into different primary programming
languages. Tutorials may involve multiple technologies and languages.
To get started, simply fork this repo. Please refer to CONTRIBUTING.md for contribution
guidelines.
Table of Contents:
C#
C/C++
Clojure
Dart
Elixir
Erlang
F#
Go
Haskell
HTML/CSS
Java
JavaScript
Kotlin
Lua
OCaml
PHP
Python
R
Ruby
Rust
Scala
Swift
Additional resources
C/C++:
Build an Interpreter (Chapter 14 on is written in C)
Memory Allocators 101 - Write a simple memory allocator
Write a Shell in C
Write a FUSE Filesystem
Build Your Own Text Editor
Build Your Own Lisp
How to Program an NES Game in C
Write an OS from scratch
How to create an OS from scratch
Building a CHIP-8 Emulator
Beginning Game Programming with C++ and SDL
Implementing a Key-Value Store
Tiny 3D graphics projects
o Tiny Renderer or how OpenGL works: software rendering in 500 lines of code
o Understandable RayTracing in 256 lines of bare C++
o KABOOM! in 180 lines of bare C++
o 486 lines of C++: old-school FPS in a weekend
Writing a minimal x86-64 JIT compiler in C++
o Part 1
o Part 2
Build a Live Code-reloader Library for C++
Write a hash table in C
Let's Build a Simple Database
Let's Write a Kernel
Write a Bootloader in C
Linux Container in 500 Lines of Code
Write Your Own Virtual Machine
Learning KVM - Implement Your Own Linux Kernel
Build Your Own Redis with C/C++
Write a C compiler
o Part 1: Integers, Lexing and Code Generation
o Part 2: Unary Operators
o Part 3: Binary Operators
o Part 4: Even More Binary Operators
o Part 5: Local Variables
o Part 6: Conditionals
o Part 7: Compound Statements
o Part 8: Loops
o Part 9: Functions
o Part 10: Global Variables
Implementing a Language with LLVM
Meta Crush Saga: a C++17 compile-time game
High-Performance Matrix Multiplication
Space Invaders from Scratch
o Part 1
o Part 2
o Part 3
o Part 4
o Part 5
Tetris Tutorial in C++ Platform Independent
Writing a Linux Debugger
o Part 1: Setup
o Part 2: Breakpoints
o Part 3: Registers and memory
o Part 4: Elves and dwarves
o Part 5: Source and signals
o Part 6: Source-level stepping
o Part 7: Source-level breakpoints
o Part 8: Stack unwinding
o Part 9: Handling variables
o Part 10: Advanced topics
Let's write a compiler
o Part 1: Introduction, selecting a language, and doing some planning
o Part 2: A lexer
o Part 3: A parser
o Part 4: Testing
o Part 5: A code generator
o Part 6: Input and output
o Part 7: Arrays
o Part 8: Strings, forward references, and conclusion
Network programming
o Part 1 - Introduction
o Part 2 - Threads
o Part 3 - Event-driven
o Part 4 - libuv
o Part 5 - Redis case study
o Part 6 - Callbacks, Promises and async/await
OpenGL:
C#:
Learn C# By Building a Simple RPG Game
Create a Rogue-like game in C#
Create a Blank App with C# and Xamarin (work in progress)
Build iOS Photo Library App with Xamarin and Visual Studio
Building the CoreWiki This is a Wiki-style content management system that has been
completely written in C# with ASP.NET Core and Razor Pages. You can find the source
code here.
Clojure:
Build a Twitter Bot with Clojure
Building a Spell-Checker
Building a JIRA integration with Clojure & Atlassian Connect
Prototyping with Clojure
Tetris in ClojureScript
Dart:
Flutter:
Elixir
Building a Simple Chat App With Elixir and Phoenix
How to write a super fast link shortener with Elixir, Phoenix, and Mnesia
Erlang
ChatBus : build your first multi-user chat room app with Erlang/OTP
Making a Chat App with Erlang, Rebar, Cowboy and Bullet
F#:
Write your own Excel in 100 lines of F#
Java:
Build an Interpreter (Chapter 4-13 is written in Java)
Build a Simple HTTP Server with Java
Build an Android Flashlight App (video)
Build a Spring Boot App with User Authentication
JavaScript:
Build 30 things in 30 days with 30 tutorials
Build an App in Pure JS
Build a Jupyter Notebook Extension
Build a TicTacToe Game with JavaScript
Build a Simple Weather App With Vanilla JavaScript
Build a Todo List App in JavaScript
Mobile Application:
Web Applications:
React:
Angular:
o Part 1
o Part 2
o Part I
o Part II
o Introduction to Angular
o Part 1
Node:
Vue
Vue 2 + Firebase: How to build a Vue app with Firebase authentication system in 15
minutes
Vue.js Application Tutorial – Creating a Simple Budgeting App with Vue
Build a Blog with Vue, GraphQL and Apollo
Build a full stack web application using MEVN (MongoDB, Express, Vue, Node) stack
o Part 1
o Part 2
Vue.js To-Do List Tutorial (video)
Vue 2 + Pub/Sub: Build a peer to peer multi-user platform for games
D3.js
Game Development:
Desktop Application:
Build A Desktop Chat App with React and Electron
Miscellaneous:
Kotlin:
Keddit - Learn Kotlin While Developing an Android Application
Lua:
LÖVE:
Python:
Web Scraping:
Web Applications:
Bots:
Data Science:
Machine Learning:
OpenCV:
Deep Learning:
Miscellaneous:
Go:
Create a Real Time Chat App with Golang, Angular 2, and WebSocket
Building Go Web Applications and Microservices Using Gin
How to Use Godog for Behavior-driven Development in Go
Building Blockchain in Go
o Part 1: Basic Prototype
o Part 2: Proof of Work
o Part 3: Persistence and CLI
o Part 4: Transactions 1
o Part 5: Address
o Part 6: Transactions 2
o Part 7: Network
Building a container from scratch in Go - Liz Rice (Microscaling Systems)(video)
Build Web Application with GoLang
Building a Chat Application in Go with ReactJS
o Part 1: Initial Setup
o Part 2: Simple Communication
o Part 3: Designing our Frontend
o Part 4: Handling Multiple Clients
o Part 5: Improving the Frontend
o Part 6: Dockerizing your Backend
Go WebAssembly Tutorial - Building a Calculator Tutorial
REST Servers in Go
o Part 1 - standard library
o Part 2 - using a router package
o Part 3 - using a web framework
o Part 4 - using OpenAPI and Swagger
o Part 5 - middleware
o Part 6 - authentication
o Part 7 - GraphQL
Let's build a URL shortener in Go - with Gin & Redis
o Part 1 - Project setup
o Part 2 - Storage Layer
o Part 3 - Short Link Generator
o Part 4 - Forwarding
Building a TCP Chat in Go(video)
Building a BitTorrent client from the ground up in Go
REST API masterclass with Go, PostgreSQL and Docker(video playlist) in progress
PHP:
How To Build A Blog With Laravel (video)
Make Your Own Blog (in Pure PHP)
Build A Real Estate Website Example with SilverStripe
Building Realtime Chat App with Laravel 5.4 and VueJS (video)
Build A Social Network: Laravel 5 - Youtube (video)
Build a full-featured multi-tenant app with Laravel
o Part 0: Introduction
o Part 1: Setup
o Part 2: Roles and Permissinos
o Part 3: Invitation
o Part 4: Authentication
o Part 5: Testing
o Part 6: User Profile
o Part 7: Deployment
Build a Laravel CRUD Application From Scratch
OCaml:
Implement a Language with LLVM in OCaml
Writing a Game Boy Emulator in OCaml
Ruby:
Build a Network Stack with Ruby
Build your own Redis
o Part 0: Introduction
o Part 1: Barebones TCP Server
o Part 2: PING <-> PONG
o Part 3: Concurrent Clients
o Part 4: ECHO
Rebuilding Git in Ruby
Ruby on Rails:
Haskell:
Write You a Haskell - Build a modern functional compiler
Write Yourself a Scheme in 48 hours
Write You A Scheme, Version 2
Roll Your Own IRC Bot
Making Movie Monad
Making a Website with Haskell (outdated)
R:
Build Web Apps with Shiny
Build A Cryptocurrency Bot
Learn Associate Rule Mining in R
Rust:
A Simple Web App in Rust
o Part 1
o Part 2a
o Part 2b
Write an OS in pure Rust
Build a browser engine in Rust
Write a Microservice in Rust
Learning Rust with Too Many Linked Lists
Rust in Detail: Writing Scalable Chat Service from Scratch
o Part 1: Implementing WebSocket. Introduction.
o Part 2: Sending and Receiving Messages
Writing a Rust Roguelike for the Desktop and the Web
Single Page Applications using Rust
Writing NES Emulator in Rust
Create a simulation of evolution using neural network and genetic algorithm, and compile
the application to WebAssembly
o Part 1
o Part 2
o Part 3
o Part 4
Scala:
Simple actor-based blockchain
No Magic: Regular Expressions
Swift:
Hacking with Swift - Learn Swift by doing 39 projects
Retro first-person shooter from scratch
Additional Resources
React Redux Links
Udemy.com
Full Stack Python
Node School
ScotchIO
Exercism
Egghead.io
Michael Herman's Blog
Thinkster.io
Enlight
Hack Club Workshops
CodeCrafters
https://julienbeaulieu.github.io/2019/09/25/comprehensive-project-based-data-science-
curriculum/#core-math
Summary
Visual Overview
Curriculum
o Data Science Intro & Learning How to Learn
o Core Data Science
o Core Programming
o Core Math
o Deep Learning
o Data Engineering
o Optional Courses
o Extras
Final Notes
Summary
This curriculum offers a mix of best in class resources and a suggested
path to become a data scientist. It is intended to be a complete education
in data science using online materials. All resources have been heavily
researched and used by myself in my journey to becoming a developper
and a Data Scientist.
Why I wrote this curriculum
The following curriculum is intended for anyone who wants to learn data
science and programming, irrespective of what their current background is
(I used to work in digital marketing). It therefore assumes no prior
knowledge of data science or coding, and only a basic knowledge of high
school math.
This curriculum does, however, assume that you are extremely eager to
learn data science, are self driven and motivated because a lot of the
resources are self-paced. Completing the curriculum end to end can easily
take a year and a half. That said, the programme goes much deeper than a
bootcamp and will give you more hands-on experience than most master’s
degrees.
If you already have experience with machine learning and are looking to
refine your skills, I encourage you to look at the different modules and
hand-pick what you find relevant.
Work on real world practical projects that you are passionate about.
Become a good developer with solid software engineering and
computer science abilities.
Develop a strong foundation in math - this includes linear algebra,
calculus, statistics and probability.
Be able to read and apply scientific papers or redo the experiments
on your own.
Deploy models with elegant and reusable code.
Get hired as a data analyst, data scientist, or machine learning
engineer.
Visual Overview
Made with Visme Infographic Maker
Curriculum
Data Science Intro & Learning How to Learn
I believe that the best way to get into data science is to first learn how to
program and to gain some familiarity with computer science foundations.
Also, since you are about to engage in a lifetime of learning new concepts
and skills, I highly recommend viewing the resources related to becoming
a better learner.
Resources Source
CS50 introduction to programming with Python Harvard
CS50 introduction to Computer Science Harvard
Data Analyst Nanodegree Udacity
If you’re not willing to spend too much money, you’re still in luck.
Andrew Ng’s machine learning course on Coursera, which was originally
created in 2012 and has been taken by millions, just got updated! This is a
unique opportunity to get quality education for cheap. Take this course as
well as Udacity’s data Analyst Nanodegree, and you’re guaranteed to start
off with solid foundations.
Pair the above with Andriy Burkov’s famous and succint The Hundred-
Page Machine Learning Book, as well as Wes McKinney’s Python for
Data Analysis. One is more focused on ML theory, while the other is
hands-on with Python. They are complementary and will solidify your
understanding of all concepts covered so far. As a testament to the quality
of the people I am referencing, Wes McKinney is the creator of the
widely-used open-source pandas package.
Topics covered: Data wrangling Data collection with an
API, SQL, Statistical tests & experiments, Data
visualization, Machine Learning, Deep Learning, Random
Forests, Model interpretation techniques
Resources Source
Resources Source
Get a great intuition for linear algebra with this fantastic resource:
Essence of Linear Algebra by 3Blue1Brown.
Learn all things statistics and machine learning with Statquest. Josh
Starmer has a gift for breaking down complex ideas into some of the
simplest and best explanations on the Web. He also
recently published a book which I encourage you to check out.
Delve deep into linear algebra with prof. Gilbert Strang’s amazing
lecture which has been viewed by millions before. Complement with
exercises in his book (which includes solutions to the exercises). For
a less in depth alternative, refer to Khan Academy.
Learn the math required for machine learning with Marc Peter (and
co.)’s book (advanced). Choose this option if you’re a warrior, and
are interested in fundamental research.
Don’t forget to actually do the exercises and work on assigments.
This is the only way you’ll become good at math.
Deep Learning
After completing the courses in Core Data Science, and with more solid
foundations in programming and machine learning theory, you can move
onto deep learning if that’s an area that interests you. It can be tempting to
jump straight to this section when you’re starting because there are really
cool applications to work on. My POV on this is if this is what really
motivates you, try it out and see what you can get out of it. Remember to
come back to the sections above however, or you will have gaping holes in
your fundamentals which will come back and hunt you down the line.
Resources Source
O
Practical Deep Learning for Coders - Part 1 U of San Francisco
Jeremy Howard, Sylvain
Fastai Book
Gugger
Learn how to create state of the art models using the Fastai Library
with Part 1 of their course. I suggest taking both the Fastai and Deep
Learning Specialization courses together since one is more focused
on coding while the other is more focused on the theory and math
behind it. While you’re at it, follow Fastai’s course with their book.
Both Chirs Maning’s and Justin Johnson’s (he used to teach the very
popular CS231n at Stanford) courses are world class and will give
you deep insights into the worlds of Natural Language Processing
(NLP) and computer vision. Be sure to do the assignments since they
have you code algorithms from scratch and give you a solid
foundations to progress further. Both have updated YouTube videos
of their 2021 course.
The transformer architecture is widely used these days. To get a
solid grap of what they are, be sure to read some of Jay Alammar’s
blogpost on the subject.
Data Engineering & MLOps
Topics covered:
Resources Source
The following are courses should be taken depending on the outcome you
want to achieve as a data scientist.
Resources Source
Final Notes
While I update resources found in this curriculum quite regularly, some
will inevitably become outdated. As a rule of thumb, you can be sure to
trust the quality of the following content if you come across their material:
Please feel free to send me any resources, materials, courses that I have not
included that you particularly enjoyed, or to send me a message if you
want to chat about my experience learning this material.
Timmy Chan
·
Follow
Published in
Ed-Tech Talks
·
10 min read
·
Mar 1, 2022
173
Data and analytics-enabled industry and business transformation (Cao, 2018)
Who is Learning?
For introspection on my history as a learner, I practice reflective
writing in the form of a blog. As the learner is always changing — a
habit to practice reflexivity is key to quality research and learning in
general. Though since this blog is published, perhaps one day one of
the readers here might be a trying to teach themselves data science
too.
Most of the following ideas are from a recent paper on the merits of
portfolios as a pedagogical instrument in Data Science curriculum
design (Nolan & Stoudt, 2021). I have added a couple here myself
too.
Write a personal statement about oneself as a data
scientist. Include a description of the researcher’s lenses,
potential influences on the research, the research-project
context and an explanation as to how, where, when and
in what way these might, may, or have, influenced the
research process (Darwin Holmes, 2020).
Works Cited
Aho, T., Sievi-Korte, O., Kilamo, T., Yaman, S., & Mikkonen, T.
(2020). Demystifying Data Science Projects: A Look on the People
and Process of Data Science Today. In M. Morisio, M. Torchiano, &
A. Jedlitschka (Eds.), Product-Focused Software Process
Improvement (Vol. 12562, pp. 153–167). Springer International
Publishing. https://doi.org/10.1007/978-3-030-64148-1_10
De Veaux, R. D., Agarwal, M., Averett, M., Baumer, B. S., Bray, A.,
Bressoud, T. C., Bryant, L., Cheng, L. Z., Francis, A., Gould, R., Kim,
A. Y., Kretchmar, M., Lu, Q., Moskol, A., Nolan, D., Pelayo, R.,
Raleigh, S., Sethi, R. J., Sondjaja, M., … Ye, P. (2017). Curriculum
Guidelines for Undergraduate Programs in Data Science. Annual
Review of Statistics and Its Application, 4(1), 15–
30. https://doi.org/10.1146/annurev-statistics-060116-053930
Demchenko, Y., Belloum, A., Los, W., Wiktorski, T., Manieri, A.,
Brocks, H., Becker, J., Heutelbeck, D., Hemmje, M., & Brewer, S.
(2016). EDISON Data Science Framework: A Foundation for
Building Data Science Profession for Research and Industry. 2016
IEEE International Conference on Cloud Computing Technology
and Science (CloudCom), 620–
626. https://doi.org/10.1109/CloudCom.2016.0107
Kross, S., Peng, R. D., Caffo, B. S., Gooding, I., & Leek, J. T.
(2017). The democratization of data science education [Preprint].
PeerJ Preprints. https://doi.org/10.7287/peerj.preprints.3195v1
Li, D., Milonas, E., & Zhang, Q. (2021). Content Analysis of Data
Science Graduate Programs in the U.S. 2021 ASEE Virtual Annual
Conference Content Access Proceedings,
36841. https://doi.org/10.18260/1-2--36841
Milonas, E., Li, D., & Zhang, Q. (2021). Content Analysis of Two-
year and Four-year Data Science Programs in the United
States. 2021 ASEE Virtual Annual Conference Content Access
Proceedings, 36842. https://doi.org/10.18260/1-2--36842
Pedaste, M., Mäeots, M., Siiman, L., Jong, T., Riesen, S., Kamp, E.,
Manoli, C., Zacharia, Z., & Tsourlidaki, E. (2015). Phases of inquiry-
based learning: Definitions and the inquiry cycle. Educational
Research Review, 14. https://doi.org/10.1016/j.edurev.2015.02.003
Data Science
Learning
Projects
Portfolio