Help me from getting lost down the rabbit hole

Help me from getting lost down the rabbit hole
0

#1

Let me start by saying I :heart: FCC! Today marks my first 30 days of coding and I just finished the basic algorithm scripting. :dancers:

I’ve had fairly little in terms of computer-programming experience, starting from scratch has been interesting and I’ve learned a lot and found a lot of great resources (http://devdocs.io (MDN with fuzzy search), http://w3schools.com/, this forum, YDKJS, @P1xt’s stuff and https://stackoverflow.com/ are my go-to).

But now I need help. :confused: The examples/challenges work for me because they are visual, workable examples that I can understand and apply, but often when I try to read deeper explanations or Medium articles etc, they often might as well be in Klingon. I’m doing a lot of searching around, often ending up up to my neck in "what does that mean??"
An example:

Reads “variables fall out of scope” - understand scope and variables, but confused by the falling bit - off to google
first answer “variables are out of scope when not within the scope of the function” :rolling_eyes:
googles more - finds answer that references “JavaScript garbage collection when variable goes out of scope” (goes out = falling?)
follows link, sort of makes sense but refers to “nongenerational mark-and-sweep garbage collector,” “closures and event handlers,” and "freeing objects."
more googling… okay, I think I get it.
Make a note to go back to Memory leaks… realizes posts were from 2007, wonders if memory is even an issue considering Moore’s law … :rabbit2: :hole:

I understand this is part of the learning process and am 100% pro read-search-ask, but I honestly feel like my brain is melting like the wicked witch of the west… :shower:

So, what I’m hoping for: advise/reference sources/articles/authors that are a bit more noob-friendly - stuff that will allow me to play in the shallow end of the pool until I can take of the water-wings? Maybe a Urban Dictionary for coding/tech…
Please & Thank you in advance! :slight_smile:


#2

Here is a good explanation on youtube:

If you like things being visual, then that seems like the place to go. Look for other more advanced vidoes as you go.

Scope can be a little confusing to a beginner. To make matters worse, JS does a few nonstandard things that other languages don’t. As to your questions:

Scope has to do with where a variable is “visible”. That has to do with where it is defined. Not everything is visible everywhere.

var a = 10;  // outer level of code, global, visible, everywhere

console.log(a)  // outputs "10", no problem.

function myFunc() {
  console.log(a)  // outputs "10", no problem. this function is a "child" of the global scope so anything visible there is visible here
  var b = 12;  // defined inside the function so that is it's scope
}

console.log(b); // undefined, the b from the function is out of scope here

for ( i=0; i <10; i++) {
  console.log(a); // outputs "10", no problem
}

console.log(i); // outputs 10 (what i is now) because for loops are part of the scope where the originate

This is some basics. Things can get more complicated. (Much more complicated.) As to your questions.

Reads “variables fall out of scope” - understand scope and variables, but confused by the falling bit - off to google

Fall is just a metaphor. JS keeps track of what the scope is for each allocated memory block. As long as we are in that scope or a child of it, it is still “in scope”, when we return to a parent of that scope, it is “out of scope.” For example, in the above example, when we call myFunc, it allocates memory for b. When we leave the function, that memory is no longer needed so it is freed up. If we call the function again, new memory is allocated from scratch.

first answer “variables are out of scope when not within the scope of the function”

That’s basically what I just described. Once we leave the function b is out of scope and has no meaning. If we need that data, we either have to declare b globally (global variables are kind of “cheating” and can be dangerous if done too much) or return a value.

googles more - finds answer that references “JavaScript garbage collection when variable goes out of scope” (goes out = falling?)

Yes, they are the same thing. It’s just a different metaphor.

follows link, sort of makes sense but refers to “nongenerational mark-and-sweep garbage collector,” “closures and event handlers,” and “freeing objects.”

OK, that’s a little outside my ken. I think a garbage collector is just what frees up unused memory. Closures are an extremely important JS topic, but you have to understand scope first. There will be some excellent YT videos on it. Event handlers just handle asynchronous events - a mouse is clicked so the program jumps to a certain function to handle it. I have no idea what freeing objects are.

Make a note to go back to Memory leaks… realizes posts were from 2007, wonders if memory is even an issue considering Moore’s law …

There should be a corollary to Moore’s Law (if there isn’t already) that no matter how dense, cheap, and abundant memory gets, programs will always find ways to use it up. So yes, memory leaks will always be an issue. On a little web page with some images and a few click handlers? Not so much. But it will be an issue on any program that tries to use the system to its fullest abilities. It crops up on games all the time because they are always trying to push the limits. No matter how much memory people pack into a computer, someone will write a program that tries to use all of it.


But don’t get frustrated. These are confusing topics. Keep at it. And I’ve found youtube to be a great resource for these types of things. Just type “javascript scope” or “javascript closures”. It may take a few tries but you’ll get it. I feel like I understand how JS uses scope now. I’m almost there with closures …


#3

@ksjazzguitar Thanks for the more than thorough explanation :smiley: I now understand it even better!

However, I guess I wasn’t clear enough - the blockquote was meant to show the process I go through encountering a semi-unfamiliar term (or two familiar terms and a metaphor), which happens about 50 times a day as I go through the FCC and other materials. It’s not that I’m frustrated or confused by topics and more that I am looking for more resources that aren’t steeped in jargon and monikers (or feel like this https://hackernoon.com/how-it-feels-to-learn-javascript-in-2016-d3a717dd577f). It kind of feels like only learning Spanish in a North American school and then being dropped in Barcelona :sweat_smile:

Do you have any specific youtubers that you recommend? I have certainly tried but there is a lot of crud out there to sort through. I’m sure lots of FCCers have bookmarks of goodies they’d be willing to share :wink:

Today I found https://vickylai.io/verbose/ and it’s great! More like this would be spectacular!


#4

I haven’t really fixed on any particular youtube channel, but more bop around from person to person. For just general, simple concepts, I don’t have a specific guy, but there have been a few I’ve enjoyed learning from and have gone back to:

Traversy Media - He’s thorough, but sometimes he can run through things kind of quickly. “I do this, then I do this, then I add this, then I…”

d3Vienno - was helpful for the basics of D3.

Coding Tutorials 360 - He is a very through explainer as he codes. He can be a dangerous temptation because he actaully does the fCC challenges. I used him a few times as a last resort if I was absolutely stuck and wouldn’t code while I was watching him so I’d have to reproduce the ideas from memory, ensuring I understood them. Sometimes, after I finished a project I’d watch his video while practicing guitar, just to see how he did it.

And don’t forget that fCC has a channel and instructional videos.

Yes there is a lot of crud. But you can find good stuff.

Yes, there is a lot of jargon. I would reccomend doing what I did when studying music history - anytime you run into a word you don’t know, write it down on a special notepad (even if you find a definition for it.). Periodically make a flash card for each with 1-3 sentence definition. It’s amazing how helpful getting the definitions straight can be.

Just keep at it. It’s complicated and frustrating. And yes, fCC can be, errr, a little unsettling. “OK, now that we’ve taught you how to make fire and what iron ore looks like, build an internal combustion engine from scratch.”

Two things - that’s how a programming job can be. Your boss is going to tell you to do something and you will have to figure out how to do it. There won’t be any tutorial. There won’t be a checklist. You will have to figure out what framework you need and have to figure out how to learn it. It’s impossible for you to learn them all and they keep changing.

Second thing - be glad that it’s confusing and difficult. If it were easy and clear, evey one would do it and it would be a minimum wage job. I call that future job security.


#5

If you want just one place where you can systematically go through the fundamental concepts in a practical way, I love this free course by Gordon Zho. he was a product lead at google, who left because he loved teaching so much. It shows I reckon, he has a gift.
I found it very useful in providing the glue that brings it all together early on - rather than jumping around random tutorials where I miss some things and learn other things 10 times.
After that course… textbooks. Not the most exciting way to learn, but they are thorough. I find myself needing less revision and having less contradictions in my head if I plough through a text book.


#6

:laughing:

I think this is actually one of the best parts about FCC - I’ve quit other things when they were too "now take the screwdriver and put it in the slot of the top of the screw applying light pressure. Holding it in place, rotate it 180 degrees exactly 42 times…"
The only thing worse (to me) is “Babel fish (n) - a fish of the genus Babel fish that does what a Babel fish does.” which is a lot of what I’m finding. Not near to giving up that’s for sure!

I checked out the youtubers you mentioned - Coding Tutorials 360 is interesting to listen to and not self-referential so it’s def a good start! Maybe you can make some set to jazz guitar tracks - def would listen to that :stuck_out_tongue:


#7

Thanks @TimmDay :slight_smile: I’ll check it out for sure!
Any specific textbooks you recommend? I guess the whole point of this is I’m hoping those in the know will share targeted info rather than me stumbling around with the equivalent of a dowsing rod :wink:


#8

Maybe you can make some set to jazz guitar tracks - def would listen to that :stuck_out_tongue:

I never pass up a chance to plug myself - my web site at kevinsmithguitar.com has some old “tracks”.


#9

If you are starting out, go for digestibility I reckon. Head First Javascript is good for that. You can search for pdfs online or it might be worth buying a copy so you can write in it. It has crosswords and stuff. I used the head first java edition as a companion to my uni courses and the style of writing was really refreshing for counteracting that feeling of beginner overwhelm.

If you are further along in your learning or have programmed before Eloquent Javascript is solid.

This quora thread has a lot of good suggestions. I suggest checking out a few, and then picking whichever one vibes with you the best - and sticking to just that one until you are done! It can be tempting to do 5 things at once.


#10

I think it is precisely like this, and that’s why it feels that way. I’m reminded again and again that the terminology “language” is an accurate one for what I’m learning when I’m learning programming. The hard thing about learning a new language is you necessarily must progress through more than you can actually comprehend at any given time. When is the last time you heard someone speaking non-natively the language you speak natively? People with what we would call fluent/close-to-native language skills in a second language still sometimes make grammar errors that native speakers would never make (and use correct grammar in some spots that native speakers rarely do), but it doesn’t impede communication and so, well, we don’t throw an error.

I think what’s so hard about programming languages is that you really do have to get the grammar right. there are 100 ways to say it, but in 100 ways, you need to get the grammar precisely correct.

And yet, it immediately occurs to me that this is not true.

It’s not true. haha. Funny, so, anyway, I’ll leave the last few sentences but yeah, it’s totally not true that we have to get the programming grammar exactly correct. It’s simply true that, as with verbal language errors, as the complexity of the conversation or the stakes associated with the outcome increase, so too does the importance of getting the grammar precisely correct.

But I think there is a solution for your problem (and MINE, which is the same as yours) in this thinking. Basically, it’s twofold:

  1. Remember that working down some rabbit holes and discovering we are down the WRONG rabbit hole IS learning. You’ll probably be able to remember times this has happened for you in other subjects, where you later recognized that you had some familiarity with a topic because of some earlier accidental/totally misplaced rabbit hole. But even when we don’t, failing to find what we were looking for teaches us what the answer isn’t. I think we all are impacted by a probably not-at-all-rational obsession with so-called efficiency and productivity, forgetting that whenever we’ve learned anything in the past, it’s never been predicated on “not effing up my study pattern.” It’s predicated on continual recall, exposure to related ideas, getting shit really wrong here and there and suffering the consequences, a surprise moment of clear comprehension, lost for a month thereafter, and suddenly, one day, recognition of how some concept sits in our mind somehow under the banner of “Got it.” Okay, that’s how it is for me.

  2. Remember that it actually IS OKAY To get the grammar wrong until you get it right. I remember it being incredibly difficult to memorize, out of context, the structure of a basic function when I first started learning. I remember looking at URLS and being like, “I need to memorize what these parts are: protocol, host, blah blah blah.” And now it’s so obvious to me that no, I didn’t need to memorize that. There are very few things I’ve had to memorize out of context. I have no issue recognizing when I’ve made an error in a function because I can read it through and see what it’s actually saying. I’m reading it instead of checking it for matching shapes. When I started I was playing a game of “one of these things is not like the other” with the answer key when I was getting errors. That’s a ton of work and not something I ever really have to do anymore (except in the middle of the night when I shouldn’t be doing it…).

Edit to Add (as evidence of my certified similarity to you in this regard): hell, I even started a dumb blog (one of like 40 orphan blogs) called Words Developers Suck At, because I was so frustrated with how many of these little rabbit holes I got sent off into, often, it felt, because of imprecise or confusing language in the trainings and documentation I was reading. It really frustrated me at first, the linguistic approach in programming, especially stuff like “foo” and “bar” which tended to confuse me; I could never tell which parts of examples were “choose your own random piece for this part” and which were “the actual structure of which this is one example.” But I realized over time that developers don’t suck at words; it just really is literally the truth that it’s a different language. My complaint was pretty much like complaining that Spanish sucks because it’s confusing to me.


#11

Big time agree here, OP. Long form content is way helpful. Keep your vocab-chrome-tabs to a minimum. So much crap out there; I have finally started to force myself to stop reading something if I don’t get it or it doesn’t seem helpful. Maybe it’s great and I don’t get it; so I should move to something I can get. Maybe It’s not helpful because it sucks, and it’s a waste of my time, and that seems like what about 90% of content is. Like my responses to you right now. sry.


#12

Everything you wrote is entirely, exactly nail on the head, bang-on, 100% true and right :smiley: THANK YOU.
I realized that part of my frustration (even with some of the responses here) were coming from people who understand it like a native language and thus are confused by my (our) confusion… and that has no bearing on my intelligence, ability to learn, integrity…

And your definitely right about the rabbit holes not being a bad thing. I’ve noticed I’ve accidentally picked up on things that I’m now easily using. It sill irks me when I get “lost” for hours or a week trying to figure out some small thing, that I can’t get the bigger thing done without, but that just doesn’t fit… This certainly comes in to play too…

being stuck from 2 until 4 am on something confusing is NOT productive… no matter how determined I am to Get. It. Figured. Out. Tonight. Dammit!
lol

Googled your blog and spit out my tea - the first post is “repository” which has become my version of cursing… I still can’t figure out Git/GitHub because the tuts use words like repo$itory and forking and commit like you should already know… (http://git-scm.com/ is helping). I vote you un-orphan the blog for all of us “second language” noobs…

And foo bar still = fubar… hockey hair and beer swilling to me :stuck_out_tongue:


#13

@TimmDay
Head First Javascript

Downloaded PDF - refusing to consider all other alternatives for foreseeable future :stuck_out_tongue:


#14

I cannot recommend Practical Javascript enough by Gordon Zhu. After going thru the first 2 projects here at FCC Javascript was very difficult for me to understand. I am the type of person where I cannot retain anything without knowing the how and why behind what I am doing. Practical JS is free, and the way Gordon breaks down certain aspects of JS is really great. He likens functions to a recipe on how to make a sandwich lol which may sound weird but really works to get the point across. I’ve gone thru Tree House and other resources but could never ‘get it’. Practical JS really breaks down the basics so that you not only understand the basic principals, but you also master them. I highly recommend you check it out and go thru the whole free course. Idk if the course will be too basic for you, or what you are looking for, but I’ve enjoyed it so much so far I’m contemplating signing up for the other content as well. Hope this helps!


#15

Someone else recommended him too… I’m finding learning from videos doesn’t work for me. I need to do the thing and trying to do while he is talking and using unfamiliar terminology just makes it harder while I’m bouncing back and forth. :confused:
It’s great that you’ve found something that works well for you - there’s so much to learn that having a source that makes things makes sense is definitely invaluable! :smiley:


#16

Understandable. I felt the same way going thru Tree House. The terminology in general just thru me off from the start which left me wondering what certain things meant, rather than understanding the code I was writing. Still not a huge fan of videos but you are correct, I’m just sticking with it because I finally found something that works for me and makes sense!


#17

@Wess2121 I had a really great mentor at one point who said something like:
"Forget what anyone says; if it works for you, if it gets the results you want and you’re not risking injury, then do it."
He was talking about working out but I think it’s pretty universal - up there with “if it ain’t broke don’t fix it.” Sounds like you’ve got something that works and you’re progressing, kudos to you! :smiley: