Before going any further, bookmark this website:

Having a lot of programming project ideas is a bad thing, not sharing those with you is even worse. So, it’s a year-long challenge (something Instagram kids adore these days), tagged as #42SkillsChallenge. Here’s how to take part in this insanely complex challenge, for each of the 42 projects:

Pick a project from the list. Create a GitHub repository for the project. Start working, try to implement everything from scratch, reinvent the wheel where possible (sometimes you have to). When done, test it, post the tag #42SkillsChallenge somewhere in the repo (README or somewhere visible). Share your repo with the world.

About the projects

Some projects are simple. Some of them are hard. It’s a great way to practice your skills, especially before important technical interviews.

However, there are projects that are ridiculously complex. It might take weeks or months for you to implement them. That’s where the real rock stars survive. The one who completes all the projects first, unlocks a new level of expertise. Look at the projects, I know what I’m talking about.

Also, some projects might serve as great ideas for startupers (those who hate working and love getting rich quick). I suggest gathering a team for some projects below (or in the website) and release a pretty cool app or service and conquer the world.

The list of projects

1. Web Server

Design and implement a lightweight web server that processes incoming network requests over HTTP protocol. Web server processes and delivers web pages to clients (usually, browsers). The pages are HTTP documents. While the primary function is to serve content, a full implementation of HTTP also includes ways of receiving content from clients. This feature is used for submitting web forms, including uploading of files (source). For an inspiration, try to imitate the Nginx web server.

2. Packet Sniffer

A packet sniffer (packet analyzer) is used to monitor network traffic by examining streams of data packets that flow between computers on a network. To start with the project, study well the network protocols. Then dive into implementing an application that tracks down network packets and parses its content in a human readable form.

3. Static Code Analyzer

Static code analyzers are used to analyze (obviously) the source code without running it and discover issues that might lead to bugs in the running application. That way, running a static code analyzer for your project might save a lot of time in debugging. Serious projects or mission-critical systems use commercial static analyzers to check the code quality.

Design and implement your own static analyzer for any language of your choice.

4. Spam Detector

Implement a library or a service that analyzes emails to detect spam. You are free to implement it as a browser plugin, or as a SaaS product. Try using machine learning algorithms to improve your system.

5. Chess Engine

A chess engine analyzes the chess board and suggests the best next move. Besides that, it might serve as an opponent in playing with the computer. Implement the next generation AI-powered chess engine. For an inspiration, have a look at the Stockfish.

6. Web Search Engine

My favorite one. I’ve always wanted to implement a super-duper web search engine that will compete with Google. As you can guess, nothing happened. Maybe you can implement such an engine?

Design and implement a system that indexes billions of documents worldwide, stores them in an efficient manner, and responds to user queries with most relevant list of documents.

7. Command-Line Terminal

This one is easy to describe. Implement a terminal app that replicates all the main Linux commands. Try to make the interface as fancy as you can.

8. Web Browser

Sounds simple, but it’s not. First, it’s a GUI application. Next, it understands HTTP documents, and of course, it understands and properly renders HTML and CSS. And yes, it also executes JavaScript (at least the basic stuff).

So, no Chromium engine allowed. A plain web browser implemented from scratch. This one is tough. At least for me. You can skip some nasty parts and keep it basic, but still, it’s hard.

9. In-Memory Database

Another one of my favorites. The project is basically re-implementing the Redis. An in-memory database keeps everything in memory. If you add a query language to it, some serious company will definitely hire you.

10. Minimalistic OS

A dream of many. I know many programmers who dreamed to implement their own operating system from scratch. And one of the motivation for such suicidal intentions is to dive into the lowest levels of coding and getting familiar with metal. Everyone loves metal!

You can keep it simple, but at least implement several critical features for the OS. And do it from scratch, but you can have a look at the Linux kernel. After all, Linus did had a look at Minix in some ways.

11. Video Subtitle Generator

Implement a program that takes a video as an input, analyzes the content, does some voice processing and produces subtitles for the video. It’s fine to have a limitation on the length of the video (1 or 2 minutes would be great).

12. Custom Cipher

Remember those movies about hackers? Ever dreamed of becoming one? This is your chance to take a step towards that childish dream.

Design a cipher. Implement an application that encodes and decodes information based on that cipher of yours.

It would be great if you will write some automated tests to verify the strength of your creation. In other words, hack your own security.

13. P2P Messaging Application

Implement an application for chatting with a friend. The challenge is to make it in a way that omits a centralized server and initiates a direct connection between two chat clients.

14. Machine Translation

Something like Google Translate. Design and implement a service (if you got some free time, implement the app, as well) that translates a bunch of text from one language to the other.

Choose any two languages that you want. Try to make the translator smarter, train it or correct it on the way.

15. Automated News Presenter

You are going to like this one. Imagine the regular news readers, like Feedly. And now, picture the news presenter of CNN, talking about some breaking news, coronavirus, etc. Now, imagine a cartoon-like character, that reads news to you (to the user) like real presenters do.

Design and implement a software that collects news (generally, subscribes to RSS feeds set by the user), and reads them out loud as an animated news presenter.

16. Payment System

You probably have heard of PayPal or Stripe or any other payment system. Now, design a new (or next generation?) payment system similar to one of those. Simulate financial transactions and prove the system is infallible to attacks. This one is hard to achieve.

17. Relational Database Management System

Ever wondered how do databases work under the hood? Now you have the chance to build one. Design and implement a relational DBMS similar to MySQL or PostgreSQL (not necessarily supporting SQL). Don’t forget about indexing. It will be great to have transactions, but this one is not mandatory.

18. Virtual Assistant

Something like Siri, but without voice control. Just type a text, create reminders, ask questions, etc. The set of features is up to you, but the user must feel it as a solid virtual assistant application.

This project is intended for spartphones, that is, you should write it either for Android, or for iOS, or for both using some React Native/Flutter-like stuff.

19. Garbage Collector

Quick question: what’s the difference between C++ and C#? One of the differences is that the latter has a garbage collector. Now, implement a garbage collector that can be used either as a separate service or an integrated module. The language and target are of your choice.

20. Dropbox Clone

Dropbox is a file sharing application. Consists of clients for almost all operating systems, including Android and iOS. It also has a huge backend. Design and implement your own version of a file sharing application that works at least for 10 users and provides 100 Mb of space to each of them. Implement both the server and the client (at least for one OS).

21. Container Management System

Let me put the description of the Docker.

Docker is a set of platform as a service (PaaS) products that uses OS-level virtualization to deliver software in packages called containers. Containers are isolated from one another and bundle their own software, libraries and configuration files; they can communicate with each other through well-defined channels. All containers are run by a single operating-system kernel and are thus more lightweight than virtual machines.

Implement your own Docker.

22. Container Orchestrator

It gets harder and harder. After done with Docker, design and implement an orchestrator.

For inspiration, look at Docker Swarm or Kubernetes.

23. Antivirus Software

It doesn’t matter you use Linux. It’s quarantine everywhere because of the viruses. Implement a good antivirus and test it by implementing a couple of viruses. This one is not an easy task, but when you are done with implementing a Minimalistic OS, it should be easier to tackle this one.

24. Firewall

Firewalls monitor network requests, open or close ports on the computer. They are basically the first echelon in the defense system. Design and implement a firewall software. At least try something like netstat that also has permissions to close ports or alert on suspicious network requests.

25. Version Control System

You most probably are using Git. You might have used SVN or even CVS. Anyways, the idea is simple. Implement a new version control system. Aim for something better than Git.

Also, remember, Linus wrote the first version of Git in two weeks or so. Accept the challenge, write your VCS in less than 13 days. In your face, Torvalds!

26. UML Diagram Generator

Take any of your preferred programming languages that support OOP. Implement a tool that takes the project source code as an input and generates UML diagrams for it.

27. Time Series Database

It’s a database software that stores and processes time series more efficiently than regular database management systems. Find out what are time series and then design and implement a time series database system.

28. Lock-free Data Structures

Lock-free programming is hard to grasp. I’ve tried, merely understood.

Implement a set of lock-free data structures as a library that can be used in programming projects.

29. Traffic Notifier

Implement an app (or a service) that notifies the user about the traffic jam.

More than that, it suggest a better route to some destination (set by the user).

This is one of those applications that might serve as a good idea for a startup. Implement a really quality service and the success is guaranteed. You can combine this one with the virtual assistant introduced earlier, and the result will be marvelous.

30. Music Merger

Implement a software that merges two or more music tracks together to produce a new one.

31. Recipe Generator

The app (or service) generates new recipes and learns through the way. So when you cook by its recipe, you then rate it to tell it how good it was. Not a fresh idea, but still can be useful.

32. Browser Plugin for Flash Cards

There were a lot of hard projects to implement. This one is a little easier. Implement a browser plugin (for any browser) that allows storing flash cards and then randomly shows them to the user (can be configured).

33. Video Call Application

There are several video call applications, Zoom, Skype, Google Hangouts.

But still, they work bad if the internet connection is poor. Maybe you should invent a new compression algorithm (see below) and combine it with this application to implement a new superb video call application? Not sure. Basically, this project represents PiperChat, design and implement the best quality video chat application out there.

34. Randomness Tester

Sounds crazy, a friend suggested this one. Write a software (or a tool), or maybe devise a formula (not sure) that tests the results of a random number generator and verifies if those are really random.

35. Microservices Framework

Design a pretty neat microservices framework that supports basic patterns and provides a set of implementations out of the box. Make sure you cover service discovery and microservices’ communication.

The more features you add to your framework, the better chances to win the challenge.

Choose any programming language you’d like.

36. Functional Programming Language

Invent a new programming language in functional paradigm. Be succinct, but provide all the environment to implement programs in your language and run them painlessly.

37. Strategy Game Engine

One of the best ways to study OOP is through designing games. Games usually are based on engines.

Design and implement a game engine for strategy games. Preferrably, implement a game based on the engine to test it.

38. World Simulation

Westworld is coming.

Implement a service that allows simulating complex worlds with different set of initial data. The more the details, the better is the system. This one is pretty tough, might take very long to finish it. Keep it simple when you feel stuck.

39. Movie Recommendation System

It’s a lie, Netflix’s recommendation system sucks. Besides hand-picked lists of movies, I didn’t see a solid movie recommendation system anywhere.

Please, fix this madness. Design and implement the best movie recommendation system out there.

(You might need scraping a lot of databases to collect data on movies.)

40. Pied Piper

Someone should do this. Design and implement a compression algorithm that compresses large files into small ones. It’s true that achieving the perfect result is very hard, but try not to limit yourself by that thoughts. Aim for the impossible, https://en.wikipedia.org/wiki/Weissman_score