Giter Club home page Giter Club logo

Comments (12)

mindovermiles262 avatar mindovermiles262 commented on August 17, 2024 2

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

from ruby_course.

mindovermiles262 avatar mindovermiles262 commented on August 17, 2024 1

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

from ruby_course.

KevinMulhern avatar KevinMulhern commented on August 17, 2024

Heres my take:

Overall Learning outcomes for a student completing this course.

  • They know the basics of programming and how to solve problems programatically
  • They have a good grasp of Ruby as a language and specific features to it ie enumerables
  • They have a good grasp of OOP and testing
  • They know about Files and serialisation
  • They know how to model software with OOP and know the best practices with general software and OOP design

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

  • Lesson: Primitive Data Types
    • Strings, numbers and symbols
  • Lesson: Variables
    • What are variables and how to use them. Explain pass by reference.
  • Lesson: Input and Output
    • Puts, print and getting input from a user
  • Lesson: Conditional Logic
    • If and case statements. Boolean logic
  • Lesson: Loops
    • All the different loops in Ruby (Except enumerables)
  • Lesson: Collections
    • Arrays and hashes
  • Lesson: Basic Enumerables
    • What enumerables are and how they work. Explain each, map, select
  • Lesson: Methods
    • How to write your own methods
  • Lesson: Problem Solving
    • Approaches to problem solving
  • Lesson: Debugging Techniques
    • Some techniques for debugging
  • Projects
    • 4 or 5 projects to practice the fundementals

Section: Basics of OOP

  • Lesson: Why OOP?
    • What OOP is and what problems it solves
  • Lesson: Classes and Instances
    • Whats a class and instance and whats the difference between them
  • Lesson: Methods in OOP
    • Instance methods, class methods and getter and setter methods
  • Lesson: Inheritance
    • What is inheritance, what does it do.
  • Lesson: Method scope
    • Public, protected and private methods
  • Lesson: Modules
    • Whats a module, whats the difference between them and classes and what to use them for
  • Lesson: Working with Collaborator Objects
    • How to get your objects to work together
  • Lesson: Intermediate enumerables
    • Intermediate enumerables, inject, max, sort etc
  • Projects
    • 4 - 5 projects to practice OOP

Section: TDD

  • Lesson: Why TDD?
    • The philosophy behind TDD and its process
  • Lesson: Introduction to RSpec
    • Install Rspec and its basic syntax
  • Lesson: Structuring your tests
    • How to use describe and context in your tests
  • Lesson: Mocks, stubs and spies
    • What each of these are and when and how to use them
  • Lesson: What to test
    • The rules of what to test
  • Projects
    • 1 or 2 projects the user can practice testing on

Section: Files and Serialisation

  • Lesson: Files basics
    • The basics of using files
  • Lesson: Loading files
    • Require, load, require_relative etc
  • Lesson: Standard Ruby project set up
    • How to set up your ruby objects, lib and spec folder etc
  • Lesson: Serialization
    • Yaml and JSON
  • Projects
    • A couple of projects to practice using files

Section: Advanced OOP

  • Lesson: Ruby Object Model
    • How ruby finds which method to use.
  • Lesson: Solid Design Principles
    • Explain all the principles
  • Lesson: Basics of Refactoring and code smells
    • Basic code smells and solutions for refactoring them
  • Lesson: Composition over Inheritance
    • Why you should use composition over inheritance
  • Lesson: Basic Design Patterns
    • Some of the common design patterns the student will come across
  • Projects
    • A couple of projects to practice

Advanced Ruby

  • Lesson: Blocks Procs and lambdas
    • What these are and how to use them
  • Lesson: Advanced Enumerable’s
    • How to use enumerable in your own custom class
  • Lesson: Meta Programming basics
    • The basics of meta programming
  • Projects
    • A couple of projects, one for making your own enumerable methods. The other for meta programming

Wrapping up

  • Final project
    • Final project for this course
  • Lesson: Conclusion
    • Closing thoughts

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.

from ruby_course.

CouchofTomato avatar CouchofTomato commented on August 17, 2024

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?

from ruby_course.

KevinMulhern avatar KevinMulhern commented on August 17, 2024

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?

from ruby_course.

leosoaivan avatar leosoaivan commented on August 17, 2024

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.

from ruby_course.

CouchofTomato avatar CouchofTomato commented on August 17, 2024

@KevinMulhern

I agree with @leosoaivan and would aim to put composition in the advanced section.

from ruby_course.

KevinMulhern avatar KevinMulhern commented on August 17, 2024

πŸ‘ 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.

from ruby_course.

CouchofTomato avatar CouchofTomato commented on August 17, 2024

Oh yeah, debugging is a must. Well remembered.

from ruby_course.

mindovermiles262 avatar mindovermiles262 commented on August 17, 2024

https://github.com/TheOdinProject/ruby_course/blob/master/Syllabus.md

from ruby_course.

KevinMulhern avatar KevinMulhern commented on August 17, 2024

We should definitely include that @mindovermiles262 πŸ‘ πŸ‘ πŸ‘
Which section should we put it in?

from ruby_course.

KevinMulhern avatar KevinMulhern commented on August 17, 2024

Nice! I really like the idea of building a web scrapper πŸ˜„ its practical and can be non trivial.

from ruby_course.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.