Mark Guzdial at ACM (Association of Computing Machinery) writes:
I have three reasons for thinking that learning CS is different than learning other STEM disciplines.
- Our infrastructure for teaching CS is younger, smaller, and weaker;
- We don't realize how hard learning to program is;
- CS is so valuable that it changes the affective components of learning.
The author makes compelling arguments to support the claims, ending with:
We are increasingly finding that the emotional component of learning computing (e.g., motivation, feeling of belonging, self-efficacy) is among the most critical variables. When you put more and more students in a high-pressure, competitive setting, and some of whom feel "like" the teacher and some don't, you get emotional complexity that is unlike any other STEM discipline. Not mathematics, any of the sciences, or any of the engineering disciplines are facing growing numbers of majors and non-majors at the same time. That makes learning CS different and harder.
(Score: 2) by Wootery on Friday January 12 2018, @01:50PM
What about the way functions work in fundamentally different ways in different languages?
For instance, in Java, int is defined to be a 32 bit integer. In C, it can be just about anything, as the language is intended to morph to fit the target architecture. You could insist on using int32_t instead, but it's not the ordinary C way of doing things. There are related issues such as that int64_t isn't guaranteed to exist.
What about different object models? What about garbage collection? Availability of unsigned primitive types? Lazy vs strict evaluation? Dynamic types vs static types vs untyped? Existence of null? Some languages don't even have explicit parameters in the first place (Forth).
Writing a good binding isn't always trivial busywork; resolving a genuine impedance mismatch is going to take real work. Where there is little impedance mismatch, binding-generator tools have been around for years (SWIG).