In my quest to learn C very well over the past few years, I&#x27;ve come to the conclusion that C is best understood if you think about it in terms of the way that an assembly language programmer would think about doing things.  An example of this would be if you consider how switch statements work in C.  Switch statements in C don&#x27;t really compare to switch statements that you find in other languages (eg. <a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Duff%27s_device" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Duff%27s_device</a>).<p>The issue that many students face in learning low level C, is that they don&#x27;t learn assembly language programming first anymore, and they come from higher level languages and move down.  Instead of visualizing a Von Neumann machine, they know only of syntax, and for them the problem of programming comes down to finding the right magic piece of code online to copy and paste.  The idea of stack frames, heaps, registers, pointers are completely foreign to them, even though they are fundamentally simple concepts.