For starters if you flew through the Javascript section, I’d question how much your actually learning.
Learning programming is not an easy task. Learning HTML/CSS is much easier, simply because they are standards and just require learning syntax. Javascript has syntax, and requires you to program it. It’s like comparing knowing vocab words (syntax) and being able to write eloquent poems, they are just on totally different levels.
I’d like you to ask yourself why does it take you a while to finish challenges?.
- Is it because you don’t know where to begin?
- Is it because your fighting bugs?
- Is it because you feel like you have no idea what your doing?
- Is it because your typing slow? (I doubt it hehe)
It might be a combination of the first three, so lets address them.
Is it because you don’t know where to begin?
Generally if you feel lost on approaching a problem, you should lean on what you do know about the problem. Taking the Testing Object for Properties
problem as an example, the problem relies upon the following:
- Knowing how conditionals work in Javascript (if/else statements, ternaries, etc)
- Knowing how functions return values
So you should know the above two concepts, and using the example provided, you should be able to understand how to use the hasOwnProperty
api. If not, looking it up on mdn. Using external resources is very convenient, easy and recommended.
Now if you don’t know the above concepts you should stop, and back up and go learn those concepts again. Programming builds upon itself, so if your foundation is lacking, you will have a tougher and tougher time grasping more difficult concepts. This makes scaling your learning not sustainable with a weak foundation.
Back-track and verify you understand supporting concepts, if you have a tough time on X that uses Y, go learn Y and then repeat doing X. Repetition is required for learning, don’t think finishing a challenge means you know something.
Is it because your fighting bugs?
If your code isn’t behaving as you expect, the first question you should ask yourself is “how does it currently work?”. One of the most important things to know about programming is understanding the problem is more important than solving it.
The reason for this is there are endless resources on how to do X, but only limited resources on why something is doing Y. Plus, knowing why something is working a certain way can be a door to learning another approach for something else.
Learning thru struggling is more important than solving the problem when your starting out. Embrace the struggle of dealing with bugs, and finding the solution. This is what experience is made of. Learning to soak up the why something doesn’t work is more important than learning how to make it work. Obviously knowing how to fix it is good too, but knowing what’s actually wrong is always more valuable.
Is it because you feel like you have no idea what your doing?
If I asked you how much do you not know, you may answer with a few things. Now if I asked you a question on a topic you have no clue about, and never heard of, the list of things you don’t know grows a little larger. The reason for this is you know what you don’t know, but you don’t know what you don’t know (crazy hu?).
What I mean by this is you can only try to learn things you know about, and know you don’t know (like some concepts in Javascript), but there are things you may never have heard about, or experienced. I bring this up because programming and web development is a large field, requires a lot of knowledge and you can’t be an expert in everything. But if you know you don’t know something, you can always go out and focus on learning that topic.
So if your just starting out programming Javascript and feeling like “I don’t know what I’m doing”, you need to go out and find what you don’t know, only then can you try to learn it.
So now you may ask “So how can I find out what I don’t know”. It’s simple, you have a goal (become a web developer) and try to do what you want to do for that goal. (build web apps)
Odds are you will hit a wall pretty quick for one reason or another (programming JS). At this point you have an arrow pointing at what you don’t understand.
Taking this further, you can dig down into specific topics that you should focus on. (Testing Objects for Properties) At this point you have a very clear focus on what your missing and since you already mentioned a number of extra resources, you have all the places to get your answers.
You will need to put in time and grit to learn JS, but I believe anyone can do it. The only way you fail is you give up. Keep grinding against the problems, understand them, look for answers, and build up your skills. If you don’t understand the solutions dig into why. Stay curious and don’t be afraid of failure. The struggle is where you learn, if you skipped over problems before “cuse they are too hard”, then go back and re-do them until they become simple. If you have problems or bugs, dig into them until you understand why the occur.
I believe in learning through failure. Spend 5 hours trying 50 different ways, only to get it right the 51st time means you learned 50 new things. If you just got plain lucky the first time, you missing out on all that extra experience when failing. Its fine to look up solutions, but be sure to back-track and re-attempt the problem later from scratch to re-enforce what you learned. Repetition is key in learning almost anything, no one figured everything out from scratch haha.
Keep building things, stay curious and keep learning, good luck
PS. I consider myself a good problem solver in general because I’m competitive. I believe a problem only beats me because I give up. Being able to take a problem, break it down, under stand it, and over come it is extremely rewarding but requires patience, time and grit. Keep up the process, and enjoy it as much as you can, since there will always be a day where you just plainly get stuck haha!