TheOdinProject / curriculum

The open curriculum for learning web development
https://www.theodinproject.com/
Other
9.64k stars 13.07k forks source link

Javascript Course #5633

Closed codyloyd closed 7 years ago

codyloyd commented 7 years ago

This is the overview of our re-vamp of the existing Javascript(JS) course. At the moment it is in it's infancy so please feel free to leave suggestions in the comments such as:

Why this course is important.

Ruby and Rails are not dead or dying by any means, but the current trends in WebDev are increasingly focused on JS, and it looks like that trend is going to continue. Our curriculum does, of course have an entire JS unit, but being at the end of the whole curriculum it was put together rather hurriedly and some of it feels incomplete. In addition, many of the sections have become rather outdated since they were written almost 5 years ago. JS is changing, so our curriculum needs to as well.

It is conceivable that at some point in the future this JS course could actually shift to being the main focus of the curriculum rather than being secondary to the Ruby/Rails courses, so getting a good, solid foundation in this revamp is crucial.

Topics of Study (Units/Lessons for the course)

This is a rough outline of the course. Note that it does include the lessons that will eventually be included in WebDev101, so this course will be starting at ground-zero. We aren't quite to the point of planning individual lessons, so each of the points below could have one or more lessons and a project or two within them.

JS101:

Advanced JS

I suspect that at some point we will want an entire course based on JS frameworks (backend stuff like Node/Express and front-end stuff like React) so for now, the "frameworks" lesson will basically be a teaser with general info and links to the basic "hello world" tutorials for each framework.

The following is a compilation of links, ideas and potential projects to complete for each section. I'll try to keep it updated as you all comment and share ideas.

JS Basics

Other stuff..

...remainder is in progress

KevinMulhern commented 7 years ago

for the most part, I think the existing WD101 JS section is adequate.. might need a little updating, but it's OK overall.

I think that breaking the basics out into separate lessons will make it higher quality and more accessible to more beginners. The js stuff in 101 is too much in one lesson imo.

FCC 'Basic Algorithm Scripting'

I'm not sure about this, ideally we would have exercises on site for the projects. Something they would perhaps have to do on their local machine.

codyloyd commented 7 years ago

goood point there.. perhaps we could roll a small test suite and create them ourselves like the test-first ruby stuff. Wouldn't be too hard... and would give the value of running locally.

KevinMulhern commented 7 years ago

I think thats the best solution 😄. We are going to do that with ruby basics too, so we should be able to reuse the same exercises for both courses.

codyloyd commented 7 years ago

there you go :D edited.

OlegSliusar commented 7 years ago

We can use some fCC's stuff for the JS course :thinking:

KevinMulhern commented 7 years ago

@OlehSliusar I think we could only use FCC for exercises and projects. FCC is brilliant but their in browser challenges is what puts me off. We want to get the student working from their local machine as quickly and as much as possible.

ChadKreutzer commented 7 years ago

@OlehSliusar I always recommend to people that they go through FCC's jQuery, Basic JavaScript, Object Oriented and Functional Programming, Basic Algorithm Scripting, JSON APIs and Ajax, Intermediate Algorithm Scripting, and Advanced Algorithm Scripting courses (skip the projects and just do the lessons) for a good grounding in Javascript and a decent intro to jQuery.

As @KevinMulhern says, their in browser editor isn't very real world, but neither is the Codecademy one. That isn't a big deal for the lessons, but where I take issue is having their students use Codepen for their projects. I think they have some good projects (heck, I basically stole the pomodoro clock one for our pairing course) but if you want to try them, use the real world development environment TOP has you set up.

jacobherrington commented 7 years ago

I agree with @KevinMulhern, as someone who has used FCC, The Odin Project, and Codecademy, one of the strengths of The Odin Project over the others is the opportunity to work locally and understand the technologies rather than just practicing syntax.

libersolis-dev commented 7 years ago

Might I recommend the first 3.5 hours of Understanding JavaScript the wired parts available for free on YouTube. I'm someone who was lost before I watched those videos , it made a tremendous difference to me as a new developer with no math background.

libersolis-dev commented 7 years ago

Though many people look down at this resource, something that helped me tremendously were these exercises http://www.asmarterwaytolearn.com/js/index-of-exercises.html and the book, more so the exercises than anything else.

It isn't perfect, but the way the questions are asked, the order they are asked in and the simplicity of it all makes it very easy to learn, apply and retain concepts. I struggled to find other resources like this.

One of the most frustrating things I have run into is the lack of practice problems to drill. Sites that have problems to solve usually focus on algorithmic/data structure type problems, instead of helping people develop language fluency.

jansowinski commented 7 years ago

Two insights from a perspective of someone learning JS right now:

KevinMulhern commented 7 years ago

Thank you for offering offering your insights @mannyhagman and @iansowinski 😄

Sandesh-bn commented 7 years ago

@KevinMulhern, @codyloyd Hi I explored the Javascript course and I believe that students would greatly benefit from a lessons on Scope, Hoisting, IIFE, this keyword, preventExtensions, freezing and sealing, call, apply & bind. I would love to work on adding these to the existing curriculum. Nicholas Zakas is also well known name in Javascript community for authoring concise and skillfully worded Javascript books. We could add his books to the suggested reading list as well.

codyloyd commented 7 years ago

@Sandesh-bn several of these things are already on the list up there... but we GREATLY appreciate your input. for sure.

We aren't really intending to add things to the existing curriculum but re-write and refresh more or less from scratch.

we aren't quite to the point where we're ready to start the actual writing.. just planning at the moment. Take a look at the outline above and suggest where you think we should add whatever it is you think we're missing and I'll add it to the list.

Sandesh-bn commented 7 years ago

Deeper JS topics Hoisting IIFE preventExtension, freeze, seal methods. Call, Apply and Bind Exception Handling

Suggested Reading The Principles of Object-Oriented Javascript(Intermediate) Understanding ECMAScript 6(Intermediate) Professional Javascript(Advanced)

Ajax/APIs Weather api: Darkskynet has a great api and their plans are free for small scale applications. StockPicker: Quandl is great for beginners who want to use financial information.

jansowinski commented 7 years ago

Potential resources: the basics of package json in node js and npm

mygeeklab commented 7 years ago

Why not add Angular to the mix of js frameworks sunrise auntie end of the course, not only do we get knowledge on both, but also enable us to choose between the two based on which we get the most?

codyloyd commented 7 years ago

My personal opinion is that we should pick one to reduce bloat. Honestly, buy the time you get to this post of the curriculum you should be able to figure most of that stuff out on your own.

jansowinski commented 7 years ago

@codyloyd is right. At that point course should just introduce to ideas behind JS frameworks. For me Vue worked great thanks to it's simplicity, thats why I propose it (second argument is that it's getting more and more attention). After playing with Vue diving into react seems easier for me right now (although I'm just starting with it)

codyloyd commented 7 years ago

@Sandesh-bn thanks! I'm just getting back to this.. I'm adding a couple of those things, a couple of them I think will be implicitly discussed in other sections... and a couple I don't think are particularly relevant at this point.. but I really appreciate the feedback

Thanks!

tomasvn commented 7 years ago

May I suggest you to add https://watchandcode.com/ a practical JS course developed by Gordon Zhu?

KevinMulhern commented 7 years ago

Hey @tomasn4a, I've heard sooo many good things about that course. Thank you for suggesting it 😄

tomasvn commented 7 years ago

@KevinMulhern also a possible section dedicated for small JS projects, https://javascript30.com/ developed by Wes Bos

KevinMulhern commented 7 years ago

@tomasn4a ah another great one 😃

ChadKreutzer commented 7 years ago

lol. @codyloyd I was going to recommend https://zellwk.com/blog/crud-express-mongodb/ for helping with teaching express but you already had it. :)

strongdan commented 7 years ago

If it wasn't previously mentioned, I would suggest utilizing funfunfunction YouTube series on functional programming and higher order functions https://youtu.be/BMUiFMZr7vk

JonathanYiv commented 7 years ago

The current devtools resource is kind of ... meh. It requires you to download a glitchy chrome extension to complete the exercises.

I found this resource directly from google that better covers chrome dev tools.

KevinMulhern commented 7 years ago

Hey @JonathanYiv, is that the codeschool tutorial? I would agree that it isn't the best. How did you find the other assignments on that lesson?

JonathanYiv commented 7 years ago

Yes it is @KevinMulhern !

Codecademy was the best resource in my opinion. I felt the part which listed in-browser IDEs was useful but lacking.. substance(?). Project Euler was fun, although the complexity of the problems jumps up pretty quickly if you don't have strong math skills.

Aside from that, as mentioned in the original post at the top, it "should include lesson on running JS code (https://www.youtube.com/watch?v=t7t_5QT4mxg&)"

The current assignment just states "Solve these problem in repl.it if you aren't comfortable working with your own files" which I found was kind of dismissive. I installed node.js to run the files although I know you can also link to them in HTML files and open them in your browser. Maybe adding installation of node.js or something in the Installations Project would also help set the basis for the whole Javascript Course?

KevinMulhern commented 7 years ago

Sorry @JonathanYiv, looks like we've got our wires crossed 😄 I meant the other assignments on the dev tools lesson specifically. Although your feedback for the other lessons is very valuable so thank you for providing it 😄

codyloyd commented 7 years ago

This issue has been given it's own repo! Come visit at https://github.com/TheOdinProject/Javascript-Curriculum