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
Top comments (3)
Did you check freecodecamp.com(?), I think it's comprehensive and can lead you through the first steps.
Also create/config/maintain environments is related to another profession (sysadmin/devops operation). It's okay to learn these subjects but you should remind yourself in the meantime that it isn't actually programming
and an example how easy in 2018 to run a script on a node server:
docker run -it --rm --name my-script -v "$PWD":/usr/src/app \
-w /usr/src/app node:latest node your-daemon-or-script.js
preparation:
docs.docker.com/install/#supported...
and put
your-daemon-or-script.js
into the current directoryYou have pointed some of the biggest issues with the development courses nowdays, and the ecosystem as a whole.
I (try) to mentor junior web developers, and the problem I face is not the lack of resources for them, rather the opposite, which of them are good and in what order.
There are ways to peal off the abstractions, but is a longer, harder path of learning, with a late ReturnOfInvestment, one of them is doing a 3-4yrs CS faculty.
All of the courses, nanodegrees and codecamps I saw will skip the basics, what JS is and how does it work, how a Computer works, and entire chapters like security and performance. Why? I guess because they want you to be productive as soon as possible.
You will loose many hours because you skip the basics? Sure, but meanwhile you already shipped a few websites with webpack and other frameworks.
That is why I have 2 main paths I help the juniors "walk":
I will say to learn CS and the tools first and in parallel with the main language. Learn what is a pointer, wha is the job of the OS, a process and a port. Learn what ECMAScript is before JS, learn a static typed language first before entering the Dynamic programming mess. Learn the difference between an array, list, object before doing `map["ss"]" in JS.
This were random examples, I recommend what to learn depending on the position and skills the dev has.
2 . You want to get a job ASAP and "make websites"? Learn a small amount of JS/CSS and React and go for it. We can come back to the basics as you go.
YES. This is wonderfully written and a million percent accurate.
One of the hardest things by far in tech is the amount of assumed knowledge and the barriers there -- which is compounded by how astronomically hard it is to ask questions to find out more about the things you don't know enough about to research or ask questions of.
As someone who is new to programming (less than 2 years total) and who started doing it professionally about 6 months ago, keep asking questions and keep posting about the questions and how hard it is to find the answers.
Also feel free to message me on Twitter (here too but I get notifications for Twitter) any time