I'm having trouble succesfully teaching integration to trainee that are not from a computer science background.
Basically they have a training of 3 months around C/C++/Python/Software Testing/Electronics and the part where I'm training them: embedded linux.
As you might have already guessed they don't have that much time to consolidate their knowings so when they arrive to my 5 day training on Embedded Linux they don't know much about compilation, Makefile, CPU architecture or even Linux.
The subject I'm giving them is to develop C program that will read an I2C sensor using a real boards and sensors (not raspberry pi, real industrial eval boards). Once the software is developped we are integrating it using Yocto (basically an Embedded Linux distribution generator).
Even given their initial low level, they end up going through the training, it's very hard for them of course but we get there, so it's definitevely in their reach.
The problem I'm facing is that they are not very happy about what they did because of all the suffering that was needed, but I don't really know how to introduce small victory without giving them every thing and keeping them from learning stuff.
Besides the introduction on Linux, Yocto, CPUs, compilation I'm giving the first day, I'm also giving them high level instructions to guide them through their learning and of course my full support during the session.
My high level instructions are more like a plan for example : develop a Hello World, cross compile it, bring it on target (using scp), integrate it using Yocto, plug in the sensor (read the schematic of the board to find the proper GPIO), use i2ctools to detect the sensor on target, read a simple register on the target using C, read the temperature, write a proper userspace application ...
During the session if they are blocked on a problem I'll give them some help and/or proper documentation. Plus of course I walk around the room asking if any one needs help and I ask them questions about what they are currently doing.
So what I'm really wondering is how to make them being satisfy with what they have achieves even if that was hard.
With embedded systems it's true that most of the time you're struggling because you have partial informations, because your system is not standard or even because you're knowledge is not enough for the task at hand, so in the end you are always in the dark until you figured out all your problems and voilà it works you're supposed to be satisfied. How can I help them while they are in the dark and guide them through that final satisfaction that they seems to be completely missing?
How would you guide them so that they are satisfied about their learning without first showing (even partially) the answers? For example I rather have them write the worst buggy piece of code before telling them "may be we should refactor your code with init functions write functions and so on so that we know what piece of it is problematic", instead of directly giving them a template with a structured code and empty function. I think it's a good thing to learn through errors mostly in that kind of context where it's safe to fail.
How do you guys handle that kind of situation ?