The Never-ending List of Small Programming Project Ideas

The Never-ending List of Small Programming Project Ideas Featured Image

This is it! The list you’ve been needing to help build out your portfolio. Quit asking ChatGPT for project ideas and reference this list built from the passions of hundreds of college students. Maybe it’ll help you connect your interests to the world of computing.

Table of Contents

Building Out Your Portfolio

Previously, you may have seen an article I wrote about students needing more open-ended projects to include in their portfolios. Well, I put that idea into practice over the last year with something I’ve lazily dubbed “the portfolio project.”

The premise of the project is pretty simple. We have a discipline that we teach, and an entire API with examples. However, we never task students with creating their own software component following the discipline. Instead, we give them exposure to the different steps of the process over the span of two semesters.

I never really loved the way we taught the discipline because students never had a chance to put all of their knowledge into practice. That would be like an Shonen character going through a huge training arc only to be excluded from the tournament arc. Like, what was the point?

As a result, I wanted to give my students a chance to build out their own components according to our discipline. As a result, there are some key constraints. However, the project is also incredibly open-ended. I let the students select any topic that interests them from personal hobbies to career goals. Then, I have them work through a six assignments to convert their idea to a complete component.

As you can probably imagine, students love the project. It’s one of the very few times that students get agency over their own education, so I find that they really take it seriously. And to me, it’s not enough to give them that positive experience. I also want to share their work with the world, so others may follow in their footsteps.

To do that, I’ve created this massive list of project ideas, which have been borrowed directly from student submissions since the beginning of the portfolio project. Hopefully, these ideas will go a long way to helping you grow your passion for software development. And if not, check back later! I plan to keep adding to this article each semester.

Small Programming Project Ideas

When trying to figure out how to best organize this list, I initially wanted to lean into the software domains (e.g., data analytics, software engineering, etc.). However, that became challenging because domains often bleed into each other. Instead, I ended up leaning more into the idea that good projects do one thing (i.e., have one purpose) and decided to order the collection by those purposes.

When generating the purposes, however, a new problem arose. How do we draw lines between purposes? To do that, I borrowed a pair of concepts from object-oriented programming: state and behavior. State refers to the data that a program stores while behavior refers to actions that influence state. Therefore, without state, there is no behavior.

With this knowledge, I was able to construct three kinds of purposes based on all the legal combinations of state and behavior: state and behavior, state only, and neither state nor behavior. In other words, the purpose of a program might be to provide state and behavior (i.e., a model). Alternatively, the purpose of a program might be just to maintain state (i.e., a store). Finally, the purpose of a program might be to do neither (i.e., a utility). In the remainder of this article, the project ideas will be organized into these three categories.

Models—State and Behavior

The purpose of a model is to provide both state and behavior for something real world or otherwise. You may be familiar with the term “model” from the model-view-controller pattern, where the model is the place where all the data is stored and manipulated. I’ve kept a similar definition for the purpose of this list. In general, there is no good naming convention I could come up with for models, but they tend be nouns. And to be completely explicit, each model below has an example of both the behavior and the state underlined in a phrase of the form: behavior of state.

  • Artificial Neuron: models the manipulation of weights for a neuron in a neural network
  • Bank Account: models the movement of funds in a bank account
  • Clothing: models the customization of outfits
  • Counter: models the counting of integers
  • Dashboard: models the display of data on a car dashboard
  • Data Structure: models the organization of data
  • Data Table: models the manipulation of data in a table
  • Dialog Tree: models the traversal of dialog in a conversation
  • Geometry: models the manipulation of geometry
  • Inventory: models the movement of inventory items
  • Keyboard: models the organization of keys on a keyboard
  • Library: models the organization of books in a library
  • Logic Gate: models the flow of signals through a logic gate
  • Matrix: models the manipulation of data in a matrix
  • Music Playlist: models the organization of songs in a playlist
  • Playable Character: models the progression of traits of a playable character
  • Shopping Cart: models the collection of goods in a shopping cart
  • Skill Tree: models the selection of skills in a skill tree
  • Timer: models the passage of time
  • Treasure Chest: models the movement of items in a treasure chest

A quick note for my students who might be referencing this list for their portfolio project: models are typically the best fit for the constraints of the project. They offer nice flexibility for layering, and the concept of state and behavior is built-in.

Stores—State Only

The purpose of a store is simply to hold data. Stores differ from models in that they generally exhibit no behavior (i.e., there is no two-way relationship between state and methods). In my experience, stores often occur as “trackers,” which act like small databases. Alternatively, a store might act more like a constant, which I call a “record” (though, some languages call these data classes or structs).

  • Trackers
    • Accommodation Tracker: tracks data related to student accommodations, such as time modifiers
    • Budget Tracker: tracks data related to finances, such as earnings and spending
    • Calorie Tracker: tracks data related to calories, such as calories consumed and burned
    • Fantasy Football Tracker: tracks data related to fantasy football, such as player points
    • Fitness Tracker: tracks data related to exercise, such as weight, reps, and sets
    • Mood Tracker: tracks data related to mood, such as happiness and sadness
    • Poll Tracker: tracks data related to political polling, such as candidate affiliation and race
    • Sales Tracker: tracks data related to sales, such as price and customers
    • Score Tracker: tracks data related to sports scores, such as golf strokes
    • Stock Tracker: tracks data related to the stocks, such as price and volume
    • Weather Tracker: tracks data related to the weather, such as precipitation
  • Records
    • Animation Frame: holds information about a particular frame of animation, such as path to an image or pixel layout
    • Book: holds information about a particular book, such as author and contents
    • Chord: holds information about a particular musical chord, such as its name and/or the notes it contains
    • Concert Ticket: holds information about a particular event, such as date and time
    • Die: holds information about a particular die, such as its number of sides and/or probability distribution
    • Pixel: holds information about a particular pixel, such as its location and value
    • Playing Card: holds information about a particular playing card, such as its value and color
    • Student ID: holds information about a particular student, such as ID number and a path to a photo

A quick note for my students who might be referencing this list for their portfolio project: stores are a decent alternative to models as they lend themselves well to layering. For example, when students go the tracker route, I typically advise them to build out data collection in the kernel and layer data analytics on top.

Utilities—Neither State nor Behavior

The purpose of a utility is to provide some desired functionality—no state needed. In other words, utilities typically only need input to produce some output. From a naming standpoint, utilities tend to describe an action, such as conversion, calculation, or generation.

  • Color Conversion: a utility for converting between different forms of color, such as RBG and HSV
  • File Management: a utility for moving, creating, and deleting files
  • HTML Generation: a utility for creating HTML documents
  • Interest Calculation: a utility for computing interest
  • JSON Parsing: a utility for converting a JSON file into an appropriate data type
  • Markdown Generation: a utility for creating Markdown documents
  • Music Generation: a utility for creating sequences of notes
  • Path Finding: a utility for finding a path between two points
  • Power Ranking: a utility for generating a list of the top teams for a particular sport
  • String Encryption: a utility for encrypting strings
  • Test Data Generation: a utility for creating sample test inputs
  • Unit Conversion: a utility for converting between different numerical units, such as Celsius and Fahrenheit

A quick note for my students who might be referencing this list for their portfolio project: utilities are not a great choice because of their lack of state. You can make them work, but you have to sort of force them into a software component when it is easier to implement them as a series of functions. Feel free to reach out if you want some tips on how to adapt a utility into a component. I have done it before for string encryption, where the component stored the current algorithm and the user could pass in as many strings as they wanted.

Systems Ideas

When brainstorming a small project, it is tempting for a novice to shoot for the stars. There is nothing wrong with this, but it’s important for newer folks to understand that most projects are actually systems with many moving parts. The purpose of this article is to give you ideas for the individual “parts” of a broader system. It’s up to you to piece them together into a system. With that said, here are some examples of bigger projects.

  • A game of tic-tac-toe
  • A holiday countdown interface
  • A slot machine
  • An ad blocker

All of that is to say that there are definitely going to be more ideas included in this article in the future. In addition, you may still find that some ideas fit into more than one category. I think that’s fine. Clustering is a hard task. If you find a better way to group these ideas, let me know!

With that said, I’ve spent far too long on this article already. Let’s go ahead and call it here! As always, if you liked this one, there’s more where that came from:

As always, you can take your support to the next level by checking out my list of ways to grow the site. Otherwise, take care! Hope this helped.

Jeremy Grifski

Jeremy grew up in a small town where he enjoyed playing soccer and video games, practicing taekwondo, and trading Pokémon cards. Once out of the nest, he pursued a Bachelors in Computer Engineering with a minor in Game Design. After college, he spent about two years writing software for a major engineering company. Then, he earned a master's in Computer Science and Engineering. Today, he pursues a PhD in Engineering Education in order to ultimately land a teaching gig. In his spare time, Jeremy enjoys spending time with his wife, playing Overwatch and Phantasy Star Online 2, practicing trombone, watching Penguins hockey, and traveling the world.

Recent Posts