From 0f2aaf942c179c3ea025dc0b02707f5fc1636ca8 Mon Sep 17 00:00:00 2001 From: Gabriel Mathias <46024993+gablemathias@users.noreply.github.com> Date: Thu, 22 Aug 2024 12:44:24 -0300 Subject: [PATCH 1/2] Create mentoring.md Mentoring guide for the given exercise to help others mentoring this in the future. It comes with the mentoring proposal, an exemplar solution and a link with a possible learning material. --- .../beer-song/beer-song/mentoring.md | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 tracks/csharp/exercises/beer-song/beer-song/mentoring.md diff --git a/tracks/csharp/exercises/beer-song/beer-song/mentoring.md b/tracks/csharp/exercises/beer-song/beer-song/mentoring.md new file mode 100644 index 000000000..5a4b78376 --- /dev/null +++ b/tracks/csharp/exercises/beer-song/beer-song/mentoring.md @@ -0,0 +1,44 @@ +## Mentoring +The student would normally go first using the if/else and if/else if statements. +Suggesting the use of case statements first will be optimal and instructive. +Learning material: [Switch statements ](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/selection-statements) + +## The Exemplar Solution +Try and guide the student towards this solution. +```csharp +public static class BeerSong +{ + public static string Recite(int bottles, int takeDown) + { + string verse = ""; + + for (int i = takeDown; i > 0; i--) + { + switch (bottles) + { + case 0: + verse += "No more bottles of beer on the wall, no more bottles of beer.\n" + + "Go to the store and buy some more, 99 bottles of beer on the wall."; + break; + case 1: + verse += "1 bottle of beer on the wall, 1 bottle of beer.\n" + + "Take it down and pass it around, no more bottles of beer on the wall."; + break; + case 2: + verse += "2 bottles of beer on the wall, 2 bottles of beer.\n" + + "Take one down and pass it around, 1 bottle of beer on the wall."; + break; + default: + verse += $"{bottles} bottles of beer on the wall, {bottles} bottles of beer.\n" + + $"Take one down and pass it around, {bottles - 1} bottles of beer on the wall."; + break; + } + if (i != 1) + verse += "\n\n"; + + bottles--; + } + return verse; + } +} +``` From 3627f542a10076cdb1e3ec27572560f78bd20fda Mon Sep 17 00:00:00 2001 From: Gabriel Mathias Date: Thu, 12 Sep 2024 19:26:40 -0300 Subject: [PATCH 2/2] updating mentoring.md with further instructions and orientations. --- .../beer-song/beer-song/mentoring.md | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/tracks/csharp/exercises/beer-song/beer-song/mentoring.md b/tracks/csharp/exercises/beer-song/beer-song/mentoring.md index 5a4b78376..13edb1b76 100644 --- a/tracks/csharp/exercises/beer-song/beer-song/mentoring.md +++ b/tracks/csharp/exercises/beer-song/beer-song/mentoring.md @@ -1,10 +1,35 @@ ## Mentoring -The student would normally go first using the if/else and if/else if statements. -Suggesting the use of case statements first will be optimal and instructive. + +The student would normally go first using the if/else and if/else if statements. That's not wrong, +but the idea is guide him to an approach that will improve the readability and conciseness of the code. +Suggesting the use of case statements first will be optimal and instructive, since the number of cases +are bigger than a simple if/else. +When doing this, you can reference the learning material for the switch and highlight the usability of it. Learning material: [Switch statements ](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/selection-statements) +It's important to check if the student is also using clear names for the variables. + +The verse string in the exercise is huge and it seems to repeat in every sentence, but as the exercise +explains, it's not always equal and that's why we have more than just one or two cases for it. +With large strings inside the code, instructing the student to break them improves the readability. + +Uncle Bob from the "Clean Code" Book recommends that every line should not contain more than 120 characters. +This can be challenging sometimes, but it's worthy. So in the exemplar solution we format the string +using concatenation. +```csharp +verse += "No more bottles of beer on the wall, no more bottles of beer.\n" + + "Go to the store and buy some more, 99 bottles of beer on the wall."; +``` +Show to the student the importance of formatting the code. It helps a lot with the comprehension +and when they went back to check older code, they won't be so confused with their own code. +Programmers spend more time reading than writing code. + +If they still feel confused about formatting, this article dive deeper into it. +[Clean Code - Formatting](https://dev.to/caiocesar/clean-code-in-c-part-4-formatting-1b1h) + ## The Exemplar Solution -Try and guide the student towards this solution. +Guide the student towards a solution closer to this. + ```csharp public static class BeerSong {