Hi,
I don´t understand what you need to know / learn.
If you can solve a a task and generate the code for it, then you are done.
Maybe you need this:
For bigger tasks: You need to divide the big task into smaller tasks and the smaller tasks into even smaller tasks. ..until you can generate the code for the tiny task. Then test the tiny program and go to the next.
or this:
Give one task to a couple of programmers and get different solutions.
Usually there is not the one and only "best" solution.
Maybe one is optimized for code size, the other for RAM size, the other for precision, to ther for low power, the other for high execution speed.
or you just need experience.
Not experience in solving similar tasks, but tasks with very different requirements.
* doing a "quick and dirty" voltmeter
* or do the high safety airbag control
In either case: A pencil and a sheet of paper may be very helpful.
Klaus