4 ms·
The author seems to be claiming that higher-level languages are easier or less valuable for learning CS. I don't think that's true. Sure, it's easier to learn t
by Zak 16y ago
The author seems to be claiming that higher-level languages are easier or less valuable for learning CS. I don't think that's true. Sure, it's easier to learn to write "hello world" if there's no boilerplate, but that just means there's less between the programmer and the algorithms. "Too easy" is not one of the common complaints about SICP.
Java, of course has little place in a CS education. It's not even a good introduction to OO. Institutions who want to teach Java should probably call their degrees "Enterprise software engineering" or some such.
- sukuriant 16y agoFrom what I understand, accreditation the result of a mix of desires from the different companies that support the accreditation. Java exists as a major language because companies want to be able to look at a degree from a certain, accredited college and trust that that degree means the person knows how to do {x,y,z}. If Java is required for accreditation, that means that companies want someone claiming a Computer Science degree to know how to work with Java.
- macdonald 16y agoI disagree that Java is inherently wrong for CS education. It ultimately depends on what you decide to teach using it (i.e. it's concepts that are being taught, the languages are only the carrier). It's possible to teach courses in data structures, algorithms, and so on using Java, just as it's possible to use it as a gateway to other languages like Python and C.
- Zak 16y agoJava puts boilerplate between the programmer and the algorithms and data structures without allowing direct control of the memory. Python, Scheme, Haskell and many others do it without the boilerplate, while C and any of many assembly languages require that the student learn what the hardware is actually doing.
- strlen 16y agoSlightly of topic rant here on the topic of learning to program: The first language I programmed in was Pascal (Turbo Pascal 5 and 7 to be precise), at the age of twelve. It was a great language for several reasons: it was mostly imperative (meaning I didn't have to try to gasp objects right away; there were OO extensions, but I didn't have to use them initially), statically typed (meaning I did have to learn about interfaces and implementations), allowed for raw memory access (so you could learn about pointers and memory management) while having "real" arrays and strings (so you could learn these concepts and write basic programs before learning pointers). Going from Pascal to C (at the age of 14) was easy for me, including dealing with the fact arrays and strings (as my handle suggests) are pointers (I know what pointers were and how to deal with them, while at the same time knowing what strings and arrays are for). Moving to C was a necessity, as I was finding myself writing far too much inline assembly without actually knowing assembly (Google "Why Pascal is not my favorite language" for the reason why), but it was much smoother than learning programming from scratch with C. In college/university, the CS courses were all taught in C which, I think, gave me somewhat an unfair advantage over students who didn't program before coming to university (unfortunately, as a transfer student I was exempt from the "great equalizer" class which forced everyone to learn Haskell). It's sad that schools these days face the choices of: teaching C which forces students to deal with issues tangential to what they're learning, teaching Java or Python which exclude very important aspects of programming and data structure implementation, or teaching a language which likely no longer even has a stable and widely available implementation but is more suited for the "pedagogic" role. Out of these choices, I believe C is the less wrong, but not the optimal choice.