Build a Music player - revisited

I remember doing this workshop almost a year ago in the previous Curriculum and now I reached it again in the current Full Stack Curriculum, I was much more prepared doing it again.

Naomi made a survey about how the JS certification is effective and I decided to point out this workshop separatley here.

As an experience for me:

On the first try (almost a year ago) was the worst for me, because it had a bunch of new things for me, like it was the first time with addEventListener for example or like I wasn´t good at all with objects too, but the current Curriculum prepared me much better for it, so it´s much much better now if a student follow the learning path correctly.
I even felt that time to giving up learning to code altogheter and I´m happy you folks made a new cucciculum. Can´t thank you enaugh!

During the current cetification, as a second try it felt great that I know what am I doing, but around step 20, I kinda lost focusing on what I´m doing and I feel, the objects are hard to track (for me at least) during later steps and I think how objects used in this workshop is a bit much if a student want to learn audio manipulation.

Examples:

A:

audio.currentTime = userData.songCurrentTime;

I know, it´s simple at first, but it would be more logical that userData and audio share the same attribute name, so .songCurrentTime should be simply .currentTime, so it´s easier to track the value changing on later steps.
So when I have to update the “current time”, I have to track this value all the way back to make sure I accessing it correctly, while I supposed to consume the logic I recently learned for making an Audio player.

Doing a step should be like: “Okay, so this how it works, I get it.”
instead of
“It should work… okay I made false association probably again, let´s try this… Completed? Well okay, let´s go the next step than. Maybe it´s makes more sense there.”

B:
The key: value pair: songs: allSongs, inside userData seems useless for me, because why not simply access allSongs directly? It´s a direct association to it, wich never changes.

C:
Do we need the userData object at all?
Why not make two variables for the currentSong and for songCurrentTime?
I guess the idea was to get used to object handling, but I think it´s makes the workshop unnecessarily more complicated. The main goal in my opinion is to learn to build a music player, but most of the time I have to make sure I using userData correctly, instead of focusing the audio player manipulation logic part of the script.
Step 8 says I have to use object, but doesn´t explaining why.

C2:
I made some google search for why do the workshop uses the id: key inside allSongs and the userData object for such and it seems it was implemented as best practices for data handling, but it´s never explained during the steps
Like I have red somewhere that keeping a “Source of Truth” in an object for React is a best practice too, but student´s probably didn´t even heard about React before at this point of the certification.


I understand, that repetion helps to learn Object handling better, but I felt before and feeling now, it´s a bit much extra challenge to tracking data during making this audio player.
It´s already complicated enaugh for me at least.
I know: “When you face it in real life…”, but I want to learn the basics of a new concept first. There is a following Lab already to test me out later.

I constatly have to check where are values stored, than have to make an association, while I feel I may can write an easier code for it and those small “fail” moments builds up to stress.
I made this post, because I don´t know if I´m alone with this and it seems JS certification is under review. It´s just, I don´t remember any other workshop before -even from Responsive Web Design- to be frustating that much, only this audio player one.
Maybe there is an other reason(s) that I feel this way, but this post is what I was able to come up with and I wanted to talk about it.

I hope I wasn´t wasting your time with nonsense, so Thank you for reading this long post!

if you want to give suggestions to improve the workshop, could you open an issue on github?

As I use the forum I think that the forum is more personal (most users struggles with something and asking for help) and GitHub is more professional (users works for a common goal) and I felt my posts is somewhere in between them, because It felt like I´m just ranting on something I should already know, but thought maybe I´m right and should make at least talk about it for the greater good.

So, as you wrote it should be on GitHub instead, than I make an Issue there. Thank you!

if you want to discuss, the forum is a great place, but if you want to propose/request changes, an issue is the best way to make it actionable

I think for a proper discussion we may need user statistics, like how many users finished all steps after finishing the first one vs how many not, but I don´t know how FCC staff analyses such data.

Maybe there will be a bigger picture about it from the JS survey.

I do an issue anyway and letting this post open, maybe somebody came by and sharing their experience.

I have created a github issue for this because this has come up in the past.

so far the JS survey, hasn’t mentioned this one. But reports on this have come up on the forum and discord.

1 Like

I was writing the issue, when I have seen the pop-up about your issue. So I discarded mine.

Well, thank you very much! I feel relieved that it´s not just me with that.

Feel free to leave comments on that open issue :+1:

But one of the main reasons why this workshop is confusing for beginners is because it introduces the concept of state and state management without fully explaining what it is.

You had asked, why use userData at all? Well, now we are getting in state modeling. Since this wasn’t really explained, campers like yourself are left to wonder why.

That is the reason for the rewrite. To provide extra context :+1:

1 Like

I might just do that. I reduce my wall of the text first and thank you for the answer!

your wall of text can be useful to pinpoint which parts need to be explained more or rewritten

1 Like

I just don´t want to steal more free time for reading than needed from the contributors.
Then I think I should share a link to this topic in the GitHub comment.