I've curated a list of 10 advanced projects to complete in 2021. Most of these are systems programming projects, but there are a few other AI and networking projects in the list. When I say these projects are advanced, they are advanced. I would recommend being very familiar with the programming language you choose to use to tackle one of these projects. Let's dive right into it!
1. Programming Language
Creating a programming language, interpreted or compiled, is no easy feat. Some programming languages include: Python, Rust, Javascript, C++, Elixr, and many more. For this project, design and implement an interpreted or compiled programming language from scratch. If you would like this project to not only be a 2-week thing, think about the problems you have with certain programming languages, and how to fix them. For example, Rust is an awesome programming language that has memory safety and speed. The downside to Rust is its learning curve. I would try to create a programming language that is fast, memory safe, but would be easier to learn than Rust.
Tutorials (if you get stuck):
Golang: https://interpreterbook.com/
Rust: https://arzg.github.io/lang/
Python: https://youtu.be/Eythq9848Fg?list=PLZQftyCk7_SdoVexSmwy_tBgs7P0b97yD
General: https://online.stanford.edu/courses/soe-ycscs1-compilers
2. Toy Database/Key, Value Store
For this project, create a toy database or a key, value store. If you would like some more practice with how databases work before building a real one, I would recommend creating a key, value store, a Redis clone, or a Memcached clone. As these projects are smaller than a full NoSQL/SQL database, these would be great intermediate systems projects. Once you feel ready, create a toy database. This database can be whatever you want: SQL or NoSQL, relational or nonrelational, the list goes on.
Tutorials (if you get stuck):
Python (beginner-friendly): https://www.freecodecamp.org/news/how-to-write-a-simple-toy-database-in-python-within-minutes-51ff49f47f1/
General: https://www.coursera.org/specializations/database-systems
3. Implement the TCP Protocol
In this project, implement the TCP protocol from scratch. If you don't know what the TCP protocol is, that would be the first step. I would recommend reading this: https://tools.ietf.org/html/rfc793. As the TCP protocol is a more advanced protocol, if you would like to tackle something a little simpler, I would recommend implementing the FTP protocol which you can learn about here: https://en.wikipedia.org/wiki/File_Transfer_Protocol.
Tutorials (if you get stuck):
Rust: https://youtu.be/bzja9fQWzdA?list=PLqbS7AVVErFivDY3iKAQk3_VAm8SXwt1X
C++: https://youtu.be/WDn-htpBlnU?list=PLZo2FfoMkJeEogzRXEJeTb3xpA2RAzwCZ
Python (FTP): https://www.tutorialspoint.com/python_network_programming/python_ftp.htm
Node: https://www.digitalocean.com/community/tutorials/how-to-develop-a-node-js-tcp-server-application-using-pm2-and-nginx-on-ubuntu-16-04
4. Implement Biometric Authentication
For number 4, implement biometric authentication. If you didn't know, biometric authentication uses a user's unique biological characteristics to confirm their identity. Some examples of biometric authentication include: fingerprint, face recognition, eye recognition, and more. This project requires you to be proficient with AI and machine learning. You could extend this project by implementing biometric authentication in an attendance platform, fingerprint voting system, and more.
Tutorials (if you get stuck):
Python (face recognition): https://youtu.be/535acCxjHCI
Node (fingerprint): https://youtu.be/RLpeBil53bk?list=PLrUF5HNl_xIKDmlYxMXtnQywpbfByH07r
5. Concurrent Data Structure
For this project, create a concurrent data structure. If you don't have any ideas on which concurrent data structure to make, I find looking at old research papers on concurrent data structures useful (usually they have some pseudocode). This project requires you to know what concurrency is and have a general knowledge of data structures.
Tutorials (if you get stuck):
Rust (concurrent hashmap): https://youtu.be/yQFWmGaFBjk?list=PLqbS7AVVErFj824-6QgnK_Za1187rNfnl
General: http://www.cs.tau.ac.il/~afek/ConcurrentDS-MS04.pdf
6. Create an Operating System
This one is a fun one! This project is all about creating your own operating system from scratch. For this project, I would recommend that you use a performant language like Rust, C, or C++ as creating an OS can slow your computer down a little. You could make this operating as simple or as complex as you like. Some extra features you could include are: basic built-in apps like Notes, QuickTime Player, or a text editor, multitasking, and more.
Tutorials (if you get stuck):
Rust: https://os.phil-opp.com/
C: https://github.com/cfenollosa/os-tutorial
C++: https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System
7. Image Encryption using AES Algorithm
I have to admit, this one is pretty cool, I'll definitely be doing this one for my next project! In this project, create an image encryption tool using the AES algorithm. I found this blog post really helpful for understanding the AES algorithm: https://www.tutorialspoint.com/cryptography/advanced_encryption_standard.htm. You could extend this project by using your image encryption tool in some web applications like an Instagram clone.
Tutorials (if you get stuck):
General: https://link.springer.com/article/10.1007/s11227-019-02878-7
8. Create a Text Editor
For this project, your goal is to create a fully functioning text editor. Some examples of text editors: sublime text, notepad++, and more. You could create a text editor which is mainly focusing on programming (syntax highlighting, keyboard shortcuts, etc) like sublime or just a regular notepad (more subtitle for beginners) like notepad++.
Tutorials (if you get stuck):
Rust: https://www.philippflenker.com/hecto/
Java: https://www.geeksforgeeks.org/java-swing-create-a-simple-text-editor/
C: https://viewsourcecode.org/snaptoken/kilo/
Python: https://www.codespeedy.com/create-a-text-editor-in-python/
C#: https://youtu.be/e_ychG719Fk
9. Create a Browser Engine
Create a fully functioning browser engine. Make this browser engine allow for HTML, CSS, and JS files. You could make this project as complex or as simple as you want. For this project, I would focus on the design aspect as that is a big factor when choosing which browser to choose.
Tutorials (if you get stuck):
Rust: https://youtu.be/brhuVn91EdY?list=PLJbE2Yu2zumDD5vy2BuSHvFZU0a6RDmgb
Java: https://youtu.be/anoPsxasIBE
10. Create a Cryptocurrency
For this project, create a cryptocurrency. Some examples of cryptocurrencies include: Bitcoin, Ethereum, Dash, etc. Like all the previous projects, you choose how deep you want to go into this project. If you want to add more advanced features such as smart contracts, mining, and more.
Tutorials (if you get stuck):
Rust: https://youtu.be/vJdT05zl6jk?list=PLwnSaD6BDfXL0RiKT_5nOIdxTxZWpPtAv
Python: https://www.freecodecamp.org/news/create-cryptocurrency-using-python/
Elixir: https://shyr.io/blog/writing-blockchain-elixir
Typescript: https://lhartikk.github.io/
These are some pretty big projects! If you complete any of them, I would love to know how it went! Good luck if you want to tackle any of these projects! Thanks for reading!
Henry
Top comments (31)
Thank you for the ideas Henry. Finally a text of ideas that doesn't contain a calculator or a todo-list :D
To be honest, a calculator can be pretty challenging. I had to do one from scratch in my University, 3 weeks after entering computer science course. It was meant to be able to compute infinite number operations, on infinite base, with parenthesis and basic operations, in C pure
It was very interesting to make
It is indeed an interesting problem to solve, I was in the same position when started my university classes. And it is challenging algorithmically.
But that's it. You practice nothing else but algorithmic skills which is (fortunately or unfortunately) not the most important technical skills you will need in a software engineering job.
I agree with you, from a job perspective.
From a learning and experimental perspective, I still think these projects have their place on this list, akin to a new language.
It seems to be more of a Compiler exercise to me. I love all that.
Or a chat clone
Thanks, that means a lot!
Damn.... those were my exact assumptions when I started reading this article. XD
I was also to build a calculator once in my android programming classes and boy that is not easy and also a todo list in android is not easy especially when you have to implement all the functionalities of a todo list. Do not underestimate a project and over estimate your skills.
I wanna build them all. Trying to get some free time to build them all.
That's great, good luck! I'm curious, which language will you use for these projects?
I gotta research lol
I would recommend using Rust for these topics as it is easier to learn than a low-level language such as C or C++ but can also be used in low level as well as high-level applications. It's my favourite language!
Ah men. I'm trying to learn React right now. After learning MERN Stack and then a bit of JAMStack. The I'm thinking to start with Rust. (Probably end of this year or next).
Meanwhile I'll look into if this can be done with front-end🤪
Yes, that would be a great idea! I think you can use Node or Deno to create a programming language/key-value store/cryptocurrency/TCP/concurrent DS/image encryption but they won't be performant (to build for learning purposes). You could use MERN/the JAMStack to build the text editor! Good luck!
Ah man. So much. But yes, ready for them.
I really love those project ideas and am looking forward to try some of those this summer break. I am especially happy to see some real development idea's as oppose to the some demonstration projects for demonstrating some concepts using animations that could have been easily done using some really proficient animating tools.
From that ten legend, what project have you ever finished 🤔?
I’ve done the cryptocurrency and text editor! Hoping to do more!
Awesomeeeeee!
These ideas are great Weekend projects to take your programming skills to the next level! Thanks for the ideas Henry
Thanks for reading!
This is very informative and useful article. Thanks!
Thanks for reading!
This is a great list!
Thanks!
This is very useful! Thanks for sharing.
Some comments may only be visible to logged-in visitors. Sign in to view all comments.