Why Learning First Programming Language is Extremely Hard
Tags: problemsolving, beginners, programming, codenewbie
Published: 2020-06-12 17:42:21

Programming is not easy.

When I begin to learn it for the first time, I was hit by unknown words, incomprehensible concepts, and countless ways of executing the program. As I've been learning over a year now, I have noticed that I'm actually learning not one, not two, but *three things at the same time* and they are:

1. Programming Concepts
2. Programming Language
3. Problem-Solving

Let's go over each of them, shall we?

### 1. Programming Concepts

The first barrier that all beginners go through is learning the fundamental concepts of programming. These concepts include variables, functions, conditional statements, arrays, objects, etc. They are found in almost every programming languages that exist in the world. Just trying to wrap these concepts around your head is pretty daunting.

Programming is a new field of study. We have touched English (or any languages), Maths, Chemistry, Biology, Physics, Social Studies, and the others throughout our school years. Few individuals are lucky enough to get exposed programming at an early age, while the majority of the people are introduced in the university or much later in their adult lives.

### 2. Programming Language

The second barrier is the programming language itself. While the concepts of programming apply in all languages, how they are implemented is unique. The syntax is all different. Some programming language, like Python, JavaScript, Ruby have shorter lines of code to do basic tasks while others like C, C++, Java have multiple lines of code just to perform a simple operation.

And let's not forgot these programming languages have their own quirks that can make experienced developers confused as well. Some infamous examples of JavaScript include the differences between var, let, and const variables and the double equals and triple equals "==" vs. "===".

### 3. Problem-Solving
The third barrier and probably the toughest one of all is problem-solving. Problem-solving is to put simply, the ability to solve problems. Some people naturally have a good sense of solving problems, while others have to be taught how to approach the problems. 

You may possibly possess these skills if you enrolled in a mathematics or computer science major in a university and liked to solve puzzles as your hobby. For the rest of us, though; we are going to suffer, especially to those who are self-taught developers.

Why do we struggle anyway? The simple answer is nobody has taught you how to think programmatically at the school. In the English class (or any languages), you learn how to think in words and use it to convey your messages to another person. In maths class, you learn how to think in numbers and use it to calculate the amount, distance, or size of the objects.

### How to overcome this problem?

Before we discuss the solutions, I want to take a moment to say that these solutions are based on my own experience and there is no guarantee that it will work out for you. You may need to do a little more researches or experiments to find out which solution works best for you. My own solution is just one of the options.

Now that we are out of the way, let's go ahead and explore some possible antidotes to the problem.

### 1. Find good analogies and metaphors to understand programming concepts

A lot of programming concepts are abstractions which means you won't understand the concepts from the definitions alone. It's full of jargon. One way to overcome this issue is to use metaphors and analogies which is to use the knowledge and concepts that you understand very well and find the similarities to learn hard subjects which in our case is programming.

Let me give you an example.

You know what a lamp is, right? Alright, so if you want to switch on the lamp, you'll need to plug the lamp wire into the wall socket. Without connecting the wire from the wall socket to the lamp, it won't work.

Now, let's apply this metaphor to programming. You have a green button and you want to turn it into red when you click it. To do that, you'll need a function. A function acts as a wire between the button like a lamp and the codes inside a function scope like a wall socket. If you didn't do that, it won't work.

Another thing to keep in mind is you don't really have to master the concepts completely. If you understand the main points of the concept, then this is good enough.

### 2. Pick one programming language and focus all attention into it

To actually learn how to write codes, you have to pick one programming language since all languages basically follow the fundamental programming concepts anyway. If you are still not sure which one to choose, try different programming languages for a few days or weeks and see which one you liked the most. After you found the language you enjoyed, make a commitment to learning only one language. 

Alternatively, think about what type of programming jobs you want to be. Do you want to be a web developer, mobile app developer, or game developer? Then a choose a programming language which is needed for the job.

Learn all the basics of that programming language as much as you can, solve some coding challenges, and build projects. It's going to be tough, but do not stop learning when it gets too hard or switch to another language. When you are struggling, then you are actively learning.

The good news is once you've learned the language, it'll become a bit easier to learn another language because you're already familiar with the programming concepts. It's a matter of getting to know the syntax and rules of the language and lots of practice.

### 3. Learn how to approach the problem and break them into small tasks

There are so many ways to think and solve programming problems. Here is the 5 steps what I believe is a common method that almost everyone use and not just programmers. It goes something like that:

1. **Understand the problem** - Before you start thinking of a solution or even lay a finger on a keyboard, first try to understand what you are dealing with and read the questions or error messages multiple times until you understand the problem at hand.
2. **Break the problem into smaller chunks** - When you understand the problem, break them into small chunks so that you can think these small chunks in isolation. By doing this, you'll be able to tackle the problem, no matter how big or complex the problem is.
3. **Solve each chunk one at the time** - This is where you can start to brainstorm the solution for the problem and write the codes for these small chunks.
4. **Combine these chunks into working solution** - After you finish solving the chunks, slowly reconnect each chunk into one codebase. You may have to adjust something to make the whole code work.
5. **Ask, ask, and ask more** - Nothing and I mean nothing is more important than asking questions to yourself or others. Are you understanding the problem correctly? Do you need clarifications or hints to find the solution? Is there one annoying bug that you're unable to solve after a dozen attempts and need someone to take a look at codes? There's no such as a thing a stupid question, so don't be afraid to ask when you need help.

This is no right way or wrong way of learning which approach is the best. But what I can tell you is that you have to put a lot of practice since this is where the real learning happens. You can either use the steps I provided above or come up with your own methods. It doesn't matter how you did it as long as you can solve the problem.
 
## Conclusion

Learning new things can be challenging especially when you are learning difficult skills like programming. Which is why it is important to understand that it is 100% okay to be feel lost. Take your time. Learn slowly and patiently. Practice consistently and one day, you'll wake up and realized you know how to code better than before. And that day will come when you never give up.

And remember, you are capable of becoming a programmer no matter where you come from and your background education. You absolutely got this!

Thank you for reading and happy coding!

*Photo by Tim Gouw on Unsplash*