Introduction
Learning "programming" is a broad topic, and that's why it might feel overwhelming at first. Even me, that has been programming since 2020, still get overwhelmed when i try to learn something new. That's because this field is constantly evolving, and there are so many things to learn. However, there are some general steps that we can follow and develop what's called a "self-taught mindset".
How to learn?
First of all, what is more important here is not learning to program, because you can learn how to use python right now and start coding. The most important skill to develop heres i the ability to learn. Learn constantly, efficiently and effectively.
Common struggles
Imposter Syndrome
This is a common problem that many people face when they start learning programming. You feel like you're not good enough and that you're going to be exposed as a fraud. This is not true, and you should not feel that way. Everyone has to start somewhere, and you will get better with time.
The feeling of not knowing
You feel like you're not really learning? Keep in mind that learning is a process, and you will not know everything about a topic at once. You will learn by doing, and that's why it's important to practice.
There are not inmediate results
Since learning curves are exponential, you will not see the results immediately. You will feel like you're not making progress.
I will be replaced by AI
This is a common fear among programmers. You fear that one day, you will be replaced by AI. This is not true. AI is a tool, and it will not replace you. You will always be able to use it to your advantage. There are things that only humans can do. Even if AI takes over some jobs, there will be always a place for humans. However, those places will be for the ones that are better than the rest. That's why you need to be the best. Or, at least, practice a lot.

Being self-taught is not easy, but is not impossible
This is the most important skill as a programmer. EVEN if you have a programming teacher, you might feel lost, because you're not used to learn by yourself. Teachers are sure useful, but the only one that can teach you is yourself. You will have to be self-taught, and that's why it's important to develop a self-taught mindset. You will have to do a lot of research, you will have to fail and fail many times and even feel useless at some point. But that's totally worth it. If you are a good self-taught programmer, you are already ahead of 99% of computer science grads.
Something that new programmers despise is the fact that they have to learn by themselves and read a lot. I see a lot of university students saying that the professors don't explain anything. Well, that's not true. As a tutor myself, i can say that professors do explain, but students have to do research by themselves. We're no longer at a history class where we only listen what the teacher says and then we dump it in an exam and then forget. You can no longer do that. You need to be able to adapt to a constantly evolving field. We are currently living a revolution in technology (and that's why i made this website) and you need to be able to adapt to it. Don't depend on what your professor says, even if he says that the "best way to do this or that" is the one he says, that might me wrong. Always do research.
Steps to develop a self-taught mindset
1. Set a goal
This is the most important step. You need to know what you want to achieve. It can be as simple as "I want to learn python" or as complex as "I want to become a full stack developer". Remember the reason you started programming in the first place. Will it benefit your field? Will it help you to achieve your goals? Or are you doing it because you want a new hobby? All those reasons are valid, but you need to know what you want to achieve exactly. For example, if you want to become a web developer, answer yourself these questions: "Am i creative?", "Do i like to design?", "Do i like to code?" If you answer yes to all of them, you can become a front-end developer. If you don't like design, you can become a back-end developer. If you like both of them, then you can become a full stack developer.
Will it benefit your field?
Imagine that you're a biologist, and you want to learn programming to analyze your data. You will need to learn python, and you will have to learn about data structures, algorithms, and other computer science topics. This will benefit your field, and you will be able to analyze your data in a more efficient way. So, if you want to look for real applications of programming in your specific field, do some research and find out what you can do with programming.
Feeling rewarded
Another important aspect to consider is that you have to feel rewarded. You need to see the results. Maybe watching youtube tutorials over and over again will get something through your head, but that's not really a good way to learn. For example, doing projects by yourself, with no large language models, will make you feel more rewarded. You can sure use github copilot, deepseek, chatgpt, whatever, but you need to feel like you're making progress. Large language models will make your life SO easy that you will not feel like you're really learning. I recommend you to use them ONLY when you get stuck, but believe me, you can solve the problems by yourself, that's how you learn, don't fall into temptation, anon.
2. Learning path
There is NOT a specific path you can follow to become a programmer, that's a broad broad concept. That's why the first step is to know what you want to achieve. I recommend you to use this page, roadmap.sh, to get an idea of the path you need to follow. This is a good resource that i would have loved to have when i started programming. Master every single topic in the roadmap, and you will be a good programmer. Do not fall into the trap of thinking that you can learn everything at once. You will not be able to do that, and you will get overwhelmed. Go by your own pace, and do not compare yourself to others.
3. Practice
This is the most important step. You need to practice, practice, practice. Do not be afraid to fail, and do not be afraid to make mistakes. If you don't understand anything, ask google, ask youtube, ask your friends, ask your teacher, but do not give up. I always recommend a youtube course to friends, and they always drop it because it was "boring" or "too slow". Don't be one of them. There is no way programming can be fun at first, because the most you can do is like a calculator in the console. But that's not the point. The point is to learn the logic of programming, and then you can build your own stuff.
What do i practice exactly?
It really depends on what you want to learn. If you want to learn python, you can practice by doing projects that you find interesting. If you want to learn web development, you can challenge yourself by making an animation of a really cool page. There are many things to practice. The essentials would be to apply math to your code, solving leetcode problems, and do hard stuff. Like, really complex algorithms. You will not be able to advance in the roadmap if you do not know how to do those things.
Remember large language models? Ask them for challenges, tell them about your goals in programming and large language models surely will give you a project to do, an excersise, and an explanation if you get stuck.
But this project has already been created
Yes, it has already been created. But you can always improve it, you can always make it better. You can always add new features, you can always make it more efficient. You can always learn something new. Implementing by yourself a project that already exists is a great way to learn. When you finish your version of the project, you can compare it with the original one, and see what you did well, and what you did wrong. There is always field to improve.
Projects, projects, projects
So, you want to program? Well, the first step would be to learn the basics. The best way to learn a language is following a youtube tutorial along and that's how you familiarize with the language. Most begginer courses are really good, and they will guide you through every single topic you need to know. When you learn the basics, you can start to do things by yourself. Here are some projects you can do, from easy to hard.
Leetcode
Leetcode is a website that has a lot of problems to solve. It is a really good resource to learn programming, and it is really good to practice your programming skills. You can find problems for any language, and you can find problems for any topic. I recommend you to do problems every day, and you will see how your programming skills improve. This is generally for computer science and engineering students, but even if you study like quantum physics, you can still do it. They generally make use of complex data structures and algorithms, so its always a good idea to check the topics you need to know.
Easy
This is the most basic level. You will learn the basics of the language, and you will be able to do simple things.
- Calculator
- To-do list
- Rock, paper, scissors
- Numerical and mathematical problems
This is a simple calculator that can add, subtract, multiply and divide. You can use it to calculate your grades, your bills, your taxes, whatever you want. You can make a GUI for it, or a simple text-based interface.
This is a simple to-do list that you can use to organize your day. You can add, edit and delete items. You can make a GUI for it, or a simple text-based interface.
This is a simple game that you can play with your friends. you can use it to pass the time, or to practice your programming skills.
There are many numerical and mathematical problems that you can solve. Fibonacci sequence, factorials, prime numbers, and more. You can make a program to calculate the nth term of the Fibonacci sequence, or to calculate the factorial of a number. You can make a program to check if a number is prime, or to calculate the square root of a number. Always using a mathematical approach. If you speak spanish, you can check my repo about recursion. If you speak english, well, translate it to english hahahaha.
Medium
This is the next level. You will learn more about the language, and you will be able to do more complex things.
- Simple dynamic web page
- Simple game
- A chatbot
A dynamic web page is a web page that can change its content depending on the user's actions. You can make the previous projects as a web page if you want. This is for web developers obviously.
I recommend you to make games. I remember the first game i made was a simple snake game in python. It was really simple, but it was a great way to learn the basics of python. You can make it as complex as you want, but i recommend you to start with a simple one. Games are literally one of the most complex things you can make, if you want. Apply every concept you have seen, linked list, binary search, trees, graphs, etc. Apply them to your game and you will understand what i mean by "complex". Some games you can make are: Snake, Bomberman, Tic Tac Toe...
Do you like discord or telegram bots? try making your own. The advantage of making your own is that you can learn a looot of things. You can make a chatbot do anything. For example, you can make a chatbot to do image modifications with python and pillow. You can make a chatbot for literally anything. Some topics you can also learn are: web scraping, API interaction with your favorite language, a lot of networking concepts, and more. You can see my first discord bot if you want. It is really bad but it gives me nostalgia.
Hard
This is the most complex level. You will learn more about the language, and you will be able to do the most complex things. For these things, you will need a lot of research and might take weeks to make. Neural networks case is the simplest one.
- A simple Neural Network
- A compiler
- A simple operating system
You can try making your own neural network, for example, to recognize handwritten digits. This is the most common example. You can refer to this book to learn how to make your own. Remember that this is really complex, and you will need to know a lot of things before you can make one. You might need linear algebra, calculus, and other stuff.
If you REALLY are into computer science, you need to make your own compiler. This is a really complex topic, and you will need to know a lot of things before you can make one. You might need to know about lexical analysis, parsing, syntax analysis, and other stuff.
This is a really complex topic, and you will need to know a lot of things before you can make one. You might need to know about kernels, file systems, and other stuff.
Conclusion
Programming is a really complex topic, and it's really vast. The fundamentals are the same, but the applications are endless. That's why learning to learn is the most important skill. If you're a bad reader, oh well, i have bad news for you. You will need to read. A lot. You will need to read documentation, you will need to read articles, you will need to read books, and, most importantly, you will need to read code. YOUR OWN CODE. You never know how bad your own code is until you read it time later. But that's part of the learning process. You will need to read code from others also. So remember, always practice, never stop learning, and always be curious. If you're not curious, you're not learning. If you don't like it, don't do it.