A Year-Long Challenge for Hardcore Developers

42 Projects

Practice Programming Skills

Design and implement the projects listed below in any language of your choice!
Avoid using libraries (if not written by you) as much as you can, reinvent the wheel!
Share a repository for each project and tag it as:
#42SkillsChallenge

Where do I start?

Web Server
Web Server

Design and implement a web server application. Aim for something like Nginx!

More details

Talk is cheap. Show me the code.

Linus Torvalds
Packet Sniffer
Packet Sniffer

A packet sniffer (a packet analyzer) is used to monitor network traffic by examining streams of data packets that flow between computers on a network.

More details

Programs must be written for people to read, and only incidentally for machines to execute.

Harold Abelson
Static Code Analyzer
Static Code Analyzer

Write a tool to analyze source code (in your preferred language) without executing it to find out issues with the code.

More details
Spam Detector
Spam Detector

Write a library or a separate service that analyzes emails to detect spam.

More details
Chess Engine
Chess Engine

Implement the next generation AI-powered chess engine.

More details

Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.

John Woods, Martin Golding, many others
Search Engine
Web Search Engine

Implement a fully-fledged web search engine that will some day compete with Google!

More details
Terminal App
Command Line Terminal

Do hardcore programmers never use GUI? Anyway, implement a fancy command-line terminal application.

More details

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

Martin Fowler
Web Browser
Web Browser

You know Google Chrome, Mozilla Firefox, and alike. Design and implement something better from scratch!

More details
In-Memory Database
In-Memory Database

Design and implement a fault-tolerant in-memory database management system.

More details
Minimalistic OS
A Minimalistic OS!

It gets harder and harder. Implement a minimalistic Operating System (the kernel) with as many features as you can afford.

More details

A programmer is ideally an essayist who works with traditional aesthetic and literary forms as well as mathematical concepts, to communicate the way that an algorithm works and to convince a reader that the results will be correct.

Donald Knuth
Video Subtitle Generator
Video Subtitle Generator

Design and implement a program or a service that takes video input and produces subtitles by analyzing the content of the video.

More details
Cipher
Cipher

Design your own cipher, and an encode/decoder program for it!

More details

That's the thing about people who think they hate computers. What they really hate is lousy programmers.

Larry Niven
P2P Messaging Application
P2P Messaging Application

Design and implement a p2p messaging application with all the necessary subsystems for it to work!

More details

Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it?

Brian Kernighan
Machine Translation
Machine Translation

Implement a program or a service that translates text from one human language of your choice to others.

More details
News Reader
News Reader App

You know newsreaders (those that read RSS feeds). You know CNN-like news presenters. Now, implement a cartoon-like presenter who reads news from RSS feeds provided by the user. A hell of a task!

More details
Payment System
Payment System

Design a simulated payment system that incorporates financial transactions. Try to be as near to PayPal or Stripe as possible.

More details
Relational DBMS
Relational DBMS

Design a relational database management system with indexing and transactions support.

More details
Personal Assistant
Virtual Assistant

Implement an app or a service that provides personalized assistance to users. Something like Siri, but can be text-only.

More details

In some ways, programming is like painting. You start with a blank canvas and certain basic raw materials. You use a combination of science, art, and craft to determine what to do with them.

Andrew Hunt
Garbage Collector
Garbage Collector

Implement a garbage collector as a library or a subsystem that can be used in environments.

More details

The best error message is the one that never shows up.

Thomas Fuchs
Dropbox Clone
Dropbox Clone

Design and implement a Dropbox-like service for file sharing.

More details
Docker
Container Management System

Design and implement a Docker-like container management system using OS-level virtualization.

More details
Kubernetes
Container Orchestrator

Design and implement a container orchestration service. Preferably your service works with the Container Manager, which you have already implemented.

More details
Antivirus
Antivirus Software

Viruses are bad. Coronaviruses are even worse. Implement an antivirus.

More details
Firewall
Firewall

Network attacks are as bad as viruses. Prevent them by implementing the next generation Firewall.

More details
Version Control System
Version Control System

Remember Git? You might also remember SVN. Design and implement a new (maybe better) version control system.

More details

The most damaging phrase in the language is: "It's always been done this way."

Grace Hopper
UML Diagram Generator
UML Diagram Generator

A tool that takes the project source code as an input and generates UML diagrams.

More details

A good programmer is someone who always looks both ways before crossing a one-way street.

Doug Linder
Time Series Database
Time Series Database

Design and implement a database system optimized for storing and processing time series.

More details
Lock-free Data Structures
Lock-free Data Structures Library

Design and implement a library in any preferred language exposing a set of lock-free data structure implementations.

More details
Traffic Notifier
Traffic Notifier

Implement an app or a service that analyzes the traffic and alerts on traffic jam and suggests better routes to reach a destination.

More details
Music Merger
Music Merger

Implement an application to mix/merge two or more music tracks in a smart way to produce new music.

More details

There are only two kinds of programming languages: those people always bitch about and those nobody uses.

Bjarne Stroustrup
Recipe Generator
Recipe Generator

An app or a service that generates new recipes, based on the food, passed as an input.

More details
Flash Cards
Flash Cards Plugin for Browsers

Seems a simple one. Write a plugin for the browser to create and manage flash cards.

More details
Video Call App
Video Call Application

Design and implement a video call application with the server-side implementation if necessary.

More details

Premature optimization is the root of all evil.

Donald Knuth
Random Tester
Random Number Generator Tester

Write (or devise) a system to test randomness, i. e. random number generator's output.

More details
Microservices Framework
Microservices Framework

Design a pretty neat microservices framework in your favorite programming language.

More details
Functional Language
Functional Programming Language

Invent a new functional programming language and corresponding support environment.

More details
Strategy Game Engine
Strategy Game Engine

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

More details
World Simulation
World Simulation Software

Implement a service that allows simulating complex worlds with different a set of initial data.

More details
Movie Recommender
Movie Recommendation System

Implement the perfect movie recommendation system. Scrap the movie databases if you will.

More details
Pied Piper
Data Compression Algorithm

Devise, design, and implement the next generation data compression algorithm, i. e. Pied Piper.

More details
Phone Streaming
Phone to Phone Streaming

An app and service allowing streaming a video from one phone to another. Share a video with a friend instantly.

More details

All parts should go together without forcing. You must remember that the parts you are reassembling were disassembled by you. Therefore, if you can’t get them together again, there must be a reason. By all means, do not use a hammer.

IBM Manual, 1925

Imagination is more important than knowledge. For knowledge is limited, whereas imagination embraces the entire world, stimulating progress, giving birth to evolution.

Albert Einstein
Application Builder
Application Builder

Design and implement a system that generates new applications based on the text description. Sounds impossible? The user describes what kind of application she needs and the system generates a brand new app based on the requirements.

No details, surprise the world!