Hello everyone, it's okay, I finally decided to write a post...
I'm a bit anxious because usually I still think I have nothing interesting to say. But I'm forced to admit that some of the people I work with on a daily basis are happy to hear my adventures.( So i come from France excuse my English)
So I'm going to talk subjectively here about certain subjects.
To begin with, we'll talk about learning.
Learning something new can be exciting, but it can also be difficult. We expected that we would spend some time each day or each week learning something about a specific topic. We all aspire to some mastery of the subject we choose. If you're like me, you'll feel frustrated when your study time doesn't allow you to learn as much as the day before, but that's natural and it's part of the process. Learning is not linear.
Some things we learn simply by doing them over and over again. I'd be willing to bet you can add 2 and 3 in your head without even thinking about it. But why is that? It's because you've done it so much in your life that you don't even have to think about it. That's kind of the way you have to code. If you go on long enough, through repetition, you'll begin to be able to do things easily that you've had to make a concerted effort to do before. If you don't, you probably won't be able to pinpoint the exact time when it made sense to you. One way or another, over the course of rehearsals, it does.
On the other hand, some ideas are more abstract. There will probably be a time in your learning when you notice that things will become much more difficult. These situations tend to occur when concepts come into play. You've learned the basics, but now you have to put them together to design a solution to a problem. In my experience, it's a bit like standing at the bottom of a cliff. This is where I felt the most frustration in my learning process.
But there is good news. It can be overcome, and you can climb that cliff! I have personally experienced situations where I simply couldn't grasp a concept. I may have heard twenty explanations and seen twenty examples on the same subject. For some unknown reason, perhaps it is the twenty-first explanation and the twenty-first example that enlightens me. In most cases, there is nothing very different between this example and those I have already seen. I have sat in my office and said, "Oh, when it finally hits me and the concept crystallizes like never before. The good thing about those moments is that once you understand the idea, it's hard to forget it.
When you understand a concept, your learning is not so much a curve as a vertical jump.
Humans are not born believing that they can never get smarter. This is something we learn in our lifetime, and it is something we should all unlearn. If you've ever seen a child tackle a puzzle, you'll have an idea of what I mean. A child will get bored with an easy problem, but will deal with a difficult one. On the other hand, an adult is likely to raise his or her hands in frustration and walk away from the problem. The instinct we are born with is that we can get the solution with enough time, effort and resources.
Alfred Binet, the inventor of the first practical IQ test, believed that intelligence was changeable. In his book, we can find this quote: "Some modern philosophers assert that the intelligence of an individual is a fixed quantity, a quantity that cannot be increased. We must protest and react against this brutal pessimism... With practice, training, and above all method, we can increase our attention, memory, judgment and literally become more intelligent than before."
You may be working on a piece of code or an idea that you haven't fully grasped yet. You might be thinking to yourself, "I'm not smart enough to do this". I always think that when I'm stuck. I take comfort in knowing that my inability to solve the problem is probably not permanent. It's something that can change with time, effort and resources.
People have repeatedly asked me what I think are the most important things to remember when learning to program. My answer: practically nothing. Anything that might be important enough to be memorized will naturally occur by repetition, as mentioned above. If you don't use a particular thing in your programs often enough to learn it by repetition, it's not worth the effort to memorize it either.
Coming back to my mathematical example, you have probably memorized 2 + 3. I'm assuming you didn't memorize 29,083,983 + 3,497,267. And why is that? It's because you get the idea behind the addition. You know how addition works as a concept, so you can use it on any number you are given. This is an example of wasted memorization.
Programmers, in general, do not rely on memorizing every construction, every parameter, every object, method and class. Instead, we use our resources combined with the concepts we have learned to produce the result. That's why documentation is so valuable, and you'll hear programmers talk about it a lot. I bet very few people memorize all the recipes in a cookbook. If we want to cook something else, we read the cookbook. It's the same idea. If a programmer had to memorize everything in one language, we wouldn't have programmers.
Don't stop learning. Even if you've been stuck on a problem or project for weeks, don't stop learning. You may need to go back and review some of your basics. You may need another source to change your pace. Try reading an explanation on Medium or search for something on YouTube. Maybe even do some generic Googling. You might even try to learn something else about the language/platform/IDE and get back to where you were stuck. Keep pushing against that wall. Eventually, you'll have a breakthrough, and it will probably be something you won't easily forget. It's worth the time and effort, even if you don't get immediate results.
Programming can be hard to learn, but it can also be incredibly fun and more creative than non-programmers understand. If you are interested and dedicated enough, you will see progress. The next step may be your breaking point, but you'll never know if you don't take that step.