Op de Tu-Delft word op in het eerste jaar van de studie Technische Informatica alleen maar Java gegevens. Alles gebeurd in java. In het tweede jaar komen daar nog wel prolog, haskell en C bij maar Java blijft de hoofdmoot.
Ja, en dan in het derde jaar krijg je het practicum Embedded Systems (voorheen alleen voor Elektrotechniek maar tegenwoordig ook voor Informatica-studenten), en dan blijkt dat zowel bij ET als bij IN er fundamentele kennis ontbreekt doordat men vrijwel alleen Java heeft gehad. Een medestudent omschrijft deze mensen treffend als de "Java generatie". Degenen die het zichzelf niet hebben aangeleerd (oftewel ruim 95%) weten vrijwel niks van programmeren in C of van efficiënt programmeren, met als gevolg dat er door de meeste mensen tijden worden neer gezet van ver boven de seconde (het gaat hier overigens om een 256-punts FFT, uitgevoerd op een 80C552 microcontroller van Philips met een externe klok van 15 MHz), terwijl het record (in assembly) op 198 ms staat. Daarnaast wordt bij alles dat in C niet kan of niet kan zoals men vindt dat het hoort te kunnen het trieste excuus "Java kan het wel" gebruikt, ook als het niet waar is - zo zijn er bijvoorbeeld opvallend veel mensen die glashard beweren dat je in Java kunt machtsverheffen met de ^ operator.
Nog even je andere argumenten onderuithalen:
Java sneller? Hooguit minder langzaam.
Schoonheid van code? HAHAHAHAHAHAHAHAHA! Hier hoef ik verder niet op in te gaan lijkt me.
Leesbaarheid van de code? Bepaald niet, aangezien Java voor veel dingen veel meer code nodig heeft dan C, en bovendien pseudo-low level is - waar slaat het op dat ik om een FileReader een BufferedReader heen moet plaatsen? Het bufferen van I/O is een taak van het OS, niet van de programmeertaal. Wanneer je applicaties schrijft in C (wat van oorsprong toch een systeemprogrammeertaal is) hoef je je hier helemaal niet druk over te maken, en terecht. Verder maakt de geforceerde objectgeoriënteerdheid van Java de code ook een stuk minder leesbaar. Het slaat nergens op dat ik m'n main in een class moet zetten, en het slaat ook nergens op dat je System.out.println moet gebruiken in plaats van puts. Maar ja, Java heeft geen functies, dus gaan ze maar een of ander debiel System object uit hun duim zuigen waar vervolgens weer een out aan vast zit, en daar hangen ze dan de eigenlijke functie (in OO-kretologie een methode, geloof ik) aan. Het is compleet onlogisch en arbitrair, zowel voor de beginnende als voor de gevorderde programmeur.
Makkelijke manier om te debuggen? Het tegendeel lijkt me waar. C programma's zijn met kennis van x86 assembly nog enigszins op machinecode-niveau te debuggen, bij Java niet (ervanuit gaande dat je het voor een JVM gecompileerd hebt), omdat je dan op het niveau van die rottige Java bytecode werkt en daar wil niemand zich toe verlagen...