🕵️‍♂️ The Art of Self-Learning: How to Teach Yourself Any Programming Concept 🤓
Tags: beginners, programming, tutorial, productivity
Published: 2024-04-16 13:00:00

## Introduction to Self-Learning

Firstly, let me paint you the scene. You’ve heard on the news or through a friend that the "job market for programmers is AWESOME".

You find yourself some random YouTube video or weird paid course that can teach you a few things and you think *AHA! That’s what was missing!*

It takes just a few days (if not hours) for you to quickly realize that **programming is hard** and following some random course you found online mostly just makes you good at copying things, so you end up just staring at that giant blank screen when trying to think for yourself later.

<img width="100%" style="width:100%" src="https://media0.giphy.com/media/v1.Y2lkPTc5MGI3NjExa2p6ZWttZjcwdmlucjI5bTgwYjk5c3FtZHAxemxnNDhjbW5rdTJkYyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/Dh5q0sShxgp13DwrvG/giphy.gif">


### First of all, how can you learn something?

Let’s hear from the famous programmer [GeoHotz](https://wikipedia.org/wiki/George_Hotz):

{% youtube 8RtGlWmXGhA %}

Learning is a complex process, and it can be different for each person. For me, **the easiest way to learn is to find something that motivates you to do it.** 

Since learning is a hard and sometimes tedious process having a clear objective can bring you far and can make you feel that you accomplished something greater or, as GeoHotz said: 

> *you are never going to learn programming by watching a video called “Learn Programming”*.

For me and other programmers I know, we love to build side projects and, as this approach of learning things by doing projects (called [Project Based Learning](https://www.bu.edu/ctl/ctl_resource/project-based-learning-teaching-guide/) in the academy) becomes increasingly popular due to its efficacy, portfolios, random ideas that come to mind, and even things that can help us with our hobbies become great examples of fonts of inspiration for you to learn something.

So go on! First, choose the **inspiration/project** for your learning. If you’re a complete beginner, start with something **small**. Consider, for example, a program that can show your name on the screen, along with a chosen phrase! 

Still asking yourself how to classify a good project idea? Since this is especially hard for beginners, we’ll help you answer that question in the section below.

### What are good ideas?

![Define the idea](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c3zq2vlihra2yl5utqdr.png)

These are the things I look for to check if it’s a good idea for now:

- **Practicality**: The idea should be something that solves a practical problem/something that interests you. This will provide you with the motivation to see the project through to the end.
- **Complexity**: The complexity of the idea should match your current skill level. If you're a beginner, start with simple projects and gradually tackle more complex ones as your skills improve.
- **Interest**: Choose a project that genuinely interests you. This will make the learning process more enjoyable and less of a chore.

Some good ideas for beginners could be creating a basic calculator, a simple blog, or an interactive to-do list. For more advanced learners, consider building a weather app that fetches data from an API, a real-time application, or even a simple game like Tic Tac Toe or Snake.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sr9blqii3utyi5u7pjcw.png)

In fact, if you are interested in the real-time subject, we’ve written a [whole step-by-step tutorial](https://wasp-lang.dev/blog/2023/08/09/build-real-time-voting-app-websockets-react-typescript) that shows you how to build your real-time voting app with WebSockets. It will teach you how to vote on a topic with friends in real time while building a completely full-stack React + NodeJS web app — a great portfolio project!

Tired of the same old ideas or completely lost trying to find one? Check this [great repo](https://github.com/practical-tutorials/project-based-learning) containing a bunch of different links to other lists of ideas!

### Choosing the Right Tools for the Job/Your Learning Subject

![Choose your learning subject](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sm0oftk9uwxap862fhve.png)

A good second step is choosing the right language/tool for your project.

If you’re a complete beginner: **EVERYTHING WORKS,** since the main concepts of programming are the same across most programming languages. Don’t worry about any opinions on a "better language", "Better OS" or anything like that, remember, we’re trying to create something here. 

No idea still? Just use [JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript)! It’s simple, has a ton of [tutorials](https://dev.to/llxd/javascript-cheatsheet-and-snippets-for-beginners-hd6), and can make basically everything. :)

If you already have some sort of foundation in programming, use AI and some great abstractions/frameworks to get things done even faster. For example, instead of creating everything from the ground up (and probably suffering on little things along the way) you can skip repeating yourself a ton of times by using [Wasp](https://wasp-lang.dev/), which is a great React/Node full-stack framework that takes care of managing the boilerplate side of programming for you. 🤯

In addition, [their CLI](https://wasp-lang.dev/docs/quick-start) can help you start faster too. By running `wasp new`, you can get yourself a custom template that fits your needs. For example, if you’re building up a new SaaS, you’ll probably find a fit with [OpenSaaS](https://opensaas.sh/) or if you’re creating a more specific solution, an [AI code generator](https://usemage.ai/) can help you start quickly if nothing else fits.

![Wasp CLI](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/emke5b2bu330atzxhoyp.png)

---

By the way, if you haven’t already, give our repo some love! Open-source projects like [Wasp](https://wasp-lang.dev) can save us a ton of time and allow us to focus on the fun parts of building web apps! 

By [starring the repo on GitHub](https://www.github.com/wasp-lang/wasp) you're helping us continue to make web dev faster and easier for all devs!

<img width="100%" style="width:100%" src="https://media.giphy.com/media/M9NbzZjAcxq9jS9LZJ/giphy.gif?cid=790b76115lfwr3wfm942vpkbuxdsr86riku5a1md0pkjum5c&ep=v1_gifs_search&rid=giphy.gif&ct=g">

{% cta https://www.github.com/wasp-lang/wasp %} ⭐️ Give Wasp a Star! ⭐️  {% endcta %}

---

### Try to do it (and make some mistakes)

![Hands-on practice](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5b89wx2d0n4xe3u9j3cn.png)

Now, it’s time to get our hands dirty! 

A fundamental skill for you to have as a programmer is **searching**. There’s content everywhere, we just have to find it. Start by breaking the task at hand into smaller problems:

Let’s use the example of *a simple app that allows the user to input their name so that it appears on the screen/client:*

- How can I show my name on Python?
- How can I store text in my code?

Every question you search and find content for will generate a few more questions that hopefully are more precise towards solving the problem. You’ll probably see for yourself that a task as simple as “Showing a user’s name on the screen” can go into any depth of complexity.

How do we input and save data on the app? How do we display that data correctly? These are questions that you'll attempt to answer, and likely, **fail** at times. As engineers, we must determine if these questions are relevant to the solutions we're developing, in addition to addressing any uncertainties the project may raise. 

![Iteration cycles](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r6xpmwooej1ntp0eg5qk.png)

It's important to find a balance between seeking answers and recognizing when a topic is irrelevant. This process contributes to our professional growth. Oh, and let’s not forget our friend AI, like [Chat-GPT](https://chat.openai.com/chat), which can explain and even code for us.

Remember, part of coding, as with engineering in general, involves trial and error. We try, debug, and search for solutions every day. The more we experiment, the closer we get to the desired solution. Adapting to this process quickly is a huge step in the right direction for every engineer/programmer.

But, be warned, if you’re a complete beginner, try to search things by yourself first. AI is great and can help you a ton, but it can be imprecise, and only learning by yourself will give you the ability to spot the imperfections.

### Reflect on Your Progress

![A mountain with path to success](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/93hnhsi5zjgnbdyddtnn.png)

It's important to regularly reflect on what you have learned so far. This could be as simple as writing a summary of the new concepts you've learned at the end of each day, or even creating a blog post or tutorial about it, or just a simple tweet. This will not only reinforce your understanding but also serve as a reference for future use (you can learn more about the concept of **building in public** [here](https://buildinpublic.xyz/what-is-build-in-public), it’s great for companies and it can be great for your journey too!).

Reflecting on your progress also gives you the chance to assess your strengths and weaknesses, allowing you to focus on areas that need improvement. It's like a personal feedback loop, giving you a better understanding of how you learn and how you can become more efficient at it. 

This is also a great time to self-promote and show others via portfolio, for example, what and how you have done your creation!

## Challenges in Self-Learning Programming

Self-learning programming has its challenges. It requires discipline, patience, and the ability to troubleshoot and learn from mistakes. Additionally, without a structured curriculum, it's easy to feel overwhelmed or lost.

Yet, it's equally important to remember that self-learning does not mean learning in isolation. Engage with other learners, share your code, and seek feedback (you can check [Wasp’s Discord](https://discord.com/invite/rzdnErX) or other communities to start engaging, for example). This can immensely help in enhancing your understanding and improving your coding skills.

For the curriculum part, you also don’t have to search everything blindly. You can use a [developer roadmap](https://roadmap.sh/) to know what are the things you should be learning at each step of the way!

## Benefits of Self-Learning Programming

<img width="100%" style="width:100%" src="https://media2.giphy.com/media/v1.Y2lkPTc5MGI3NjExbXU1ZGUyM3Q4enBucGYyeXk1aXFpMmF2YjY3OWdjZnF2cWRvdjgzdSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/avrlp4ymZdpuwSVI7P/giphy.gif">

Despite the challenges, there are numerous benefits to self-learning programming. It allows for flexibility, fosters creativity, and can be incredibly rewarding. But nothing it’s as amazing as the sensation that you can do anything, or, in other words, the **confidence you’ll gain**.

When you finally create something that you enjoyed creating and realize how much you’ve learned in the process, it’s great, but, the sensation that, given enough time you can learn and create any idea that comes to mind, it’s even greater. Also, you can go at your own pace and focus on the areas that interest you most. Build projects that excite you and share your progress with others. Keep learning, keep coding, and most importantly, enjoy the journey.

## Conclusion

![All images from the post combined into a cycle](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/urn4d7pwer1kvmzqen9x.png)

In conclusion, self-learning programming is an empowering journey that can unlock countless opportunities. It may be challenging at times, but the possibilities you gain are endless.

Oh, and just in case you haven’t starred [Wasp’s repository](https://www.github.com/wasp-lang/wasp), I would recommend doing so! It’s a great full-stack framework for anyone looking to get projects done even faster and easier!

{% cta https://www.github.com/wasp-lang/wasp %} ⭐️ Give Wasp a star! ⭐️  {% endcta %}

And lastly, the keys to a successful self-learning journey are consistency, patience, and a healthy dose of curiosity. Embrace challenges as opportunities to grow and don't be afraid to ask for help. You are not alone in this journey, and every programmer, no matter how experienced, started where you are now.