Tell us what’s happening:
First, I have to say, I’m really enjoying freeCodeCamp. I’m very glad I found it.
After ‘breezing’ through most of HTML/CSS, and much of JS, I’m now slogging my way through Intermediate Algorithms.
My expectation, more a “desire”, I guess, when I started both Basic and Intermediate Algorithms, was that these sections would contain instruction on formulating/developing algorithms to solve challenges. Instead, those are more like “mastery test” sections.
Maybe that’s the intention of the material leading up to those sections, but I have to say, some of those challenges have seriously kicked my tail, left me scratching my head for hours, trying and retrying different options, using console.log (my best friend) to see what the code is doing, etc.
One or two of the “basic algo” challenges stumped me for awhile. At least 3 of the “intermediate” challenges have stumped me for HOURS at a time (refusing to “cheat” and just look at the answers).
So, KUDOS to the freeCodeCamp admins and contributors for putting together bang-up training material, AND for including challenges that really cause us (at least those of us of possibly average, or slightly below average intelligence) to have to work hard at solutions.
I’m only on Intermediate Algs 14 or 21. I have no idea how long the rest will take me, but thanks for making me REALLY think, really test multiple paths, etc.
I have not seen a consistent way to teach problem solving that consistently works for everyone, but you are correct that it is critical.
Everyone seems to develop there own process, but this is an area where people tend to do external research to see what works for them.
I would strongly recommend against looking up and copying answers. Looking at answers is great once you have a solution, but you miss out on the chance to build up to the solution, which is the true purpose of the challenges.
When get stuck, I recommend asking questions. Asking well formulated question 1) is a critical programming skill 2) often helps you get a bit less stuck 3) and lets you do as much of the solution yourself as possible.
These are great techniques to use in your problem solving and troubleshooting process.
This stuff is hard regardless of these factors. Unless you’ve actually learned about a given algorithm or similar algorithms before odds are you will be stumped trying to figure it out yourself.
I personally believe the goal isn’t so much to learn the algorithm from scratch yourself out of the gate super quick because you’re some kind of super genius that somehow already knows the material. Instead, the “slog” or “grind” you end up taking teaches you more than the original goal. I have a saying, “fail 500 times before finding the solution means learning 500 new things”.
This is learning at its finest. You can’t really memorize something you aren’t sure about, so experimenting your way to the solution will teach you a bunch of things, and you’ll learn vastly more than just building the solution itself.
It’s also worth saying that because it is so difficult, each one you finish will be extremely rewarding. Doing hard stuff is hard, but can still be satisfying.
Finally, the concept of “thinking algorithmically” could have many meanings. I think in this context it is more of a shortcut to be able to learn how to solve these sorts of problems faster. Except I’m not sure if there is a solid way to “teach” such concepts. Ultimately the lesson isn’t the challenge, it’s the journey to the solution to the challenge. You can’t teach the experience you gain from trying out different things and learning “how to wield the tools”, also-known-as learning how to use the language’s syntax to solve problems, rather than just trying to learn the syntax.