Build Your First Coding Project and Avoid Tutorial Hell
Tags: tutorial, codenewbie, learning, softwareengineering
Published: 2023-07-05 13:47:00

While "real" hell may or may not exist (no need to get into religious beliefs here), tutorial hell is *very* real.

My definition of tutorial hell goes something like this:

> Tutorial hell is where you write code that others are explaining to you how to write, but you don't understand how to write it yourself when given a blank slate.

At some point, it's time to take the training wheels off and build something *on your own*.

## When is it time to build your own project?

At [Boot.dev](https://boot.dev), students write their first non-tutorial project after completing the following modules:

* Learn Python (course)
* Learn OOP (course)
* Build a Python CLI (project)
* Learn Algorithms (course)
* Learn Data Structures (course)
* Build a Maze Solver (project)
* **Personal Project 1** (when they build their first fully custom project) 

Now, keep in mind that Boot.dev students are hands-on-keyboard 100% of the time. I'm not saying you should watch 40 hours of video before building anything, but I *am* saying you should have a solid understanding of coding fundamentals before building your *own idea*. You should learn those fundamentals by *writing code*, but it's best if the projects and challenges you're working on are *guided* so that you can focus more on learning the *concepts* and less on figuring out what to build.

## What's the goal of your first project?

Your goal here is *not* to build something that makes money, or even to build something that will make its way onto your resume.

The goal of this *first* project is simply to get you used to the process of building something from scratch. You just need to get some practice breaking down a project into smaller pieces. You need to experience that first breath of fresh air as you emerge from the depths of tutorial hell for the first time.

## What are some good requirements for your first project?

* Try to spend 20-40 hours on this project.
* Use a programming language you're already familiar with.
* Commit your code to Git often, and push it up to Github.
* Create a [README.md file](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-readmes#about-readmes) for your project. It should explain to readers:
  * What the project is, and what it does
  * How to clone and run it
* It's okay for (I'd even encourage) you to use third-party libraries! That said, make sure that some of the code that *you* write is doing something interesting. You don't want a razor-thin wrapper around a third-party library to be the only thing you've written.

## But what should I build?

The whole point of a personal project is that it's *personal*. The idea needs to be *yours*. Even if the project you build is *simple* for now, at least it's *yours*.

**Build something that you find interesting.**

This probably isn't a project that will make its way onto your portfolio or resume, but it's still good to get into the habit of building things that are *interesting* and *useful*. Interesting and useful projects have many benefits:

* They're more fun to work on
* They have more interesting and difficult problems to solve
* You (or someone else) might actually use them
* They're more likely to grab the attention of other people
* Attention from other people can lead to career opportunities

Use a programming language that you're already at least somewhat familiar with. Assuming you haven't been writing a ton of code outside of Boot.dev, your project should probably be a Python program that runs on the command line. That's fine!

I want to provide a few ideas to get your creative juices flowing, but *please* don't choose a project from this list without at least putting your own spin on it

* A text-based adventure game in the terminal
* A CLI tool to detect the strength of a password, or to validate it
* Tic-Tac-Toe in a tkinter GUI
* A tool that creates ASCII art from an image
* A command line tool to view Reddit feeds in the terminal
* A command line tool that parses a CSV file of pokemon data and lets you search for pokemon by name, type, etc.

### But, but, but... I don't know how to build "X"!

Your job as a developer is to *constantly* build stuff that you've never built before. Don't shy away from an idea because you're not sure where to start. Google it. Ask ChatGPT. Ask the Discord community. You might need to put in an hour of research before starting to decide if your idea is feasible within a 40-hour time frame, but that's fine!

Assuming that you'll be doing something you've never done before! You have some fundamentals under your belt. Now it's time to piece it all together and research as you go.

## You'll need help

**You're going to get stuck.** If you don't get stuck, you probably chose an idea that's way too easy.

The trick is developing a skillset for getting *unstuck*. This is a skill that will serve you well (and is absolutely necessary) in your career as a developer.

### Get used to Googling

Start with Google. Do some research on your idea. See what others have done when building similar projects. See if there are any libraries you can install to make your life easier.

### Use ChatGPT

Talking through your issues with ChatGPT ([rubber duck](https://en.wikipedia.org/wiki/Rubber_duck_debugging) debugging) can be a great way to get unstuck.

Don't have ChatGPT write your code for you! You won't learn that way, and you'll be dreadfully slow if you get stuck in that habit. Instead, use ChatGPT to help you think through your problems, and ask it to try to find bugs in your code or explain code snippets you don't understand.

*Keep in mind that ChatGPT can be confidently wrong, so don't take its word as law.* Use it to get back on track, but verify the information it feeds you with other sources.

### Use Discord

Ask questions in the [Boot.dev Discord server](https://boot.dev/community), especially if you're a current student (but you're welcome either way)! As with all question-asking, provide as much context as you can so that when your fellow students and mentors help they can efficiently provide you with the information you need.

## Publish and share

Get your project out into the world! Again, the purpose of your *first-ever* personal coding project probably shouldn't be to build something amazing for your resume. That said, I still think you should put enough love into it that you're not ashamed to make it public on your [GitHub profile](https://blog.boot.dev/jobs/build-github-profile/) and share it with other devs you know. Get some feedback, ask for code reviews, and you can always iterate on it later and improve it as your skills improve.