The best way to learn to program is to work on projects, so here’s some ideas for projects for beginners, intermediate, and advanced programmers. Remember: it doesn’t matter whether or not you finish these projects. What matters is what you learn along the way. If you have any ideas for things to add to this list you can leave a comment with it.
- A program that exits with return status 0
- A program that prints “hello, world”
- A Linux kernel driver for a USB button.
- A C standard library that has memory allocation using the buddy algorithm.
- An arduino program that blinks an LED.
- An arduino program which turns on a motor which closes or opens a window based on the temperature.
- A program that uses loops to print out the lyrics to 99 bottles of beer on the wall.
- A library that parses xml concurrently.
- A Simple web server that serves up one html page.
- A web server that serves up all files in the current directory.
- A concurrent pipeline that reads in MNIST samples and uses image magicke to turn them into files, and maybe apply some optional filters.
- A concurrent system that runs dijkstra’s algorithm.
- A web server that uses youtube-dl to download youtube videos automatically, save them, and play them back to whoever owns the server.
- A program that uses concurrency, and image magicke to automagically fix the gamma settings for a huge number of image files in parallel.
- A reddit scraper.
- A program that takes in a list of urls from standard input and (in parallel) checks each of them to see if their servers are up, and the prints to standard output the names of any that are not responding.
- A script that helps you pick out parts for a PC.
- A simple package manager using an sqlite library.
- A script that lets you access firefox web history and use readln to issue queries about it.
- A script that acts as a pharmacist.
- A script that checks the school schedules of a student for overlapping classes.
- A script that extracts all links from an html page (note: you will need a library for this).
- A program that takes an integer and tells you if the integer is prime using a parallelized brute force method.
- A password cracker that uses the Control.Parallel.Strategies library.
- A program that takes in an adjacency list as a CSV file and spits out an adjacency matrix.
- A program that runs K-means image segmentation on it’s input using the accelerate library for GPU acceleration.
- A neural network library that uses dependent types, and the accelerate library.
- A program that can lazily generate all possible tweets.
- A program that lazily generates and prints the fibonacci sequence (note: you will have to set stdout buffering to line buffering).
- An rsync wrapper that backs up your files using snapshot backups.
- A program that finds duplicate files in a directory and makes them the same file using hard links so as to save space.
- A script that grabs a random line from a given file.
- A script that renames every file to include the date and time it was modified in the file name.
- A script that uses a regular expression to check if a given input is a valid phone number.
Lex and Yacc:
- An XML parser.
- A C compiler.
- A programming language that has all the features you wish other programming languages had.
- A parser for the wavefront obj file format.
- A simple web forum using the yaws program.
- A gopher server.
- A bank website.
- A server that can serve up videos.
- A Debian package server using this specification.
- A mastodon web server.
- A web server that says “Hello, world” via a web page (use yaws to make this easier).
- An XKCD comic downloader.
- A script that uses AI to draw googly eyes on images.
- A program that simulates a galton board, and prints out how often each pocket gets a ball in it.
- A calculator program with a GUI using a GUI library.
- A program that prints out the lyrics to 99 bottles of beer on the wall using loops.
- A program with an interactive prompt that asks the user what it should do and makes function calls to various things it can do (like “remove [filename]” or “tell me the time” or something).
- A program that asks for two numbers, and then calculates the length of the hypotenuse of a right triangle with those two numbers being the side lengths (hint: use the pythagorean theorem).
- A program that uses objects to keep track of cars for a dealership.
- A script that takes in a list of birthdays and the names of people associated with them, checks the date, and says happy birthday to anyone who’s birthday is on the current date.
- A script that takes in a list of numbers and tells you how often each number shows up.
- A program that takes in a list of numbers and returns the average, and standard deviation of those numbers.
- A script that uses rotation, scaling, and translation matrices to trilaterate the position of a thing given it’s distances to four given points in 3D space.
- A neural network script.
- A script that can read a text file and summarize it using transformers.
Projects where you’ll have to decide on your own what language to use:
- A program that reads in a wavefront obj file and displays it in a window, and the user can rotate the model around to see it from different angles.
- A twitter client that uses ncurses.
- A quick script or program that can generate the sound of what hydrogen should theoretically sound like when excited.
- A remote controlled differential drive robot (note: this will require some knowledge of electrical engineering).
- A program that argues with the user (bonus points if it uses AI).
- Add a new feature to an existing project on github.com
- A series of programs that enables you to create a genetic breeding model for machine learning.
- A program that reads an image from a file and blurs it using the image magick library.