Closed KevinMulhern closed 6 years ago
Heres my take:
Overall Learning outcomes for a student completing this course.
Essentially I would like the course to focus only on the pragmatic programming skills a student will need to be a software developer as well as best practices for writing clean and maintainable code. Not many programs I've seen cover the later point in much detail so I think this will give us an edge as well as producing much more skilled students.
The main things I think we should change
Shorter more focused lessons, take a look at the amount of learning outcomes in some our existing lessons some of the lists have well over 30 items. Smaller more focused lessons will allow us to make better more localised improvements in the future as well as improve the users experience as they will be able to focus on one thing at a time and mark lessons complete much more frequently
Small exercises on every lesson, having small exercises in each lesson will allow the user to practice concepts they are learning straight away and get them coding more often.
Remove the computer science section, this section isn't that great and is a bit out of place in this course. Austin outlined the idea of having a language agnostic computer science course so we wouldn't duplicate efforts between the Ruby and Javascript. I think this would be a much better approach with teaching computer science fundamentals. In saying that I do think we should use some of the common staples of computer science data structures and algorithms for the projects in this course. For example, sorting algorithms, linked lists, queues and stacks etc. These are great for getting students thinking in a programatic way so we shouldn't try and reinvent the wheel with the projects.
Remove the chess final project and replace it with something a bit less intimidating. As the lesson completion data shows a lot of students skip the final chess project after making it all the way through the rest of the course. From feedback in the chatroom and elsewhere I deduce this project is too intimidating to students. They see it as a massive jump in complexity and a huge time commitment to complete and there may be other barriers that put them off it such as not knowing how to play chess. I believe we should replace this project with something that is still significant but isn't as complex and won't take as much time to complete overall.
With all that being said, heres a rough draft of what I think the syllabus should be:
Section: Programming Fundamentals
Section: Basics of OOP
Section: TDD
Section: Files and Serialisation
Section: Advanced OOP
Advanced Ruby
Wrapping up
I don't consider this to be complete or the final syllabus. This is very likely to change from feedback we receive and other learnings as we progress with making the new course. But this covers all the stuff I really want to cover in the new course.
Hi @KevinMulhern. Agree with most of what you say and the draft of the plan looks great.
At this stage I only have two things to add.
1) Although splitting up lessons to make them shorter helps. We need to be careful not to get too carried away. If you look at the FCC roadmap it looks really daunting, even if most of those lessons might only take minutes to learn. It might put people off if the course looks ridiculously long so I'd like to find a good middle ground. I definitely do agree that we need to split out some of the current content though.
2) One big thing in Ruby is that you should aim for composition over inheritance. In what section do you see that being addressed?
Great points @CouchofTomato, I completely agree with not getting too carried away with the amount of lessons we have. I think having a lot of smaller lessons at the start of the course will make the course more accessible to beginners as it will be holding their hand a lot more with its introduction of new topics coming one lesson at a time. We can tail off this as the course progresses and make longer more 'complete' lessons.
π I completely forgot about composition, do you think it fits better in the Basic OOP section or the Advanced OOP section?
Great job on that syllabus, @KevinMulhern!
It would appear to me that composition would be a great fit in Advanced OOP. It could go after the first bit on Refactoring, sort of like Refactoring pt. 2, I think.
@KevinMulhern
I agree with @leosoaivan and would aim to put composition in the advanced section.
π sounds good
We planned to add debugging lesson to the fundamentals when we planned that section earlier in the year. I think it would be good to include that as well.
Oh yeah, debugging is a must. Well remembered.
Is it worth it to include some RegEx stuff too? I don't use it ALL that often, but it's nice to know how it works
We should definitely include that @mindovermiles262 π π π Which section should we put it in?
Might fit best in the Advance section. Maybe we can make some sort of web scraper as a final project where RegEx would be helpful
Nice! I really like the idea of building a web scrapper π its practical and can be non trivial.
Leo made a great point about drafting out a broad syllabus for this course in another issue https://github.com/TheOdinProject/ruby_course/issues/2
I think it's a great idea and will hopefully generate a lot of new ideas as well as get us all on the same page as to what we want this course to be and contain.
I'm not sure what format we should go with here so write out your ideas in whatever way you think is best.
I think it would also be good to mention that I think we should take an MVP philosophy with working on and rolling out the new course. We should aim to make the smallest changes that add value and then roll it out to get feedback and to allow users to get value from what we are working on as quickly as possible. We can then iterate from that to polish and 'complete' things.