Skip to content
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

Improve syllabus #578

Open
mk-mxp opened this issue Nov 7, 2023 · 10 comments
Open

Improve syllabus #578

mk-mxp opened this issue Nov 7, 2023 · 10 comments
Assignees
Labels
x:module/concept Work on Concepts x:module/concept-exercise Work on Concept Exercises

Comments

@mk-mxp
Copy link
Contributor

mk-mxp commented Nov 7, 2023

Hello maintainers 👋

I program in PHP for ~15yrs now and would like to add my share to the PHP track of Exercism. I do not have plenty of time, but could add a few concept exercises per month. Or similar.

Where should I start? Is there a plan for the syllabus? A list of concepts to have? Or something else you prepared to pick up and incorporate?

I saw #324 and maybe I should give that a try first? I'm not sure if the existing concept exercises cover enough topics to lock a good share of the practice exercises, so maybe that's better done later?

@neenjaw
Copy link
Collaborator

neenjaw commented Nov 7, 2023

👋🏻 I'd be happy to have your contribution to the PHP syllabus.

I don't have a strict plan for the syllabus, my approach has been to roughly pick them up in order of complexity, determine which concept exercises should precede them then add them to the flow. I have found that having a strict plan works poorly to develop a syllabus as long as the concept exercises try to stay atomically focussed on a concept, they can be easily reoriented later to fit a better progression as it becomes more clear.

My recommendation would be to pick a concept from /concepts that doesn't have a corresponding primary exercise in /exercises/concept then go from there. There are pretty good docs around the general concepts of exercise building on the website

@mk-mxp
Copy link
Contributor Author

mk-mxp commented Nov 8, 2023

I would start with concepts/type-juggling, as it nicely fits after the existing Type Declaration. After reading the introduction and the examples in it: How about strict types? These are introduced in Type Declaration (about.md only), but not actively used in there.

As strict types are activated per file, I could make one file without and one file with that turned on. The exercise would be to understand the implicit type conversions happening in the one without strict types and make them explicit in the file with strict types. What do you think?

@neenjaw
Copy link
Collaborator

neenjaw commented Nov 8, 2023

I think that while we have the strict type declaration in all of the practice exercises, type juggling is a big part of the language. I think it is important to develop fluency in PHP to realize how pervasive type juggling can be.

I'm not opposed to a "strict types" concept exercise checkpoint, and every exercise after that one has strict types.

My approach to the current progression is that strong types are an additional value but they are optional. In practice, I would always use types where possible with a strict declaration where possible, but students need to know how to navigate when they don't exist.

Does that perspective help shape your approach?

@mk-mxp
Copy link
Contributor Author

mk-mxp commented Nov 8, 2023

Thanks for your advice. I think I'll use "Lucky numbers" from JavaScript track and make it suitable for PHP and it's Type Juggling concept. I'll add another concept exercise centered on strict types to the Type Juggling or Type Declaration concepts after that.

PS: I'm busy doing my day-to-day job for a few days...

@neenjaw
Copy link
Collaborator

neenjaw commented Nov 8, 2023

No worries, no rush, this is also on volunteer basis for me

@mk-mxp
Copy link
Contributor Author

mk-mxp commented Jan 27, 2024

I've been thinking a lot about where to work next. I came up with this as a possible next goal:

concept map V01

I would work from top to bottom through the concepts and concept exercises to ensure:

  • Each concept has its own concept exercise
  • The concept follows exercism guidelines
    • about.md for in-depth discussion of the topic
    • introduction.md with concise information to address a medium experienced programmer who is new to PHP
    • introduction.md links to about.md for those who need / want more information
    • Re-use introduction in exercise
  • The concept exercise links back to about.md where reasonable (e.g. in hints.md)
  • The concept exercise uses only concepts already introduced
  • The concept exercise adheres to PHP track consensus:
    • Use classes, not functions
    • Names are in unified casing (classes PascalCase, methods camelCase, variables snake_case)
    • Strict types in tests (and optionally in exemplar), but not in students files (the concept to be mastered is still missing)
  • The tests make sense and are helpful to master the exercises
    • Order of tests matches the order of instructions
    • Failing tests give helpful information

This adds some more concept exercises with deeper insights into PHPs type system. The track follows a more reasonable path through the concept tree. More in-depth learning of the concepts is acheived by more focussed exercises.

What do you think?

@neenjaw
Copy link
Collaborator

neenjaw commented Jan 27, 2024

There are lots of concepts in /concepts that don't have any exercise at all in /exercises/concepts, I think it's more valuable to expand the tree before reconfiguring it from what I've observed from other tracks.

But if you're doing the work and you have a specific proposal for an exercise to insert/reconfigure others, then I'd be interested to read it

@mk-mxp
Copy link
Contributor Author

mk-mxp commented Jan 27, 2024

I have a problem with the shallow depth of the current concept exercises. To add more concepts it would be very useful to have a more solid base to build upon. For example, one should know the various integer notations and PHP_INT_MAX / PHP_INT_MIN before digging into advanced concepts. Or experience floating point representation problems.

I will propose my changes and hope, they are adding enough value to the track.

@neenjaw
Copy link
Collaborator

neenjaw commented Jan 27, 2024

I think the important thing to keep in mind is that we also have practice exercises and mentoring to improve competency. The first goal of the learning track is to improve language fluency.

@tomasnorre
Copy link
Contributor

Like @mk-mxp I have been doing PHP for quite some yes now. Think I wrote my first lines of PHP in 2000, so have seen a think or two :)

Text stolen from mk-mxp:

Where should I start? Is there a plan for the syllabus? A list of concepts to have? Or something else you prepared to pick up and incorporate?

I have finished the PHP track on Exercism, I wanted to see what all the exercises were all about before mentoring others. There are still exercises "missing" compared to others. So I would like to help add some of the missing ones.

I would like to start with an "easy" one, as I currently don't have much time, and would like to get to know the process first before jumping into the deep end.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
x:module/concept Work on Concepts x:module/concept-exercise Work on Concept Exercises
Projects
None yet
Development

No branches or pull requests

3 participants