I think c/c++ is better for teaching underlying programming concepts. Particularly in regards to to memory allocation and pointers. However, if one wants to learn programming for practical "I want to get a job" reasons, then Java is a solid pick I suppose.
It's valuable to eventually learn concepts like pointers and memory management.
However, they're not critical to learning programming (and increasingly becoming less relevant as compiler and languages improve automatic/checked management of memory and resources), and distract from far more important concepts like abstraction, schemas, patterns, etc. (a lot of other misfeatures in C and C++ are also bad distractions).
If learning programming then I agree. If learning computer science, then the lower level stuff is usually better for learning concepts. It all depends on your goals.
If anything, the opposite is true. Computer science does not care about pointers, nor do they care about "low level" details, since those are implementation details that are dependent on hardware.
Pointers don't show up in the formulation of computation in many models (lambda calculus models, Turing machine models, stack machine models...).
They are not particularly important conceptually (in fact, the unsafety of general pointers makes it nearly impossible to talk meaningfully about any nearly computing concepts; you need to severely restrict the discussion to pointers used safely in particular patterns, which is very hard to actually do accurately). They are merely the way that hardware generally implements "constant time" array access.
Even then, that's not true -- there is no such thing as constant time access to memory!
The fundamental concept is just maps, which is entirely obscured by the messiness of pointers.
I think c/c++ is better for teaching underlying programming concepts. Particularly in regards to to memory allocation and pointers. However, if one wants to learn programming for practical "I want to get a job" reasons, then Java is a solid pick I suppose.
hello @Alan, you have a point, Definitely.
I totally agree with you
It's valuable to eventually learn concepts like pointers and memory management.
However, they're not critical to learning programming (and increasingly becoming less relevant as compiler and languages improve automatic/checked management of memory and resources), and distract from far more important concepts like abstraction, schemas, patterns, etc. (a lot of other misfeatures in C and C++ are also bad distractions).
If learning programming then I agree. If learning computer science, then the lower level stuff is usually better for learning concepts. It all depends on your goals.
If anything, the opposite is true. Computer science does not care about pointers, nor do they care about "low level" details, since those are implementation details that are dependent on hardware.
Pointers don't show up in the formulation of computation in many models (lambda calculus models, Turing machine models, stack machine models...).
They are not particularly important conceptually (in fact, the unsafety of general pointers makes it nearly impossible to talk meaningfully about any nearly computing concepts; you need to severely restrict the discussion to pointers used safely in particular patterns, which is very hard to actually do accurately). They are merely the way that hardware generally implements "constant time" array access.
Even then, that's not true -- there is no such thing as constant time access to memory!
The fundamental concept is just maps, which is entirely obscured by the messiness of pointers.
what a great comment by Mr Fenner
Hi Alan,
Exactly, do you advice books or sites or blogs to learn the lower level stuff to better learning concepts?
Thanks