I'll just put this here... Help a newbie on his journey!

Hey everyone! :wave:t5: My name is Arthur Bates Jr. I’m a 26 year old graphic designer looking to become more versatile by learning web development. To get a better sense of where I am in my journeyI’ve been learning frontend development for a little over a month now. I know I shouldn’t, but I compare myself to programmers that have been coding since like 7 years old, so this makes me feel way behind the curve and hopeless at times but I try to remain optimistic. I’m currently taking a prep course through Thinkful and gearing up for my upcoming tech evaluation to get into the main cohort. I know basic terminology and syntax, but I fall short when it comes to implementing what I’ve learned to make code execute properly. Honestly, I originally anticipated JavaScript being easy to learn. Online bootcamps sell you this dream that with no prior experience you can become “job ready” in 6 months. I soon found out this is far from the truth (for me anyway :pensive: ).

I’ve learned about Functions, Arrays, Objects, Loops, Conditionals, and data types. It’s a different story for me though when it comes to putting everything together to write a proper data structure. Outside of maybe declaring an if/else statement, I have the hardest time declaring objects and arrays, and adding loop statements to functions are a huge obstacle for me right now. I also want to make more sense out of comparison expressions, and gain a better understanding of string and array methods. I feel like my inability to build comes from not being taught how to actually think through a problem and transfer the solution effectively using the correct data structures. So far my learning has consisted of lots of hand-holding where I’m introduced a concept and then given a drill to complete using scaffolded code. Thing is after this hand-holding is done I’m suddenly expected to be writing complete code blocks and function tests on my own! :man_shrugging:t5:Overall I need to learn a better way of mapping the path from knowing the problem at hand and using the right data structures to finding the best solution.

Show of hands: Does anyone else feel like they’re at a point where tutorials, videos, and readings just repeat the same things and can’t teach you much more than you already know? :raising_hand_man:t5: Viking code school refers to the place I’m in now as the ‘Cliff of Confusion’, that comes after the ‘Hand Holding Honeymoon’. Pretty much Im at a place where the only way to gain better understanding is to actually build, BUT HOW?! When do I get to the point of “I can do this” from “I have no idea what I’m doing”?

I know there has to be something out there that will make the idea of how all variables fit together click for me in a way the resources I’ve been using haven’t so far. It won’t be found looking through tutorials or reading through another article about how ‘objects are better than arrays when creating lists’. I like to think Im not a complete beginner as I recognize certain syntax and for the most part can tell what will happen from a block of code when a function is called. It’s just that building a function myself is the hardest thing right now, and I don’t know the best way to get over this hump, but I continue to push on until I have a moment of clarity :bulb: and all of this just makes sense for me I guess.

I welcome all on my journey, experienced or inexperienced. Whether you’re gaining a deeper understanding of new concepts like me or a seasoned programmer brushing up on your fundamentals, all help is most welcomed and extremely appreciated. I’m primarily honing my skills with javaScript right now, would love to pair program with anyone else interested. After all, we’re in this journey together!:pray:t5:

10 Likes

How do I delete this? Sorry for the book everyone…

“Eating my own dogfood” helps me a lot. I created my own website! Help yourself here. Since I’ve been doing freeCodeCamp I’ve found w3schools to be a particularly valuable reference. You may find other similar resources if you scroll down to “Tutorial websites”. Plus take a look at my “Creating Web pages”.

2 Likes
  1. Don’t delete a thing. I am one of those guys who was a hobbyist programmer since eight years of age (not quite 7, but still). I knew 7 computer languages (4 C-type) before joining FCC, and your post shows exactly what I thought a newbie would feel.

  2. My putative fix (and what I have heard other campers do), is to take a break from FCC and make time at the moment of confusion in the Javascript curriculum to get some fundamental comp sci learning in. Harvard’s EdX CS50 course is free, teaches you the basic syntax in several languages (which helps you think algorithmically), and has homework assignments that should teach you basic data structures and their operations. Yeah, you can’t ask questions of the teacher, but it’s free. And I’m sure there is a forum or subreddit out there. You could even start a slack channel for campers who are double-dipping. This is the something out there you have been missing.

  3. You absolutely can do this yourself. Your timeline from going from no experience is probably not realistically 6 months unless you can dedicated all your time, you have an amazing math background, and are genius-level smart. But 1-2 years while working on your current job is really not at all uncommon. Check out the “Developer Job” thread. Plenty of former neophytes there. Good luck!

3 Likes

Hey thanks! I like w3schools and also go to Mozilla.org when approaching a concept I don’t understand fully, but at the same time I don’t want to use these sites as a crutch (or is that the point?) I know I’ll find myself doing a lot of googling in the field anyways, might as well embrace it haha. Thank you for the resources you provided, they’ll help me and others in the future I’m sure.

1 Like

Thank you for your suggestions! I’ll be sure to take that course you provided, it will come in handy and I’m all for approaching this problem from a different perspective. Great idea about the double-dip campers channel on Slack too. I have a tech evaluation coming up, and I don’t need to know everything there is to know about JavaScript yet, but just enough of the fundamentals to write functions that solve a certain problem while having enough of an understanding to explain the steps used to come to my solutions. It has dawned on me though that this learning process is going to take a lot longer than I anticipated. As pressed for time as I feel I am, in order to get myself out of the ‘learn fast trap’ I have to realize this is a marathon not a race, and I should stop expecting it to be something that’ll come to me overnight (or in 6 months ). So many times I feel like if I just look at one more resource I’ll finally understand everything there is I need to know, but this view is unrealistic. I need to find simple, beginner JavaScript projects. This way I can experiment, code, and fail. Through these steps of failing and revising, I’m hoping these concepts in practice start making more sense to me than they do just looking at examples in my readings.

2 Likes

I’m with @vipatron here. Don’t delete a thing! It’s one of the biggest, if not THE biggest hurdle to get started in software development. I would love to help you, but I just started coding again and not anywhere near a position that I can help you. I hope that some other camper will be capable and willing to help you.

I have another, maybe weird, suggestion. Try the Programming community on Twitch. It has channels where people are coding live. They do that for different reasons, the main ones being: to show off their skills, and/or to have some company while coding. There are also people who are trying to improve their English while working. Try talking to them! Find someone who is just starting on a project and pick their brain!

Good luck to you, and don’t give up!

3 Likes

Woah I had no idea about the Twitch channel thank you so much for that! And I don’t think I’m as far ahead of you as you think. If you (or anyone really) ever want to meet up for pair programming you can email me at aabatesj@gmail.com and my skype ID is aliasaj91. Yea I’m a beginner but I heard when troubleshooting a problem two heads are better than one, so reach out anytime!

I was where you are, in about the same time frame. Every potential project seemed either too trivial or too daunting. Instead of figuring out the answer, I learned other programming languages and enrolled in programming classes.

I continued to write mostly procedural CLI programs until the end of the semester. That’s when I was pushed out of the nest and forced to build my first GUI application (a media player) for a final project… We’d only spent a couple classes learning the very basics of the GUI library (JavaFX) and had about a week to finish. But it turned out fine, thanks to the well written documentation for JavaFX. The docs actually included an example for a basic media player. I used that as the foundation, then added a lot more features in a step-by-step process:

  1. Plan the next component or feature
  2. Try to implement it myself
  3. Search the docs for help
  4. Search Google for help
  5. Still not working? Disable/comment out existing code, add to TODO list

After that, I was no longer afraid to build things. But I’d still run into the same issue from time to time: projects seem too trivial or too daunting. After spinning my wheels in frustration I came up with the idea to pretend I had to build all of my own software from scratch. The point being that what was trivial on its own (like, a clock) would feel important, as a necessary component of the project as a whole. At the same time, the total project, which could be overwhelming, would be composed of the smaller projects, which I would attempt one at a time in order of perceived difficulty.

This is the initial list of applications I came up with:

  • terminal
  • clock
  • desktop
  • text editor
  • media player
  • browser
  • search engine
  • chat
  • image editor
  • video editor
  • audio editor
  • game engine

Since writing this list, I’ve done most of these in some form and I have an idea of how to do the rest. Even if I never finish the grand project, this still serves as a reliable fallback, an indicator of progress, and each application can easily evolve into something entirely new. Remember that last point and try something ridiculously simple and see where you can take it.

Have fun.
:mantelpiece_clock: :earth_americas: :full_moon_with_face: :sun_with_face:

2 Likes

I can help you with few resources:

  1. The Complete JavaScript Course 2018: Build Real Projects!, Jonas Schmedtmann This is a nice course that explains you everything from scratch to advanced and also you build few projects and also you get assignments and the solution if you cannot come out with the solution on your own.
  2. Tony Alicea- Javascript understanding the weird parts on Udemy aswel. He explains very well concepts. At the end he will look at jQuery source code and he will examine some stuff. Also after that he will build a mini framework just to make you understand how to structure your code. You can start with the 1 st course since it has some projects and you want that as far as I saw. If you feel confident, no need to try the second course.

You know you’re doing well when I keep having to tell you to just not stop. My favorite search strings are (w3 css <propertyname>) and (mdn <Object>.<method>), although, over time, the latter has supereceded the former. It is because I am unafraid to keep my thinking at the algorithmic level that I don’t mind using these “dictionaries” as I learn this new C-type language, Javascript. As I just sat down at my computer, I had four MDN tabs open, two w3schools info pages, and one “try it” page from w3. I kept the “operator precedence” tab from mdn open as well as the React documentation and regexr.com. I am swimming without the flotation of a scaffolded lesson, but that doesn’t mean I want to stray too far from a liferaft and waste precious energy. The very fact that my CSS knowledge is mostly in my head now proves that this method works.

As my Biochemistry prof once said, there are three types of experts:

  1. A primary expert knows the answer.
  2. A secondary expert knows where to look it up.
  3. A tertiary expert knows who to ask.

AFAICT, a junior dev needs to be a tertiary expert about the codebase they’re working on, and to ride the line between a primary and secondary expert on the fundamentals and specific technologies for which they were hired. (i.e.: smart enough to know how to ask for top-level advice when they need it, and mostly search-plus-human-autonomous when tasked with something smaller).

2 Likes

I’ll be sure to incorporate this process going forward. I know coding is supposed to be 90% about the planning stage of a feature and the other 10% is actually writing the code for it. Now I know what to do when it’s not immediately working and I’m not finding the answers I need just yet. This will really help with my time management by moving on to another part of the project then coming back to the first feature with fresh eyes. Thanks!

You, Sir, need a second monitor, if you don’t already have one :slight_smile:

1 Like

Much appreciated, I feel like I’m going to need as many project ideas as I can get haha. I see you mentioned jQuery, this will be a valuable resource when I get to that part of my course, but the focus for me right now is more so just vanilla js and writing seemingly basic functions

Three, and a fourth (32" 4k) in a box I haven’t gotten around to opening yet. My girlfriend stole the 28" 4k I originally purchased for myself for her art history work.

2 Likes

Great stuff! I’ll be sure to bookmark those sections you suggested. The sooner I can get away from scaffolded code the better haha. I’ll be sure to ‘ride the line’ too as it’s important to know who I should ask the question to, but also knowing the right question to ask. This will lead to, as you pointed out, not even needing to ask someone else some cases.

1 Like

It is about vanilla javascript, but let s not forget that jQuery is actually vanilla javascript. It s a lot of javascript written for you to make your life easier. That s why he looks at the source code of jQuery to the end of the course, because after you learned really strong concepts about javascript, you re ready to look at other people s code and know what happens in there.

jQuery is written by really good developers and looking at their source code is a great idea to learn tricks and how to write simple and effective code in javascript. There you can only find good practices and I ve learned a lot of stuff from these tutorials. FCC is good but they can t really explain in details concepts, it s good for practice but they also advise you to get other references cause in that tiny space for explanation it cannot fit more than some basic and important informations.

If i were you I would start with the course of Tony Alicea and then follow the other one too cause it has some projects and you actually put in practice everything you learned. You just need a little patience for these 2 courses but it will be rewarding.

I m not telling you to learn jQuery, actually React and Vue for example they kinda replace jQuery because they can do what jQuery can and much more stuff. But looking at the source code sometimes it s really nice because you learn how to read an interpret someone s else code which is important.
When you ll learn at some company prob you ll have to read somebody s else code most of the time and if you can t it will be difficult for you. I think that reading and learning from others can help you improve your dev skills.

Also I m learning atm about structuring the code but this comes a bit later after you know some basic and intermediate concepts. Structuring the code it s important because things can get ugly and you need to learn to use functions for different tasks and not only one function for all tasks cause it looks messy.

Saying jQuery is vanilla JS is about as redundant as saying saying restaurants serve food. Of course they do but you should still know how about proper eating habits, how to eat, how to portion control, etc. Understanding how plain JavaScript works pays off in dividends as that understanding not only translates to jQuery, but other frameworks and languages.

Simple stuff AliasAJ is looking to emphasize such as constructing functions and when and how to use everything he’s learned can translate into understanding how jQuery, or any other library/framework is doing what it does when he gives it an object of arguments, a string, etc.

When we’re discussing an initial learning curve I know I experienced a roadblock using jQuery off the bat, and I’ve seen many many new learners get tied up in generally when their knowledge of a language is filtered through some abstraction. I even still come across tutorials where they pass off something they are covering and can’t fully explain as ‘magic’. It’s a harmful mindset in my opinion.

Jumping into jQuery to study how they do what they do might even be too much of a leap without the opportunity to practice these basics first. We see a lot of people struggle with applying what they learn, because exercises only take a person so far.

3 Likes

If you read my comment line by line you ll see that i mentioned that the instructor does that to the end of the course after you ve learned all intermediate + advanced stuff already and you re prepared to look through someone s else code and learn stuff. Also He finishes by creating a simple mini library to help you understand concepts and how to structure the code.

Of course you can t dive into someone s else code without knowing what an execution context is, how closures work, about first class functions, about OOP nature of javascript and functional programming and I noticed that, sadly, not many instructors tell you about these concepts and they re really powerful. :slight_smile:

Also as vipatron mentioned it s a good idea to learn some Computer Science. In my case, I d like to do this later because I put pressure to learn as much as possible since I have no IT background. But later sounds like a good idea to learn more advanced concepts that would help me learn other programming languages faster.

3 Likes

Just a thought on the bootcamps… Most of the better bootcamps (I know a few who have graduated from them) require 8 hours a day (minimum) working/learning programming, for around 12 weeks.

Other than the practical matter of attending school full time and not earning an income, I don’t see anything in what you’ve written to indicate that you couldn’t achieve exactly that outcome. FYI, I consider the idea of “job ready” to be very, very nebulous and context dependent.

So, how to you get past the “Cliff of Confusion”?

Exactly as several other posters have suggested (@vipatron, @Morrighain, @Osiris, et al).

I would also suggest a few other avenues.

  • Wes Bos’s JavaScript 30
    It’s not about what you build in the course, it’s about exploring different ideas. See if anything sparks your imagination.

  • GitHub
    Copy code, then rewrite it yourself. I don’t mean improve it. I mean just type it all in yourself and see if you can make working copy.

  • What things do you encounter/get frustrated by?
    Here’s a few things on my list of “projects” (things that bugged me when I encountered them).

    1. Get my library list of audiobooks from Audible (just a title/author list) - currently Audible does not offer an export function
    2. Keep track of my car maintenance - lots of apps for tracking mileage, not many for just maintenance
    3. Keep a list for my family and friends so that they know what toys/things/books my daughter already has (because every “occasion” seems to result in at least 2 repeats of gifts)

Learning to program is no different than learning to become a writer. Your first story will suck. Keep writing. Eventually you won’t suck. You can’t know how good you can or will get. You can only keep trying to improve.

Lastly - there is no RIGHT or BEST or CORRECT way to write code. Some ways are better. Some ways are popular. Just write the code. Learn from what you write. Try not to repeat your mistakes.

4 Likes