What does implementing semaphores have to with this?
When it comes to writing firmwares or an OS, nothing can substitute for hands-on experience with actual hardware.
Semaphores are important when adding support for SMT in an OS kernel.
Likewise, nails are important when building a house, but you do not learn how to build a house by studying nails.
this is a terrible analogy. I learned implementing sempahores when building a kernel. It's absolutely required to learn, a necessary step to building the "house"