4 ms·
I have heard the argument about particularly java being a horrible language for teaching CS, and that it gives you terrible habits. I've heard it both here and
by mixmax 19y ago
I have heard the argument about particularly java being a horrible language for teaching CS, and that it gives you terrible habits. I've heard it both here and other places - so it's most probably right.
Not being a seasoned programmer I don't quite understand why. Would it be possible for someone to explain the reasoning behind this?
- PieSquared 19y agoAt least one reason is that it hides too much from you. I started out in Java. It really got me into programming - I could make all these pretty little windows and graphics and do everything else quickly and easily. But, as I later found out, at the expense of that ease came my knowledge. Example: The ArrayList class. It's a dynamic array. The LinkedList class. It's a linked list. They're fundamentally different. But in Java, they look and act pretty much the same, and they're already available in the standard library. The learning programmer doesn't need to know how they work or anything. Same thing with memory. In Java, you get no feel for what memory is being used, or how it's being managed. In C, you're the master (and the slave), and you yourself have to manage and take care of memory and pointers. It tells you much more about how computers actually WORK when you're programming in C. In summary, Java just gives you too much. It hides you from the raw details. This is great for a production purpose language - but for a teaching language, what could POSSIBLY be worse, when the intent is to reveal and NOT hide all the small details?
- mixmax 19y agoThanks for the reply Sound like the reason you state is basically Joel Spolsky's Law of leaky abstractions. http://www.joelonsoftware.com/articles/LeakyAbstractions.html http://www.joelonsoftware.com/articles/LeakyAbstractions.htm... I started programming in PHP, and can relate to the experiences you've had with java. It's great for actually getting stuff done right out of the box, but I suspect a lot of stuff is being hidden from me. Since you seem to have gone through this process, in your experience, does this give problems later on in a production setting?
- danielmueller 19y agoThe main argument against using 'bloatware C++/Java' for teaching is that the language obscures the relevant idea/lesson at hand and so makes the learning process unnecessary harder. But the problem is that you have to define what kind of learning experience you wanted to achieve in the first place. If you use assembler as a teaching 'language' (or some similarly lowlevel language) you would show all the nitty-gritty details of what's going on, but you would probably be attacking too many points at a given time. If on the other hand you'd use a more abstract language than 'C/C++/Java', then you may loose some details along the way, but you will be able to focus much more on the algorithmical/computational part of what is being taught. So in the end it's all about what you want to learn/teach and only after that's been decided you can choose the appropriate language to best transport the lessons with.