Edit: Hi Everyone! After an amazing response to this article, I've created something called The Weekly Project Club. Every week you'll get a problem to solve in your inbox. You can work on solving the problem, and you'll have the help of the whole club to keep you on track. Learn more and sign up here!
The other day I noticed a pattern. I noticed a lot of people that are trying to
learn programming, but they don't have a specific goal in mind. I've talked about how understanding why you want to learn to program can help you pick what language to learn Right here!,and how to actually make that decision (Over Here!) but how does a project help?
When I mentor programmers, I've found that having a project to work on can help block out some of the other distractions, like wondering whether or not you're using the right language. By focusing in on a specific goal, you have a little less energy to worry about whether this is exactly the language you should be working with. And the result is that you build something neat, and you learn something along the way! 2 birds, 1 stone.
So that's why I curated this list of projects for beginner programmers. Many people have made large lists of projects to learn programming with, but they are rarely organized by difficulty. I've gone through several popular listings of programming project ideas. You can find the sources at the bottom of the page if you want to see the full listings.
I've broken it up into Tutorials and Ideas. Tutorials include a link to a resource, while ideas are just general descriptions of projects. I've also included my list of favorites for beginners.
Have a look, and see if something inspires you!
Tutorials
My Favs
- Build 30 things in 30 days with 30 tutorials
- Build A Simple Search Bot in 30 minutes
- Build iOS Photo Library App with Xamarin and Visual Studio
- Build an Android Flashlight App (video)
- Make a Chat Application
- Build A ToDo App With React Native
Easy
- Create a Blank App with C# and Xamarin (work in progress)
- Build iOS Photo Library App with Xamarin and Visual Studio
- Build A Loading Screen
- Build an HTML Calculator with JS
- Build a React Native Todo Application
- Write a Twitter Bot in Node.js
- Create A Simple RESTFUL Web App
- Build A Simple Search Bot in 30 minutes
- Build A Job Scraping Web App
- Mining Twitter Data with Python
- Scrape a Website with Scrapy and MongoDB
- How To Scrape With Python and Selenium WebDriver
- Which Movie Should I Watch using BeautifulSoup
- Build a Microblog with Flask
- Create a Blog Web App In Django
- Choose Your Own Adventure Presentations
- Build a Todo List with Flask and RethinkDB
Medium
- Learn C# By Building a Simple RPG Game
- Create a Rogue-like game in C#
- Build a Twitter Bot with Clojure
- Building a Spell-Checker
- Build a Simple HTTP Server with Java
- Build an Android Flashlight App (video)
- Build a Spring Boot App with User Authentication
- Build 30 things in 30 days with 30 tutorials
- Build an App in Pure JS
- Create Serverless React.js Apps
- Create a Trello Clone
- Create a Character Voting App with React, Node, MongoDB and SocketIO
- React Tutorial: Cloning Yelp
- Build A Simple Medium Clone using React.js and Node.js
- Integrate MailChimp in JS
- Build A ToDo App With React Native
- Make a Chat Application
- Create a News App with React Native
- Learn Webpack For React
- Build Your Own React Boilerplate
- A Basic React+Redux Introductory Tutorial
- Build an Appointment Scheduler
- Build an offline-capable Hacker News client with Angular 2+
- ToDo App with Angular 5
- ToDo App with Angular 5
Hard
- Build an Interpreter (Chapter 14 on is written in C)
- Write a Shell in C
- Write a FUSE Filesystem
- Build Your Own Text Editor
- Build Your Own Lisp
- 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.
- Building a JIRA integration with Clojure & Atlassian Connect
- Build an Interpreter (Chapter 4-13 is written in Java)
- Build a Full Stack Movie Voting App with Test-First Development using Mocha, React, Redux and Immutable
- Build a Twitter Stream with React and Node
- Build a Serverless MERN Story App with Webtask.io
- Build A Chrome Extension with React + Parcel Testing React App With Pupepeteer and Jest
- Code The Game Of Life With React
- Build A Chat App with Sentiment Analysis
- Build A Full Stack Web Application Setup
- Build A Random Quote Machine
- Build A Beautiful Real World App with Angular 6 :
- Build Responsive layout with BootStrap 4 and Angular 6
- Build a Todo List with Django and Test-Driven Development
- Build a RESTful Microservice in Python
- Microservices with Docker, Flask, and React
- Build A Simple Web App With Flask
- Build a RESTful API with Flask – The TDD Way
- Create A Django API in under 20 minutes
Ideas
Easy
99 Bottles
- Create a program that prints out every line to the song "99 bottles of beer on the wall."
- Do not use a list for all of the numbers, and do not manually type them all in. Use a built-in function instead.
- Besides the phrase "take one down," you may not type in any numbers/names of numbers directly into your song lyrics.
- Remember, when you reach 1 bottle left, the word "bottles" becomes singular.
Magic 8 Ball
- Simulate a magic 8-ball.
- Allow the user to enter their question.
- Display an in progress message(i.e. "thinking").
- Create 20 responses, and show a random response.
- Allow the user to ask another question or quit.
-
Bonus:
- Add a gui.
- It must have a box for users to enter the question.
-
It must have at least 4 buttons:
- ask
- clear (the text box)
- play again
- quit (this must close the window)
Rock Paper Scissors Game
- Create a rock-paper-scissors game.
- Ask the player to pick rock, paper or scissors.
- Have the computer chose its move.
- Compare the choices and decide who wins.
- Print the results.
- Subgoals:
- Give the player the option to play again.
- Keep a record of the score (e.g. Player: 3 / Computer: 6).
Countdown Clock
- Create a program that allows the user to choose a time and date, and then prints out a message at given intervals (such as every second) that tells the user how much longer there is until the selected time.
- Subgoals:
- If the selected time has already passed, have the program tell the user to start over.
- If your program asks for the year, month, day, hour, etc. separately, allow the user to be able to type in either the month name or its number.
- TIP: Making use of built in modules such as time and datetime can change this project from a nightmare into a much simpler task.
Medium
Pomodoro Timer
Create a Pomodoro Timer.
Pomodoro Timer is a time management method. The technique uses a timer to break down work into intervals, traditionally 25 minutes in length, separated by short breaks. These intervals are named pomodoros, the plural in English of the Italian word pomodoro (tomato), after the tomato-shaped kitchen timer that Cirillo used as a university student.
There are six steps in the original technique:
Decide on the task to be done.
Set the pomodoro timer (traditionally to 25 minutes).
Work on the task.
End work when the timer rings and put a checkmark on a piece of paper.
If you have fewer than four checkmarks, take a short break (3–5 minutes), then go to step 2.
After four pomodoros, take a longer break (15–30 minutes), reset your checkmark count to zero, then go to step 1.
to know more about Pomodoro Timer click here
GoogleCase
- It's a game which allows you to play with english sentences.
- User will enter a sentence in any format.(uppercase or lowercase or a mix of both)
- Program must convert the given sentence in google case .What is a google case style of sentence?know_about_it_here:.
- Subgoals:
- Program must then convert the given sentence in camel case.To know more about camel case click_here
- Sentence can be entered with any number of spaces.
Dice Rolling Simulator
- Allow the user to input the amount of sides on a dice and how many times it should be rolled.
- Your program should simulate dice rolls and keep track of how many times each number comes up (this does not have to be displayed).
- Finally, print out how many times each number came up.
- Subgoals:
- Adjust your program so that if the user does not type in a number when they need to, the program will keep prompting them to type in a real number until they do so.
- Put the program into a loop so that the user can continue to simulate dice rolls without having to restart the entire program.
- In addition to printing out how many times each side appeared, also print out the percentage it appeared. If you can, round the percentage to 4 digits total OR two decimal places.
- Bonus:
- You are about to play a board game, but you realize you don't have any dice. Fortunately you have this program.
- 1. Create a program that opens a new window and draws 2 six-sided dice
- 2. Allow the user to quit, or roll again
- Allow the user to select the number of dice to be drawn on screen(1-4) 2. Add up the total of the dice and display it
Count and Fix Green Eggs and Ham
Some of you may remember the Dr. Sues story "Green Eggs and Ham". For those of you that don't remember it or have never heard of it, here is the story. However, there is a problem with the story I gave you - every time the word I is used, it is lowercase.
Because of this problem, your job is to do the following:
- Copy the story I gave you into a regular text file.
- Create a program that reads through the story and makes the letter i uppercase any time it should be. (Make sure to change it when it's used in sam-I-am's name too.)
- Have your program make a new file, and have it write out the story correctly.
- Print out how many errors were corrected.
- When you're finished, you should have corrected this many errors.
Hard
Random Wikipedia Article
If you've been to Wikipedia, you may have noticed that there is a link to a random article on the left side of the screen. While it can be fun to see what article you get taken to, sometimes it would be nice to see the name of the article so you can skip it if it sounds boring. Luckily, Wikipedia has an API that allows us to do so Click here.
However, there is a dilemma. Since Wikipedia has articles about topics from all over the world, some of them have special characters in the title. For example, the article about the spanish painter Erasto Cortés Juárez has é and á in it. If you look at this specific article's API, you will see that the title is "Erasto Cort\u00e9s Ju\u00e1rez" and that the \u00e9 and \u00e1 are replacing the two previously mentioned letters. (For information about what this is, start by checking out the first half of this page in the documentation). To make your program work, you're going to have to handle this problem somehow.
- Create a program that pulls titles from the official Wikipedia API and then asks the user one by one if he or she would like to read about that article.
- Example:
- If the first title is Reddit, then the program should ask something along the lines of "Would you like to read about Reddit?" If the user says yes, then the program should open up the article for the user to read.
- HINT: Click here to see how the article's ID can be used to access the actual article.
- Subgoals:
- As mentioned before, do something about the possibility of unicode appearing in the title.
- Whether you want your program to simply filter out these articles or you want to actually turn the codes into readable characters, that's up to you.
- Make the program pause once the user has selected an article to read, and allow him or her to continue browsing different article titles once finished reading.
- Allow the user to simply press ENTER to be asked about a new article.
What’s the Weather?
If you would like to know the basics of what an API is, check out this post by iamapizza.
- Create a program that pulls data from OpenWeatherMap.org and prints out information about the current weather, such as the high, the low, and the amount of rain for wherever you live.
- Subgoals:
- Print out data for the next 5-7 days so you have a 5 day/week long forecast.
- Print the data to another file that you can open up and view at, instead of viewing the information in the command line.
- If you know html, write a file that you can print information to so that your project is more interesting.
- Tips:
- APIs that are in Json are essentially lists and dictionaries. Remember that to reference something in a list, you must refer to it by what number element it is in the list, and to reference a key in a dictionary, you must refer to it by its name.
- Don't like Celsius? Add &units=imperial to the end of the URL of the API to receive your data in Fahrenheit.
Sources
- https://github.com/tuvtran/project-based-learning
- https://github.com/jorgegonzalez/beginner-projects
- https://github.com/MunGell/awesome-for-beginners/blob/master/README.md
- https://github.com/sarahbohr/AbsoluteBeginnerProjects
What do you think? Do you like to learn with a specific project or do you prefer without?
Top comments (17)
Hello this list rocks
Have you ever met or realized a tutorial where PHP OOP beginners are accompanied by the hand from the classes vocabulary to some PURIST OOP STYLE GUIDE
What do I mean
With plenty of PHP OOP tutorials and guides around the web, you become half of an expert for the terms part of the PHP OOP
but then ... they all forget about teaching a little of mentality and good style and practices when thinking and projecting with OOP in mind (for PHP)
Maybe its me that am wrong, but e.g. the typical CRUD tutorial for PHP/MYSQL is usually procedural (and that is good for such a tiny app) BUT in a PHP OOP tutorial,
it would be preparatory to have the chance to see some comparison
I mean see that tiny CRUD app EITHER the procedural way and next its alter ego made with as many classes as possible :-)
For comparison I mean
when you learn that stuff, talking about the above example, as rookie you ask yourself
the PHP OOP PURIST GURU where would place the foreach loop that will output the result of the SELECT query to fill the HTML table?
In which one of the classes? (Given that above I asked ... how many / which will be the classes)
Needless to say that the comparison and the OOP code must teach the PURIST STYLE and so ideally it should be written by some PHO OOP guru/pro
Thank you for reading and thank you for the comprehension
Thank you even more if you may link a well done tutorial that makes the second part that I talk about
which passes from the PHP OOP "vocabulary" to some PHP OOP "grammar" or if you have a link to some PHP OOP oriented very basic app to be used as study field (hopefully NOT part of or based on a PHP framework)
it would make no sense to put classes in action by myself to make practice ... the wrong way, they may work but that is not the point.
Robert
I agree
Thanks Sam for these ideas.
I'm always learning, and knowing when to drop tutorials and when to start learning by yourself is something I'm working on. By giving these project ideas not only we have new ideas of things to build, but also the difficulty level, so we can scale from that.
PS: Check your first link on GoogleCase, it is broken.
Thanks for a great post! Next time I want to start a side project, I'll read this again for inspiration.
Just letting you know that the link below seems to be broken:
Thank you so much!!
Thank you for collection!
Great post, thank you!
Great List : )
Thanks!
Blimey, thank you for this. Bloody endless ideas!
Already subscribed! :-)
جزيل الشكر