Skip to content

Plan to split up existing javascript/node.js modules across the new courses #29

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
May 15, 2025

Conversation

markitosha
Copy link
Contributor

Proposal for #4


### Open Questions:

- **Deployment**: Should we provide guided deployment in Introduction modules? Just instructions, so they would be able to use them for Foundation Final Project.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My initial thought: In foundation, people should understand deployment as a concept (ie. what it is, why we do it, how we do it in theory). Any actual deployment of their code/apps should be very easy (if possible :D)

Copy link
Contributor

@rvedotrc rvedotrc Apr 24, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Web Architecture 101 introduces the concept of deployment, and this is the right place for it IMO. Just at the very vague level of "If you've written stuff on your laptop, how do people use the code you wrote, when you turn your laptop off?".

If we haven't already, I suggest that we (as part of this restructuring work):

  • identify a deployment/hosting service that the trainees can use for their final project (for the sake of argument: suppose we choose Heroku)
  • at various places throughout the courses, whenever deployment comes up, we show/teach whatever it is, using Heroku as an example.

This way, by the time we get to the Big Final Project, the trainees have seen the whole process at least once all the way through.

We can of course choose to mix the blend of "give careful instructions on how to do it" vs "show it once, and enable them to go off and learn more for themselves".

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it would be good to have a "click this button" to deploy your changes in some hosting provider as @rvedotrc mention. In the backend specialization people can learn how to automate this using workflows etc.

We could make it a requirement that after a certain point all homework PRs should include a link to the deployed code.

### 1. Module: Advanced JavaScript

**Duration**: 4 weeks\
**Purpose**: Deepen JavaScript knowledge with modern concepts and patterns used in both frontend and backend development. This module is part of both the Frontend and Backend Specialisation tracks. While topics are shared, examples and homeworks must be tailored per track.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just thinking practically.. so really the "only" shared thing is the learning goals/topics? If examples, exercises etc. should be tailored, then it's actually most of the content in github that will end up being custom per specialism?

Just thinking ahead already to how we might structure it in practice.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, the concepts, principles, and explanations would be the same, too.

Where it helps, maybe we end up giving multiple examples / exercises (e.g. two: one front end, one back end), with the idea being that you can just go with whichever one is more relevant for this trainee cohort.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Depends. Some examples/exercises (if it is something like "write a function" or "write a peace of code") can be shared as well for some topics. But for Promises, for example, makes more sense to use different examples (fx "fetch" for FE and "database interaction" for BE), and maybe tasks will follow that.

I don't have an answer / suggestion to that, also just thinking out loud

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok yeah, maybe it's not super obvious at this point. But it's a good first example of how we can manage more "shared" stuff 😁 I guess our options are:

  1. Have entirely separate modules (e.g. Advanced Backend JS, Advanced Frontend JS) that can diverge all they like
  2. Have shared learning goals (i.e topics to cover), but content can diverge as much as it likes to suit the specialism
  3. Have one shared module, with specific examples/notes inside to help lean the mentor/trainee to a specific specialism

Also just thinking out loud (again)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Based on my experience with the exercises, I believe it would be more effective to organize the material into separate, focused modules. would make our life much easier and for trainees and mentors as well.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agree wiht @saloumeh-67. Ideally, I also think that we should link to learning material rather than reinventing what is already on the internet. I don't see it as a big issue copy/pasting some content between two pages.

Copy link
Contributor

@rvedotrc rvedotrc May 3, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we should link to learning material

That's fine, but it does also come with an extra cost: validating that the links still work, and still point to useful content. Example

Linking to well-known high-reputation stable sites (for example MDN or The TypeScript Language) carries less of a risk, though.

@adamblanchard
Copy link
Contributor

This is really great @markitosha! 🤩 Thank you so much for taking the time to make a clear proposal. The diagrams really help.

I'm summarising a few thoughts, to double check my understanding:

Total length of js content:

Foundation - 7 weeks total (same as in the original proposal)
Frontend - 4 weeks total (one less than in the original proposal - not a problem, could be a good thing)
Backend - 6 weeks total (one more than in original proposal - again, no problem, probs a good thing)

I'm not implying any opinion here, just seeing how it compares to what we had before, to see if the courses will change size in any drastic way (looks like not :D).

Module changes summary

Essentially...

  • General JavaScript = legacy JS1
  • Web Arch 101 = Mix of intro topics from remaining modules
  • Intro to backend = Intro topics from legacy nodejs
  • Node.js = Remaining advanced node.js topics

Overall, it sounds like we are good to mostly reuse all content as a starting point, but after "General Javascript":

  1. Examples in sessions should be tweaked depending on course it now appears
  2. Assignments will need to be adapted to suit the course (apart from Node.js, probably)

And, final project(s) are still a bigger open question, and probably out of scope of this task.

--

Not explicitly looking for a response to this comment, just sharing out loud. But if it looks like i misunderstand anything, please say.


#### Final Week Homework Note:

Introduce small reusable logic/function tasks already in the final week (e.g., calculating prices, transforming arrays) and encourage saving the code — these will be reused in API or frontend in later modules.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this approach already exist in the legacy modules? I do love the idea of making assignments reusable later on, to build upon learnings, just wondering how much "new" work it is to introduce here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can't be sure, but I don't think I've seen exactly that. What I've seen, is that they're building their JavaScript homework application while learning, which is the similar idea and I suggest to reuse it earlier on.
Anyway, since we need to come up with Final Project for Foundation anyway, that's probably won't be that much of additional work 🤔

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we can continue the same way with having trainees choose one app and continue working on it (in fundamentals have smaller steps as @markitosha mentioned and then get more advance in the FE/BE. )

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I guess for the fundamental projects and homework that we can provide the high-level structure of the code and have them fill out blanks. i.e. functions etc.

As we get closer to the specializations they can gradually get exercises which require them to design things from scratch


*Option 1*: It might be natural to introduce separate files in «Introduction to Backend», and then mention in «Introduction to Frontend» how it is solved there.

*Option 2*: Introduce idea of structuring files (and import/export) on «Web Architecture 101» session.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Regarding option 2, i think this could be a good idea anyway. Even if just a very high level mention. "Codebases are made up of multiple files/modules that do different things. They can be used, combined and built on top of by others, similar to... insert amazing analogy here".

(please don't quote me 😆 but hopefully you get my point)

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would probably opt for pushing this to specialisms. Sometimes it is also easier to teach them the benefit of splitting the code into multiple files after they experience their own code grow out of hand.


**Approach:**

- Start developing simple reusable logic (just functions solving problems for their future project!) in latest General JavaScript homeworks.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good idea, I think. Do you have a few examples?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

More vibe than examples: maybe some data transformations, reusage of functions they'll write later (fx handlers for events), business logic (fx "count the price for all picked items in one currency").

Exact examples I don't have now. But when we come up with ideas for Final Project, I'm pretty sure that we'll be able to see what can be separated and reused for the Project

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For Final project we can use our JS mini projects that we currently have,(e.g., money converter, games) that can be reused but may need adjustments:

Fundamentals Phase: Simplify implementations (e.g., basic currency conversion, text-based games)

Specialization Phase: Expand with advanced features (e.g., API integrations, GUI enhancements)


**Duration**: 1 week\
**Purpose**: Introduce shared concepts between frontend and backend. Creates a unified mental model before Introductions for specialisations and removes duplicates from modules (like API explanations).\
**Note**: It, probably, will require some new material there (we didn’t have architecture before), but we can always just stick to the topics that was introduced before in old modules.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Happy to see this included (IIRC, it was me that suggested this at one of the first workshops). I'd be happy to volunteer on creating this module — but maybe I'm jumping the gun a bit here. :-)


**Duration**: 1 week\
**Purpose**: Provide a hands-on primer to backend development. Enables learners to build a basic working backend (simple CRUD server or even less).\
**Reasoning**: Placing backend first in hands-on development allows learners to apply their JavaScript fundamentals while reinforcing their understanding of APIs introduced in Web Architecture 101. This progression is both natural and confidence-building: learners already know how to write logic, and now they can wrap it in endpoints (basically, another level of functions). Starting here also clarifies the API before they consume it from the frontend side.
Copy link
Contributor

@rvedotrc rvedotrc Apr 24, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This reasoning ❤️

- Start developing simple reusable logic (just functions solving problems for their future project!) in latest General JavaScript homeworks.
- Reuse and expand this logic in homeworks for Introduction modules.

### 1. Module: General JavaScript
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
### 1. Module: General JavaScript
### 1. Module: Foundational JavaScript

Slightly more meaningful name?

Copy link

@bhas bhas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Very nice overview! ⭐ Great job

I think it will be very valuable to have the Introduction to Web Architecture

I also like how this first teaches how to do things in 1 basic way. Later we can introduce advanced features and "smarter" alternative ways of writing the same code.

Comment on lines 11 to 17
![Image](https://github.com/user-attachments/assets/894799bd-c19a-49ea-a1bc-f0c14cab66e0)

![Image](https://github.com/user-attachments/assets/53027cc4-f720-43ee-bce5-e310000298d1)

![Image](https://github.com/user-attachments/assets/c7f2a630-dfd7-4dda-aabe-f70e1c83987c)

![Image](https://github.com/user-attachments/assets/b9985e8d-90ad-4215-90ec-1275449717af)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The images are not very dark-mode friendly. It looks like this for me. Maybe we can add a fixed white background to them before exporting them.
image

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry 😬 But there was a very useful recommendation in another thread to download draw.io file and open it there: same content, but much more readable than images I've tried to add here

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

#47


#### Final Week Homework Note:

Introduce small reusable logic/function tasks already in the final week (e.g., calculating prices, transforming arrays) and encourage saving the code — these will be reused in API or frontend in later modules.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I guess for the fundamental projects and homework that we can provide the high-level structure of the code and have them fill out blanks. i.e. functions etc.

As we get closer to the specializations they can gradually get exercises which require them to design things from scratch

#### Topics [not limited to]:

- Client vs Server
- What is Backend?
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe also:

  • What is frontend
  • (maybe) What is DevOps


### Open Questions:

- **Deployment**: Should we provide guided deployment in Introduction modules? Just instructions, so they would be able to use them for Foundation Final Project.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it would be good to have a "click this button" to deploy your changes in some hosting provider as @rvedotrc mention. In the backend specialization people can learn how to automate this using workflows etc.

We could make it a requirement that after a certain point all homework PRs should include a link to the deployed code.

### 1. Module: Advanced JavaScript

**Duration**: 4 weeks\
**Purpose**: Deepen JavaScript knowledge with modern concepts and patterns used in both frontend and backend development. This module is part of both the Frontend and Backend Specialisation tracks. While topics are shared, examples and homeworks must be tailored per track.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agree wiht @saloumeh-67. Ideally, I also think that we should link to learning material rather than reinventing what is already on the internet. I don't see it as a big issue copy/pasting some content between two pages.


*Option 1*: It might be natural to introduce separate files in «Introduction to Backend», and then mention in «Introduction to Frontend» how it is solved there.

*Option 2*: Introduce idea of structuring files (and import/export) on «Web Architecture 101» session.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would probably opt for pushing this to specialisms. Sometimes it is also easier to teach them the benefit of splitting the code into multiple files after they experience their own code grow out of hand.

@adamblanchard
Copy link
Contributor

In the old curriculum, js2 and js3 don't have "normal" assignments, they build a javascript project throughout each week. They also have "optional homework", which i guess was just the old assigments before we replaced them with the js projects. Right?

Now i'm looking at our foundation "intro to backend/frontend" modules and what to do about the assignments. I'm thinking we take these steps during the restructure:

  1. Make sure the optional homeworks are restructured to suit the corresponding content in these new modules. Merge it.
  2. Plan the final projects, so we know what we're building up to.
  3. Rewrite the javascript projects to match the flow of the new modules AND build up appropriately/in alignment with the final project (a separate project, but it should still be along the same lines).
  4. Optional: Rewrite assignments in general js, and optional ones in intro modules, to build up "simple reusable logic" as described in this proposal. (this is optional, because it's not 100% a requirement to restructure the modules).

@markitosha does this match what you're expecting too?

Feedback welcome!

@markitosha markitosha marked this pull request as ready for review May 12, 2025 07:47
@markitosha markitosha requested a review from a team as a code owner May 12, 2025 07:47
@markitosha markitosha linked an issue May 12, 2025 that may be closed by this pull request
2 tasks
Copy link
Contributor

@adamblanchard adamblanchard left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I mentioned before that i would summarise the open questions that still exist from above. I've moved them into the relevant tasks that already exist (e.g. final project, advanced js module) so we shouldn't miss anything. Probs worth coming back to this proposal again after we have the first pass of the programme implemented though, to double check :)

@markitosha I wrote on the issue but maybe i should here: Can you please move the proposal under the contributing directory? e.g. "contributing/proposals/.."

Then I approve/merge :)

@markitosha markitosha requested a review from adamblanchard May 13, 2025 16:13

### Open Questions

- **Deployment**: Should we provide guided deployment in Introduction modules? Just instructions, so they would be able to use them for Foundation Final Project.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this could be a good chance for students to practice reading official documentations and learning how to deploy to Vercel, Netlify etc without direct guidance from us, but rather, by figuring it out themselves by readings the docs. We can be there to supervise during the whole process.

The reasoning here will be to have the students learn the skill of reading docs as well, which is crucial for their career development.

@adamblanchard adamblanchard merged commit 8667fed into main May 15, 2025
1 check passed

### Open Questions

- **Deployment**: Should we provide guided deployment in Introduction modules? Just instructions, so they would be able to use them for Foundation Final Project.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe deployment and hosting are one of the main challenges students face during the final project. To reduce confusion and ensure consistency, I think it's important to stick to one clear approach: either the students choose a cloud provider and the mentors guide them through it, or HYF defines a single technology stack that all students use.

I lean toward @babak-f perspective - students should be encouraged to research, evaluate the pros and cons, and gain hands-on experience making these decisions themselves.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: No status
Development

Successfully merging this pull request may close these issues.

Plan to split up existing javascript/node.js modules across the new courses
7 participants