Quote:Original post by _goatHow a computer physically does things is no more fundamental than type systems -- there's a strong case to be made that the type system is rather more fundamental than largely irrelevant implementation details like memory addresses and registers. That C# hides those things should be a strong tip off that the physical details are not fundamental at all.
C and C++ will teach you everything you need to know about the "fundamentals" of programming. I'm not talking about paradigms here, or areas of programming - I'm not talking about dynamic typing or advanced (some would argue "complete" is a better word) RTTI - I'm talking about how a computer, physically, does things. Memory addresses, offsets, alignment, registers, etc. C# hides some of these things.
What is fundamental (as far as imperative programming goes anyway) are variables, control flow and control structures, functions, and basic logic. C# and C++ both have plenty of that.
Quote:All this is true in the theory, but tell me, do you know a c++ programmer who is not farmiliar with addresses or registers ? IMO learning c/c++ implies the learning of basic machine-level programming, and every c/c++ book should at least cover bare minimum of this.I suppose that depends on perspective. From where I'm sitting, I see a lot of C++ programmers who do not understand registers or memory at all. They might think they do -- they got the textbook explanations of pointers and registers, after all -- but they only have those simplified views and very little idea of the reality of how things work.
C++ -- well, really C programmers -- will deal with pointers a lot. But how many of them understand addressing modes? Segments? Virtual memory? Pages? Page faulting? Translation lookaside buffers? All they know is the comfortable illusion of a flat memory space which has been created for them. A lot of beginners don't even realize that they can't access other programs' memory simply by setting pointers to certain values.
Learning C++ doesn't magically gain you machine level knowledge. If anything, it can create serious misconceptions about how things work.