Scope and aim of "concepts" pages

Hi,

Is there any page about didactics of the “concepts” pages associated to a programming language?

I’m trying to answer these questions:

  • What sets such pages apart from a book on the same language?

  • What sets it apart from just a documentation page?

  • How much should it teach a language by teaching its syntax and semantics?

  • How much should it teach through problems-and-solutions?

I’m trying to understand this because I don’t find the C++ (I’m not comparing to other tracks, because I’ haven’t looked at others) track particularly useful to empower a newbie to make use of C++ with awareness of the language. In this respect, I’d like to contribute to improve the experience, but clearly I want to understand first if my idea of “helping” is in line with what Exercism considers good.

Below are a few examples of why I consider the C++ material insufficient/inaccurate/misleading:

  • no concept exists to pinpoint that C++ is a compiled language,

  • no concept exists to explain templates, that are at the basis of C++

  • no cencept exists about the standard library in general

  • the concept “references” (References in C++ on Exercism) mentions en passant that references are to be used “depending on the size of your type”, which is in reality probably the least of the concerns, and furthermore it uses an example where an int is taken by reference by a function, implying that a function returning void and not copying an int is some good practice.

  • the concept “auto” (Auto in C++ on Exercism) depends on “pointers”, how’s that possible? Furthremore, there’s no page on templates.,

  • the concept “headers” (Headers in C++ on Exercism) defines the effect of an #include using the word “include”, which is a tautology, and doesn’t even mention that it is just fundamentally a recursive operation of copy-and-paste. This could have been dealt with another conept (with no prerequisites) about “#include an other # -things”

These are just a few examples of what I think needs reviewing/fix, and as I said, I’d like to contribute. But again, I’m not even sure anymore whether my view is sufficiently inline with Exercism.

To give an example of what I had in mind as “improvement”, see How about adding one or more exercises on type erasure? - #6 by Aster89; it’s not a topic for which a concept exists already, and it is actually a fairly advanced topic, but in the linked message I’ve shown how I’d structure an exercise to accompaign the hypothetical concept page.

Also tagging @vaeng , who’s authored the existing pages.

There’s docs on the subject here. You might also find useful the related entry on “concept exercises”.

Some of what constitutes a “concept” or a “concept exercise” is not precisely defined and is more of a consequence of “cultural practices” and underlying assumptions in exercism.

For instance, among others:

  • it’s assumed in general that a student is not a complete beginner, but someone with some previous exposure to programming;
  • it’s assumed that a concept doesn’t need to be (and often shouldn’t be) exhaustive of the subject;
  • if a concept is the first exposure to a subject, it’s assumed that sometimes it’s ok to simplify things, to the point of (minor) imprecision, if a full understanding would be overwhelming at that point. This is sometimes called lie to children;
  • of course, it’s assumed that a syllabus is not complete, there are usually many things not taught, either because it was decided they are out of scope or because they weren’t yet explored in a concept (but might be explored in the future).

In general, though, there’s a lot of freedom involved in defining what is or is not part of a concept. You should talk to the C++ maintainers to check the specifics for the track.

EDIT:

Also, some concepts may share a concept exercise with others (concepts and concept exercises don’t need to map one-to-one). I believe this was what happened with “auto” in your list, which shares the same exercise as “smart pointers”.

2 Likes

It took me a while to understand, why there are 2 versions of a concept. One version is a shortened introduction to read before attempting a concept exercise. And the other is a more comprehensive document for reading after an exercise is completed. I think I never read the second version…

The idea is: get the student to work on the exercise as fast as possible and don’t overwhelm them with too much information beforehand. Then, after they had their experience, give them all the nitty-gritty details.

That should help answer your questions:

What sets such pages apart from a book on the same language?

You must work on an exercise after a short introduction before you can read the complete chapter.

What sets it apart from just a documentation page?

You have 2 versions, one aimed to solve a helpful exercise and one to give you the details you wish you had before the exercise. But you learned a lot more (hopefully).

How much should it teach a language by teaching its syntax and semantics?

In general: Fluency is the goal, not production grade expertise or academic precision. E.g. A concept about “functional programming” is OK, when it makes the student understand that the language supports the functional paradigm with special syntax - as opposed to procedural style or OOP.

How much should it teach through problems-and-solutions?

I think we aim for good problem solving skill application rather than explicitly teaching problem solving methods. Concepts focus on the track’s language. The concept exercise shall do the “advancement” of the student by practical application of the concept.

In the PHP track we have design documents exercises/concept/.../.meta/design.md, which help to understand the reasoning behind the syllabus structure. There are topics like “Learning objectives” and “Scope”. There’s a lot of reading, thinking and structuring in a syllabus…

3 Likes