Is MDN a good place to learn Advanced JS or Codewars

Hi,

I have been trying to learn JS for last 4 months with very little success , here is what i had been doing in –

1)I purchased a course on udemy for JS , it goes deep in JS working like hoisting , scope, prototype etc

  1. I read you don’t know javascript series , again really deep in to working of JS …

3)I have gone through w3school , some books like The good parts etc what not, every day i am studying …

4)Ofcourse at FCC i practice regularly …

5)I became member at codewars , really too tough …

But my problem is when i am faced with a problem i cannot think of a good solution i do not understand what to do …

Now i came across MDN as most extensive place to learn all features of JS , it will take me a month atleast to cover it …

Should i learn at MDN or keep working at codewars …

Any advice will really help me … Thanks

MDN is useful all the time to anyone who uses JS, regardless of skill level. It’s the best JS reference available. But learning to program using it is learning a language by reading the dictionary. It’s a reference, not a manual: MDN is not there to teach you how to write good programs

8 Likes

From what you said OP, it seems that your strategy for improving your problem solving is to go away and study hard. But what you are studying isn’t problem solving itself, which is the thing you should be focusing on. I don’t know offhand of any resources to help you in this respect. You could search for some. What I find helpful myself is to draw pictures to help me visualize the problem and solution. Also, breaking down the problem into little pieces helps you to create a good idea of the process you need to follow to create your solution.

3 Likes

Knowing how JS works doesn’t necessarily translate to using it in a practical sense. There are a lot of reference books, but few books on how to program in the sense of solving general problems using computer programming. If that’s actually what you want to learn, as in how to program, not just build a specific thing:

Book-wise, JavaScript Allongé is maybe the closest thing for JS - it focusses on how to program with functions: this is key in JS. Otherwise:

None of those are taught in JavaScript - HTDP and Systematic Program Design are taught using Racket, Programming Languages uses SML, then Racket, then Ruby. Everything they teach (how to program, how to structure programs, different paradigms) is valuable, they’re all of exceptional quality, all free.

6 Likes

The problem must be fully understood before you can solve it. Successful programming requires the development of critical thinking skills. Check out the following link: Solving Problems, Breaking it down

2 Likes

So what i could do more then what i am doing right now , its a big struggle

Thanks for the wonderful references …

@amitshrivastavafcc There is an important aspect of FCC & CodeWars that hasn’t been mentioned. Once you solve some problem and are thoroughly familiar with it, spend a good bit of time studying how other people solved it. Their solutions appear in the ‘Hints’ link. Takes notes and strive to use what you learned from them.

1 Like

Yes, I have learned quite a bit by studying other people’s solutions. Also, on the FCC challenges, it has helped me to go to the help section on that challenge once I’ve solved it and see if there are any more efficient ways of doing something.

It makes sense to do challenges multiple times, each time applying new things you learned. For example:

  • first make a very low level solution using for loops
  • use higher order array methods like map/filter/reduce
  • make code more readable

Going back to challenges and trying to solve them in a more elegant way has been very helpful to me.

Another thing is to help others who know less than you do. Look at their code, find the bug and explain why it doesn’t work and how to fix it.

1 Like

This is a good thread. Thanks @amitshrivastavafcc for asking your questions. Thanks @DanCouper for your links. I’m definitely going to read JavaScript Allonge.

MDN is great resource for learning / referencing JavaScript facts. I use it on a daily basis to review the details I can’t remember. I don’t think MDN is the best place to learn how to solve problems.

If you want to learn how to solve problems you should have a clear idea of what problems you’re trying to solve. Software developers typically solve computational problems. The branch of scholarship that’s most relevant is computer science. Within computer science, in my humble opinion, the areas that are most practical to computational problem solving are flowchart diagrams, writing pseudo-code, algorithm design, and design patterns.

It’s hard to overstate how important having a good plan is when trying to solve programming problems. Flowcharts and pseudo-code are two of the most effective ways to model problems, break them down, and then model possible solutions. If you’re not diagramming problems and writing pseudo-code. I would urge you to start there.

Beyond pseudo code and diagrams, learning about algorithms and design patterns are critical to solving problems. If you learn about algorithms and their design you’re well on your way to learning how to crush problems on Codewars. Design patterns are more geared to solving problems related specifically to creating, structuring, and determining the behavior of the building blocks of an application.

Once you have a basic understanding of all four areas, I think the only way to get better at problem solving is to solve problems. Codewars, Coderbyte et al. are a good option for practicing writing algorithms. Building projects from scratch is a way to practice both writing algorithms and implementing design patterns.

With regard to algorithms I would reccommend checking out this free self-paced course offered by Stanford. I have not taken it yet, but it’s on my 2018 to do list.

For design patterns I’ve found Addy Osmani’s book Learning JavaScript Design Patterns book very useful. It’s highly accessible IF you have a firm grasp of JS fundamentals.

@GreenApple76’s link Solving Problems Breaking It Down is also highly recommended. I actually used Job Sonmez’s process to solve interview problems. The only thing Jon didn’t emphasize was diagramming the problem. I think diagrams are an excellent tool for thinking through problems, especially control flow problems.

There is one other topic that is important to computational problem solving: Discrete Math. Anybody that’s serious about getting good at solving computational problems, at some point should build a solid foundation in Discrete math. I’m mentioning it last because it’s arguably not necessary for holding a software development job. That said, it’s almost certainly one of the topics that will make you monumentally better at solving computational problems if you can learn how to practically apply it.

2 Likes

Although I agree that MDN is more of a reference resource, I’d like to point out that MDN does have tutorials and even a learning area to “learn web development” where they aim “not to take you from ‘beginner’ to ‘expert’ but to take you from ‘beginner’ to ‘comfortable’”.

@erictleung True. But I suspect most people would find MDN tutorials dry and boring as hell. I know I do. For advanced JS and problem solving, I think there are way better options than MDN, and many of them are free too.

1 Like

Algorithm challenges are fun to do and definitely build your skills. But the coding problems are often pretty different from what you face building an app. For example, you never (in my experience) have to do async code in an algorithm challenge, but when building an app, dealing with callbacks or promises is one of the biggest challenges.

The only way to really learn Javascript is to see it in realistic application and use it in many different situations. If you want to learn promises, build an app with MongoDB. If you want to get practice handling objects and arrays, make an app with a third party API.

At a more basic level, I think it is essential to get into the habit of playing with the language. (A great tool for this is https://repl.it/). Try and figure the language out for yourself by experimenting and logging out the results. What you discover for yourself in this way will really stick.

2 Likes

I read through most of the replies and my simple answer is, TRY TO GET A JOB, not a remote job, but a physical one to gain experience and mentor-ship.