I agree with both of you to some extent.  Despite the fact that C implements its own semantics, those semantics are downright bizarre and hard to gain intuition about unless you have some mental model of the machine.<p>For example, here are some of the things that confused me when I first learned C:<p><pre><code>    - why isn&#x27;t there an actual string data type? (just char*)
    - why do some people use &quot;char&quot; to store numbers?
    - whats the deal with pointers?
    - why are pointers and arrays kinda sorta interchangeable?
</code></pre>
Until I learned how things work at the assembly language level, I could not gain an intuitive understanding for why C works the way it does.