php icon indicating copy to clipboard operation
php copied to clipboard

Improve syllabus

Open mk-mxp opened this issue 2 years ago • 10 comments

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?

mk-mxp avatar Nov 07 '23 18:11 mk-mxp

👋🏻 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

neenjaw avatar Nov 07 '23 18:11 neenjaw

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?

mk-mxp avatar Nov 08 '23 06:11 mk-mxp

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?

neenjaw avatar Nov 08 '23 06:11 neenjaw

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...

mk-mxp avatar Nov 08 '23 18:11 mk-mxp

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

neenjaw avatar Nov 08 '23 18:11 neenjaw

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?

mk-mxp avatar Jan 27 '24 17:01 mk-mxp

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

neenjaw avatar Jan 27 '24 17:01 neenjaw

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.

mk-mxp avatar Jan 27 '24 17:01 mk-mxp

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.

neenjaw avatar Jan 27 '24 18:01 neenjaw

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.

tomasnorre avatar Feb 18 '24 17:02 tomasnorre