Improve syllabus
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?
👋🏻 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
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?
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?
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...
No worries, no rush, this is also on volunteer basis for me
I've been thinking a lot about where to work next. I came up with this as a possible next goal:
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.mdfor in-depth discussion of the topicintroduction.mdwith concise information to address a medium experienced programmer who is new to PHPintroduction.mdlinks toabout.mdfor those who need / want more information- Re-use introduction in exercise
- The concept exercise links back to
about.mdwhere reasonable (e.g. inhints.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?
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
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.
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.
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.