Voor softwareontwikkeling is het moeilijk kiezen tussen Java en C#. Beide talen zijn de vervulling van een belofte om toekomstzekere en platformonafhankelijke applicaties te kunnen bouwen. Kiezen is lastig, want het Salomonsoordeel hoeft al lang niet meer tussen Microsoft of Sun Microsystems te worden geveld, omdat de ondersteuning op verschillende platformen ronduit goed te noemen is.
Begin jaren negentig van de vorige eeuw werd de programmeertaal Java ontwikkeld door een dochterbedrijf van Sun Microsystems. Het systeem is aantrekkelijk, omdat de programmeertaal relatief eenvoudig is te leren en veelvoorkomende fouten met geheugenbeheer automatisch voorkomen worden door de manier waarop Java werkt. De gemaakte applicaties zijn platformonafhankelijk dankzij virtuele machines, die de verschillen tussen de verschillende platformen opvangen. Hiervoor wordt de broncode omgezet naar een tussenformaat, bytecode, om vervolgens ‘Just In Time’ te worden verwerkt voor uitvoering. Dit in tegenstelling tot bijvoorbeeld een taal als C of C++, waarbij de code wordt omgezet in een platformafhankelijke machinetaal. Een bijkomend voordeel van die aanpak is dat zo’n omgeving optreedt als een sandbox die een beschermde omgeving biedt. Omdat de rechten goed kunnen worden geregeld, is misbruik lastig en is de taal erg geschikt om programmatuur via het web te distribueren.
Voor Microsoft was het niet mogelijk veel eigen wijzigingen in de taal door te voeren en beantwoordde de programmeertaal met een alternatieve .NET, waarbij theoretisch iedere programmeertaal gebruikt kan worden om platformonafhankelijk te werken. Dit is mogelijk dankzij het mechanisme dat de broncode omzet in een andere taal, de CIL (Common Intermediate Language). Deze CIL wordt gebruikt voor het distribueren van de applicaties naar de gebruikers toe. Dit tussenformaat wordt eenmalig door een .NET-tussenlaag omgezet in een uitvoerbaar formaat dat goed past bij het platform dat wordt gebruikt. Bij Java is het ook mogelijk om andere programmeertalen te gebruiken, waarbij dan een converter van een andere taal naar Java wordt geboden of ondersteuning beschikbaar wordt gemaakt. Ook zijn er programmabibliotheken die ondersteuning voor andere talen aan Java kunnen toevoegen. Met het .Net-platform introduceerde Microsoft de programmeertaal C# (spreek uit als see sharp), die inmiddels ook populair is geworden. Net als bij Java was ook bij het maken van deze taal C overduidelijk een grote inspiratie.
Oude wijn in nieuwe zakken
Juist omdat de overeenkomsten zo opvallend zijn, is het lastig een duidelijke winnaar aan te wijzen. De syntax heeft zo veel overeenkomsten, dat het overstappen met een relatief korte applicatiecursus te realiseren is. Daarbij zal het zwaartepunt dan vooral op de bibliotheken met beschikbare functies liggen. Beide leveranciers bieden een platform, waarbij het mogelijk is goede beveiliging te bieden voor programmatuur die via internet wordt verspreid. Maar op beide talen is ook veel aan te merken. Zo is de klacht rond Java dat er te veel achter de feiten wordt aangehobbeld, waardoor nieuwe mogelijkheden pas na verloop van tijd beschikbaar zijn. Daarbij ervaren sommige ontwikkelaars het als een belemmering dat veel functionaliteit in de omgeving wordt gestopt, waardoor de programmeertaal bijna niet verandert. Dit ‘veel functionaliteit uit weinig’ belemmert volgens sommigen de creativiteit. Bij C# is een veel gehoorde klacht juist dat het platform nooit stil staat en er veel mogelijkheden worden toegevoegd. Eind vorig jaar werd een nieuwe .NET -standaard (2.0) geïntroduceerd met allerhande uitbreidingen en verbeteringen. Door de snelle verbeteringen en het feit dat het systeem erg op Windows is gebaseerd, lopen implementaties van het raamwerk om CIL-code op andere platformen te draaien altijd achter op Microsoft en zijn applicaties toch niet zo portable.
Ook qua vernieuwing voegen Sun en Microsoft weinig nieuws toe. Zo leek Java bij de introductie wel heel innovatief, maar was het volgens experts oude wijn in nieuwe zakken. “Vanuit het oogpunt van programmeertaalontwikkeling was Java niet vernieuwend”, zegt Peter Roozemaal, zelfstandig software engineer en software auditor. “Objectgeoriënteerd programmeren was er al. Java is als programmeertaal een conservatieve implementatie van de objectgeoriënteerde ideeën. Technisch goed geïmplementeerd, dat wel.” Volgens hem bestond de vernieuwing vooral uit de ‘zandbak’ waardoor veilig code van het net kan worden opgehaald en op de computer kan worden uitgevoerd. Hierbij hoeft de gebruiker niet bang te zijn dat het systeem vernield wordt.
“Wel goede engineering.”
Het initiatief van Microsoft vindt een vergelijkbaar onthaal bij de expert. “Java was al niet vernieuwend en C# is een kopie van Java. Wat innovatie betreft slaapverwekkend dus”, betoogt Roozemaal. Hij benadrukt dat er wel een onderscheid moet worden gemaakt tussen de programmeertaal C# en .NET als een platform voor softwaredistributie. “Het idee voor een bytecodeplatform voor verschillende talen is ook al oud en .NET werkt daarom best goed.” Dat betekent niet dat alles ook automatisch beter is geworden. Roozemaal ziet een nieuw beveiligingsprobleem opdoemen: “Het probleem is dat Microsoft het beveiligingsmodel van Java herontworpen heeft en het zo complex gemaakt heeft dat het niet simpel te gebruiken is. Daarmee is .NET minder geschikt voor applets.” Volgens hem zijn veilige systemen juist niet complex om zo het overzicht te bewaren.
Compatibiliteit
Inmiddels zijn beide talen goed ingeburgerd in de ict-industrie en vervullen ze een cruciale rol in het bedrijfsleven. Softwareleverancier Mensys levert oplossingen voor het inmiddels door IBM afgezworen OS/2-platform. “De meeste software die ik schrijf, wordt binnen Mensys gebruikt op OS/2, maar dat is een doodlopend pad”, vertelt David van Enckevort, ontwikkelaar bij het bedrijf. “Als ik nu in Java ontwikkel, kan ik de software voorlopig onder OS/2 draaien, en zodra men overschakelt draait het even goed op Linux als op Windows, dus we hebben de keuze waar we naartoe gaan.” Hij wijst erop dat Java op alle drie platformen gecertificeerd is. C# schiet wat hem betreft te kort, omdat de .NET-ondersteuning voor de DB/2-omgeving is gelimiteerd tot het Windows-platform. Het softwarehuis is daarbij erg gericht op IBM en die richt zich met de Eclipse-ontwikkelomgeving helemaal op Java. Zijn bedrijf is op open source gericht en daarom is Van Enckevort erg gecharmeerd van de brede beschikbaarheid van ontwikkelbibliotheken onder open-sourcelicenties.
De programmeur heeft zich bij de keuze niet druk gemaakt over een stammenstrijd tussen C# en Java. De compatibiliteit van de taal met verschillende platformen was voor Van Enckervort belangrijker dan eventuele voordelen rond mogelijkheden, snelheid of gemak van ontwikkeling. Dat betekent niet dat hij het gevoel heeft een mindere keuze te hebben gemaakt. “Ik ben wel erg tevreden over de stabiliteit van Java. In de afgelopen jaren heb ik maar één keer een Java-specifiek probleem met stabiliteit gehad”, herinnert de ontwikkelaar zich. “Over de snelheid van Java kan ik nog wel wat zeggen, namelijk dat ik er erg van onder de indruk ben tegenwoordig. Java had altijd de naam traag te zijn, maar in mijn ervaring is mijn Java-code voor interactie met onze database niet significant trager dan andere code.” Om het werken efficiënter te maken zou de ontwikkelaar wel graag zien dat de documentatie van Sun uitgebreider op onderwerpen in gaat, iets wat bij Microsoft wel het geval is.
Dat probleem rond documentatie hebben meer ontwikkelaars, die graag uit de omgeving halen wat erin zit. “Het kost veel tijd om snel je weg te vinden in de uitgebreide libraries die bij Java horen”, betoogt Simon Asselberg, zelfstandig interaction designer. Toch koos hij wel voor Java, waarbij de platformonafhankelijkheid en kwaliteit van programmatuur de belangrijkste beweegredenen waren. “Verantwoordelijkheidsgevoel en service betekent houden van het product en de techniek waarmee je werkt”, betoogt hij. “Java is een taal die wat mij betreft goede code-praktijken voor programmeurs ondersteunt. Het is aan de programmeur om daar gebruik van te maken en ook netjes te werken.” Op dit moment wisselt Asselberg nog wel eens van programmeertaal, waarbij zijn voorkeur duidelijk naar open source software uitgaat. Uiteindelijk hoopt hij dat open source implementaties van Java zich verder ontwikkelen en er grafisch meer tools beschikbaar komen. Of het dan ‘zijn’ ultieme taal is valt zelfs dan nog te betwijfelen. “Op webfrontend-gebied is Flash vaak een serieus alternatief.”
.Net en open source
Wie daarmee denkt een onderscheid tussen Java en C# te kunnen maken op basis van Windows- versus open-sourceplatformen komt bedrogen uit. Ook een groot gedeelte van de open-sourcegemeenschap heeft .NET omhelsd. Zo is er het Mono-project dat zich tot doel heeft gesteld een open source implementatie van .NET te maken, zodat het ook op niet-Windows-besturingssystemen werkt. Volgens Frank Rego, product manager voor de Linux Desktop is .NET-ondersteuning een perfecte mogelijkheid om Windows-applicaties op Linux te draaien. De implementatie wordt gemaakt op basis van de beschrijving zoals deze door Microsoft bij de ECMA als standaard is ingediend.
“Met Mono maken ook wij een CIL-interpreter, waardoor ook wij taal-agnostisch zijn”, vertelt Miquel d’Icaza, projectleider en medewerker bij Novell. “We bouwen ook aan een implementatie van C#, waarbij ik zie dat de talen sterk op elkaar lijken. Ik zie het als Java 2.0.” Hij ziet in de taal veel nieuwe mogelijkheden, zoals verwijzigingen die ‘delegates’ genoemd worden en die het bouwen en aanpassen van grafische applicaties veel eenvoudiger maken. Novell-dochter SUSE maakt intensief gebruik van de mogelijkheden van het Mono-project voor nieuwe applicaties in de komende desktop Linux-versie. “De meeste applicaties die we introduceren, zijn in een recordtempo geschreven”, weet d’Icaza, “We denken niet dat we hetzelfde voor elkaar hadden gekregen met Java.”
Platformonafhankelijkheid
Voor Microsoft is het belangrijker te kiezen voor .NET als platform dan een taal aan te hangen. “ “Ik vind een discussie C# versus Java onzinnig. Programmeurs moeten zelf de programmeertaal kiezen waar ze zich het lekkerst bij voelen”, zegt Wim Hoek, Marketing Solutions manager Developer & Platform Group. “Microsoft ondersteunt met J# ook Java. Het mooie van .NET is nu juist dat vrijwel elke taal die er toe doet wordt ondersteund. Dat zijn er nu al meer dan twintig. Men kan beter programmeurs zelf vragen waarom ze de ene taal boven de andere verkiezen. Dat is veel interessanter dan Microsoft als leverancier iets laten zeggen over waarom C# als taal zoveel beter zou zijn.” Sun Microsystems, het bedrijf dat het concept rond Java ontwikkelde, vindt het onderwerp Java versus C# een ‘achterhaalde discussie’. Voor Roozemaal is de discussie niet achterhaald, maar hij wijst er wel op dat de stammenstrijd vooral een vergankelijke kwestie van smaak is. “Op langere termijn voegen C# en Java weinig toe aan de informatica. De introductie van relationele databases is veel belangrijker geweest.”
Woordenlijst
Sandbox = netwerk of reeks netwerken die niet zijn aangesloten op andere netwerken
Portable = te verplaatsen van de ene naar de andere plek
Bytecode = machineonafhankelijke binaire code die wordt gegenereerd door de Java-compiler en wordt uitgevoerd door de Java Virtual Machine
Applets = kleine programma’s die in een webbrowser draaien
Libraries = bibliotheken van gecompileerde code van functies die aangeroepen kunnen worden door uitvoerbare programma’s
C# onmisbaar voor Sun Java desktop
Dat de verschillen tussen de programmeertalen vooral een kwestie van smaak en minder van strategische keuze zijn, wordt duidelijk uit de Linux-desktop die Sun Microsystems zijn klanten aanbiedt. Het bedrijf heeft voor de Sun Java Desktop een overeenkomst gesloten met Novell. Deze softwarebouwer is ook de trekkende kracht achter het Mono-project dat de facto open source implementatie van het .NET-framework is. Als belangrijkste taal voor dat project wordt C# aangegeven.
Als SUSE in de zomer met de nieuwe versie van de desktop komt zijn de belangrijkste verbeteringen volgens Novell gebouwd met C#. Tenzij Sun Microsystems een andere leverancier voor de desktop kiest, zal de Sun Java Desktop ‘C#-powered’ zijn!