garageScript / c0d3-app

C0D3 - Become a Software Engineer the Hard Way
https://www.c0d3.com
MIT License
101 stars 69 forks source link

C0D3 DOJO Design doc #1192

Open anso3 opened 2 years ago

anso3 commented 2 years ago

Intro

Current UI design link: click me

Goals

One of the main benefits of learning is for users to engage creatively with the exercise sets. Their learning would be improved if they could solve creative uses of the concepts they are learning, and also come up with their own creative exercises.

This feature is designed to engage users by giving them more practice exercises and helping them engage other students with their own creative exercises.

Problem

Currently, the only engagement that users have in their learning journey is submitting challenge exercises for each lesson module. 8-12 challenges per module. Besides this, it is all reading and self paced, self guided exercises. Most students do not do all of the exercises, and new exercises are difficult to add, so content is a bit old. New exercises are added at a rate of a few exercises a year!

Solution

There are two types of student groups in our solution. First is the learning group, second is the mentor group.

Learners Group

When a student starts a module, they could jump right into exercises and get quick feedback by submitting answers or writing code, and getting quick feedback (your answer or implementation is right / wrong). Each exercise should also support a discussion where students could ask questions. This approach has several benefits:

Sample UI - Note: A exercise could also ask users to submit a function to do X. The check for correctness would then be a test suite instead of a hard-coded string.

Untitled (1)

Untitled (2)

When user clicks on View Discussion, the would be taken to a discussion page below. The discussion page mock should have included the original question for students to main context

Untitled (3)

Notes:

Mentors Group

Mentors are users who has completed a module. They could then submit exercise to challenge the future generations of students (which would show up in the prior example UI). Submitting exercises could be fun (and therefore more engaging for the students) and educational in the following ways:

A tab will only show up when users have completed the lesson

Untitled (1)

Untitled (4)

Notes

Admin Group

Metrics for measurement

To measure for improvement over time:

Implementation

Database Schema

Considerations

Proposed Schema

id, createdAt, and updatedAt will always be present, so omitted from the schema definitions.

module - stores a list of submodules for each lesson

exercises - stores exercise exercises

ExerciseInteraction - stores the interactions students have with each exercise

ExerciseQuestion - stores questions that the user asked

ExerciseAnswer - Stores answers that users submitted

ExerciseDiscussionLikes - stores user likes

GraphQL Queries

Student Page

On page load, initial request should query for

User Interactions

Mentor Page

On page load, initial request should query for

Admin Page

On page load, initial request should query for all lessons

User Interactions

Launch Dependencies

Rather than launching everything at once, we should incrementally release features so work could be done in parallel.

Databases tables we would end up creating: module, exercises, exerciseInteraction, exerciseQuestions, exerciseAnswer,exerciseDiscussionLikes

Phase 1 - Modules

It takes alot of time to curate exercise content, so phase1 would be optimized for the ability to create module content

Phase 2 - Exercises

Mentor Group

Student Group

Phase 3 - Discussion & Stats

ExerciseDiscussionQuestion, ExerciseDiscussionAnswer, ExerciseDiscussionAnswerLikes

Stats to the mentor group page

evo777 commented 2 years ago

This is good.

songz commented 2 years ago

@all-contributors please add @mino323 for documentation

allcontributors[bot] commented 2 years ago

@songz

I've updated the pull request to add @mino323! :tada: