I'm learning JS. So are some of my acquaintances.
What I'm finding is that some of the biggest barriers to entry for us aren't the actual syntax of the code, or the underlying rationale/logic of it, but simply setting ourselves up to even be able to independently mess about with JS or write it.
There's a ton of shit that no one explains to you unless you go to a class or know how to ask someone about it. Many of the "beginner" tutorials won't actually tell you what you need to do to set up your environment, how to create a file, or what kind of thing you need to run it. Codecademy is neat, but what happens if I want to run something outside of its exercises? What if I want to mess around in JS and don't have an internet connection?
I'm lucky. I've done a couple of basic CLI and linux tutorials, so I have some sense of what a package manager is and how it works, as well as how to set up a VM on a Windows machine so that I can mess around with a JS console via node, or run files through it. However, most people don't even know how to use a CLI, or where to store stuff, or how to access it.
If we're talking about accessibility and about enabling other people to learn, we need to think about what it takes to even be able to tackle a problem. These are not issues of being unable or unwilling to do the type of logical problem-solving that comes with writing code. They're issues of knowing, of being provided dependencies without which your shit doesn't work.
A problem I'm working through now involves a separate js file that's provided to me. However, nowhere in the book has there been any mention of how to import or access that file. I'm excited to work out the logistics of how to iterate through objects stored in it, and how to loop through the arrays nested inside of them, but it feels like I'm being walled out by something that I'm expected to already understand- but, y'know, why would I be reading this book if I already understood everything? Am I messing up the syntax of the filestructure? Did I copy/paste something incorrectly? How is this thing interfacing with my OS? I don't even know how to start looking for the answers to these very specific questions, and, if I find them, I suspect that the answers will also be built atop a certain type of foundation of knowledge that I lack.
This means that resolving a gap in my knowledge never is a matter of just googling the answer to a single question; rather, it's a branching web of solutions that are all contingent on multiple things that I don't know. What seems like a simple problem to solve ends up being a whole world of references and technical language that I can't always effectively access.
While this is likely a good thing in the long run, it also destroys momentum and can make a problem that was supposed to take 10 minutes take 10 hours of digging through technical jargon.
I get that things are done this way for a reason- once I do understand some of the paradigms within which this documentation is written, it becomes very fast to do this research, and it also makes it really easy to communicate quickly with people who hover around my level of skill/knowledge. However, there really should be better ways of parsing this stuff for beginners. Give us the tools to strip away some of the abstraction and we'll be in a much better place to learn.
Edit: if you want a specific example, check out my next post