Beginners - stop limiting your projects to things that are "useful"

I posted this recently on Reddit, but I felt it was important enough to post again here.

One of the most common themes I see with beginners or people learning a new language is the question “What should I build?”

The problem isn’t the question itself, but that so many people want to build something that is both:

  1. Useful to everyone (eg may be a popular open source project), and
  2. Simple enough that they could build it as their 1st, 2nd, or even 5th project.

My advice is to stop doing this. Forget about (1). Focus exclusively on (2) - finding projects that you can actually complete in a reasonable timeline.

You are much more likely to finally build that awesome open source application, or whatever else, if you accept that your first 5-10 projects aren’t likely going to be useful to anyone. They should just be something you can learn from. When you have finally learned what you are doing you can then move on to the useful applications.

The reasoning behind this is pretty simple - anything a beginner can build in a week is likely something an expert can write in a day (if that). That is just how programming works; as you get better you can do a lot more in less time because you spend less time debugging and learning and more time doing.

That doesn’t mean that this is true for everyone. There are always exceptions to this rule, but they are just that - exceptions. And the authors are likely exaggerating if they claim it was their “first” application. It was likely their 10th, but they just didn’t consider the first 9 applications “real applications”.

My first 10-20 projects were all junk. I don’t have the source code anymore, but if I did both you and I would laugh at how useless they were in their final form. But where they were useful is in teaching me how to do new things.

TL;DR - Build things that will teach you and push you to learn more, but keep the scope small enough that you will actually complete the project.

Learn Web Development with Go!

Sign up for my mailing list and I'll send you a FREE sample from my course - Web Development with Go. The sample includes three chapters from the book, and over 2.5 hours of screencasts.

You will also receive notifications when I release new articles, along with other freebies that I only share with my mailing list.

Avatar of Jon Calhoun
Written by
Jon Calhoun

Jon Calhoun is a full stack web developer who also teaches about Go, web development, algorithms, and anything programming related. He also consults for other companies who have development needs. (If you need some development work done, get in touch!)

Jon is a co-founder of EasyPost, a shipping API that many fortune 500 companies use to power their shipping infrastructure, and prior to founding EasyPost he worked at google as a software engineer.

Related articles

Spread the word

Did you find this page helpful? Let others know about it!

Vote on Hacker News

Sharing helps me continue to create both free and premium Go resources.

Want to discuss the article?

See something that is wrong, think this article could be improved, or just want to say thanks? I'd love to hear what you have to say!

You can reach me via email or via twitter.

Recent Articles All Articles Mini-Series Tags About Me Go Courses

©2018 Jonathan Calhoun. All rights reserved.