100+ Project Ideas
Tags: beginners, codenewbie, career, motivation
Published: 2019-08-30 16:52:33

**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](https://weeklyproject.club)!

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!](https://pickaframework.com/articles/why/),and how to actually make that decision ([Over Here!](https://pickaframework.com/feature_fishing/)) 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](https://javascript30.com)
-   [Build A Simple Search Bot in 30 minutes](https://medium.freecodecamp.org/how-to-build-a-simple-search-bot-in-30-minutes-eb56fcedcdb1)
-   [Build iOS Photo Library App with Xamarin and Visual Studio](https://www.raywenderlich.com/134049/building-ios-apps-with-xamarin-and-visual-studio)
-   [Build an Android Flashlight App](https://www.youtube.com/watch?v=dhWL4DC7Krs) (video)
-   [Make a Chat Application](https://medium.freecodecamp.org/how-to-build-a-chat-application-using-react-redux-redux-saga-and-web-sockets-47423e4bc21a)
-   [Build A ToDo App With React Native](https://blog.hasura.io/tutorial-fullstack-react-native-with-graphql-and-authentication-18183d13373a)

## Easy

-   [Create a Blank App with C# and Xamarin (work in progress)](https://www.intertech.com/Blog/xamarin-tutorial-part-1-create-a-blank-app/)
-   [Build iOS Photo Library App with Xamarin and Visual Studio](https://www.raywenderlich.com/134049/building-ios-apps-with-xamarin-and-visual-studio)
-   [Build A Loading Screen](https://medium.freecodecamp.org/how-to-build-a-delightful-loading-screen-in-5-minutes-847991da509f)
-   [Build an HTML Calculator with JS](https://medium.freecodecamp.org/how-to-build-an-html-calculator-app-from-scratch-using-javascript-4454b8714b98)
-   [Build a React Native Todo Application](https://egghead.io/courses/build-a-react-native-todo-application)
-   Write a Twitter Bot in Node.js
    -   [Part 1](https://codeburst.io/build-a-simple-twitter-bot-with-node-js-in-just-38-lines-of-code-ed92db9eb078)
    -   [Part 2](https://codeburst.io/build-a-simple-twitter-bot-with-node-js-part-2-do-more-2ef1e039715d)
-   [Create A Simple RESTFUL Web App](https://closebrace.com/tutorials/2017-03-02/creating-a-simple-restful-web-app-with-nodejs-express-and-mongodb)
-   [Build A Simple Search Bot in 30 minutes](https://medium.freecodecamp.org/how-to-build-a-simple-search-bot-in-30-minutes-eb56fcedcdb1)
-   [Build A Job Scraping Web App](https://medium.freecodecamp.org/how-i-built-a-job-scraping-web-app-using-node-js-and-indreed-7fbba124bbdc)
-   [Mining Twitter Data with Python](https://marcobonzanini.com/2015/03/02/mining-twitter-data-with-python-part-1/)
-   [Scrape a Website with Scrapy and MongoDB](https://realpython.com/blog/python/web-scraping-with-scrapy-and-mongodb/)
-   [How To Scrape With Python and Selenium WebDriver](http://www.byperth.com/2018/04/25/guide-web-scraping-101-what-you-need-to-know-and-how-to-scrape-with-python-selenium-webdriver/)
-   [Which Movie Should I Watch using BeautifulSoup](https://medium.com/@nishantsahoo.in/which-movie-should-i-watch-5c83a3c0f5b1)
-   [Build a Microblog with Flask](https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world)
-   Create a Blog Web App In Django
    -   [Part I : Introduction](https://tutorial.djangogirls.org/en/)
    -   [Part II : Extension To Add More Features](https://legacy.gitbook.com/book/djangogirls/django-girls-tutorial-extensions/details)
-   [Choose Your Own Adventure Presentations](https://www.twilio.com/blog/2015/03/choose-your-own-adventures-presentations-wizard-mode-part-1-of-3.html)
-   [Build a Todo List with Flask and RethinkDB](https://realpython.com/blog/python/rethink-flask-a-simple-todo-list-powered-by-flask-and-rethinkdb/)

## Medium

-   [Learn C# By Building a Simple RPG Game](http://scottlilly.com/learn-c-by-building-a-simple-rpg-index/)
-   [Create a Rogue-like game in C#](https://roguesharp.wordpress.com/)
-   [Build a Twitter Bot with Clojure](http://howistart.org/posts/clojure/1/index.html)
-   [Building a Spell-Checker](https://bernhardwenzel.com/articles/clojure-spellchecker/)
-   [Build a Simple HTTP Server with Java](http://javarevisited.blogspot.com/2015/06/how-to-create-http-server-in-java-serversocket-example.html)
-   [Build an Android Flashlight App](https://www.youtube.com/watch?v=dhWL4DC7Krs) (video)
-   [Build a Spring Boot App with User Authentication](https://scotch.io/tutorials/build-a-spring-boot-app-with-user-authentication)
-   [Build 30 things in 30 days with 30 tutorials](https://javascript30.com)
-   [Build an App in Pure JS](https://medium.com/codingthesmartway-com-blog/pure-javascript-building-a-real-world-application-from-scratch-5213591cfcd6)
-   [Create Serverless React.js Apps](http://serverless-stack.com/)
-   [Create a Trello Clone](http://codeloveandboards.com/blog/2016/01/04/trello-tribute-with-phoenix-and-react-pt-1/)
-   [Create a Character Voting App with React, Node, MongoDB and SocketIO](http://sahatyalkabov.com/create-a-character-voting-app-using-react-nodejs-mongodb-and-socketio/)
-   [React Tutorial: Cloning Yelp](https://www.fullstackreact.com/articles/react-tutorial-cloning-yelp/)
-   [Build A Simple Medium Clone using React.js and Node.js](https://codeburst.io/build-simple-medium-com-on-node-js-and-react-js-a278c5192f47)
-   [Integrate MailChimp in JS](https://medium.freecodecamp.org/how-to-integrate-mailchimp-in-a-javascript-web-app-2a889fb43f6f)
-   [Build A ToDo App With React Native](https://blog.hasura.io/tutorial-fullstack-react-native-with-graphql-and-authentication-18183d13373a)
-   [Make a Chat Application](https://medium.freecodecamp.org/how-to-build-a-chat-application-using-react-redux-redux-saga-and-web-sockets-47423e4bc21a)
-   [Create a News App with React Native](https://medium.freecodecamp.org/create-a-news-app-using-react-native-ced249263627)
-   [Learn Webpack For React](https://medium.freecodecamp.org/learn-webpack-for-react-a36d4cac5060)
-   [Build Your Own React Boilerplate](https://medium.freecodecamp.org/how-to-build-your-own-react-boilerplate-2f8cbbeb9b3f)
-   [A Basic React+Redux Introductory Tutorial](https://hackernoon.com/a-basic-react-redux-introductory-tutorial-adcc681eeb5e)
-   [Build an Appointment Scheduler](https://hackernoon.com/build-an-appointment-scheduler-using-react-twilio-and-cosmic-js-95377f6d1040)
-   Build an offline-capable Hacker News client with Angular 2+
    -   [Part 1](https://houssein.me/angular2-hacker-news)
    -   [Part 2](https://houssein.me/progressive-angular-applications)
-   ToDo App with Angular 5
    -   [Introduction to Angular](http://www.discoversdk.com/blog/intro-to-angular-and-the-evolution-of-the-web)
    -   [Part 1](http://www.discoversdk.com/blog/angular-5-to-do-list-app-part-1)
-   ToDo App with Angular 5
    -   [Introduction to Angular](http://www.discoversdk.com/blog/intro-to-angular-and-the-evolution-of-the-web)
    -   [Part 1](http://www.discoversdk.com/blog/angular-5-to-do-list-app-part-1)

## Hard

-   [Build an Interpreter](http://www.craftinginterpreters.com/) (Chapter 14 on is written in C)
-   [Write a Shell in C](https://brennan.io/2015/01/16/write-a-shell-in-c/)
-   [Write a FUSE Filesystem](https://www.cs.nmsu.edu/~pfeiffer/fuse-tutorial/)
-   [Build Your Own Text Editor](http://viewsourcecode.org/snaptoken/kilo/)
-   [Build Your Own Lisp](http://www.buildyourownlisp.com/)
-   [Building the CoreWiki](https://www.youtube.com/playlist?list=PLVMqA0_8O85yC78I4Xj7z48ES48IQBa7p) 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](https://github.com/csharpfritz/CoreWiki).
-   [Building a JIRA integration with Clojure & Atlassian Connect](https://hackernoon.com/building-a-jira-integration-with-clojure-atlassian-connect-506ebd112807)
-   [Build an Interpreter](http://www.craftinginterpreters.com/) (Chapter 4-13 is written in Java)
-   [Build a Full Stack Movie Voting App with Test-First Development using Mocha, React, Redux and Immutable](https://teropa.info/blog/2015/09/10/full-stack-redux-tutorial.html)
-   [Build a Twitter Stream with React and Node](https://scotch.io/tutorials/build-a-real-time-twitter-stream-with-node-and-react-js)
-   Build a Serverless MERN Story App with Webtask.io
    -   [Part 1](https://scotch.io/tutorials/build-a-serverless-mern-story-app-with-webtask-io-zero-to-deploy-1)
    -   [Part 2](https://scotch.io/tutorials/build-a-serverless-mern-story-app-with-webtask-io-zero-to-deploy-2)
-   [Build A Chrome Extension with React + Parcel](https://medium.freecodecamp.org/building-chrome-extensions-in-react-parcel-79d0240dd58f)
    [Testing React App With Pupepeteer and Jest](https://blog.bitsrc.io/testing-your-react-app-with-puppeteer-and-jest-c72b3dfcde59)
-   [Code The Game Of Life With React](https://medium.freecodecamp.org/create-gameoflife-with-react-in-one-hour-8e686a410174)
-   [Build A Chat App with Sentiment Analysis](https://codeburst.io/build-a-chat-app-with-sentiment-analysis-using-next-js-c43ebf3ea643)
-   [Build A Full Stack Web Application Setup](https://hackernoon.com/full-stack-web-application-using-react-node-js-express-and-webpack-97dbd5b9d708)
-   Build A Random Quote Machine
    -   [Part 1](https://www.youtube.com/watch?v=3QngsWA9IEE)
    -   [Part 2](https://www.youtube.com/watch?v=XnoTmO06OYo)
    -   [Part 3](https://www.youtube.com/watch?v=us51Jne67_I)
    -   [Part 4](https://www.youtube.com/watch?v=iZx7hqHb5MU)
    -   [Part 5](https://www.youtube.com/watch?v=lpba9vBqXl0)
    -   [Part 6](https://www.youtube.com/watch?v=Jvp8j6zrFHE)
    -   [Part 7](https://www.youtube.com/watch?v=M_hFfrN8_PQ)
-   Build A Beautiful Real World App with Angular 6 :
    -   [Part I](https://medium.com/@hamedbaatour/build-a-real-world-beautiful-web-app-with-angular-6-a-to-z-ultimate-guide-2018-part-i-e121dd1d55e)
-   [Build Responsive layout with BootStrap 4 and Angular 6](https://medium.com/@tomastrajan/how-to-build-responsive-layouts-with-bootstrap-4-and-angular-6-cfbb108d797b)
-   [Build a Todo List with Django and Test-Driven Development](http://www.obeythetestinggoat.com/)
-   [Build a RESTful Microservice in Python](http://www.skybert.net/python/developing-a-restful-micro-service-in-python/)
-   [Microservices with Docker, Flask, and React](https://testdriven.io/)
-   [Build A Simple Web App With Flask](https://pythonspot.com/flask-web-app-with-python/)
-   [Build a RESTful API with Flask – The TDD Way](https://scotch.io/tutorials/build-a-restful-api-with-flask-the-tdd-way)
-   [Create A Django API in under 20 minutes](https://codeburst.io/create-a-django-api-in-under-20-minutes-2a082a60f6f3)

# 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](https://en.wikipedia.org/wiki/Pomodoro_Technique)

### 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:]( It is a style of writing where we replace all lower case letters into upper case letters leaving the initial of all the words).
-   Subgoals:
    -   Program must then convert the given sentence in camel case.To know more about camel case
        [click_here](https://en.wikipedia.org/wiki/Camel_case)
    -   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](http://pastebin.com/XMY48CnN) 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](https://i.imgur.com/GRkj3yz.jpg) 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](https://en.wikipedia.org/w/api.php?action=query&list=random&rnnamespace=0&rnlimit=10&format=json).
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](https://en.wikipedia.org/wiki/Erasto_Cort%C3%A9s_Ju%C3%A1rez) has é and á in it. If you look at this specific article's [API](https://en.wikipedia.org/w/api.php?action=query&prop=info&pageids=39608394&inprop=url&format=json), 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](https://docs.python.org/2/howto/unicode.html) 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](https://en.wikipedia.org/wiki?curid=39608394) 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](http://www.reddit.com/r/explainlikeimfive/comments/qowts/eli5_what_is_api/c3z9kok) 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?