JavaOne 2008, ceremonie versus essentie
Scripttalen zijn helemaal hot. Ook hier in San Francisco. Om schijnbaar meer publiek de zaal in te trekken wordt te pas en te onpas de naam van een willekeurige taal in de titel van een sessie verwerkt. Ordinair Java kan schijnbaar niet meer. JSF *moet* je combineren met Groovy. Webservices zonder JavaFX, ja ook gewoon een scripttaal, is niet meer van deze tijd. En überhaupt software ontwikkelen zonder Ruby is ondenkbaar. Okay, ik geef ruiterlijk toe, dit is wat overdreven. En gelukkig zijn er ook sprekers die overduidelijk iets zinnigs te vertellen hebben over scripttalen. Uitblinker hierin, tot nu toe, is Neil Ford. Zijn sessie gisteren waarin hij Ruby en Groovy vergeleek was meer dan de moeite waard.
Wat deze sessie bijzonder maakte was niet de inhoudelijke vergelijking, maar de stelling waarmee hij zijn verhaal opende. In een paar minuten maakte hij korte metten met de discussie over static vs. dynamic typing. Hier gaat het hier namelijk niet om. Dit is een non-discussie. Waar het om gaat is de vergelijking ‘ceremonie’ versus ‘essentie’. En dan met name het verhogen van productiviteit door het verlagen van ceremonieel gedoe tijdens het programmeren. Minder ruis, meer ‘meat’. En dat kan zowel met statisch getypeerde talen (Scala gaf hij als voorbeeld) als met dynamisch getypeerde talen. Uiteindelijk gaat het om het verkleinen van afstand tussen intentie en resultaat. Een aardige stelling om een sessie mee te beginnen. Ook een stelling die discussie zal oproepen. Maar als we talen al willen wegen, dan kan deze stelling wel eens heel behulpzaam zijn.
Wat wel opvallend is dat scripttalen gebruikt worden om Java af te doen als inferieure taal. Om Neil Ford aan te halen, een taal met veel ceremonie en protocol. Hij betitelde Groovy als gekscherend als JDK2.0. Toch lijkt mij dit wat kort door de bocht. Ja, Java is ceremonieel en soms overdreven ‘verbose’ maar niet onoverkomelijk om de essentie van een probleem mee te ontwikkelen. Sterker, een sessie later liet Geert Bevin, auteur van het RIFE framework (wat overigens een stille dood gaat sterven, ook volgens Geert zelf), zien dat met de taal Java als uitgangspunt, veel mogelijk is. Denk aan Google’s web toolkit. AJAX applicaties maken met veel Javascriptgeneuzel is dankzij GWT relatief eenvoudig: GWT Java code komt zeer snel tot de essentie van het maken van een interactieve user interface. Nog een goed voorbeeld uit de hoge hoed van Google: Android. En dan met name de SDK waarmee Java developers mobiele toepassingen kunnen maken. Behoorlijk dicht bij de essentie. En relatief weinig ceremonie.
Neil Ford heeft gelijk. De axioma’s van talen met elkaar vergelijken is zinloos. Wat je op welke wijze met een taal kan doen daar gaat het om. Getting things done. Maar mijns inziens wel altijd binnen de context van de toepassing. Op het moment van schrijven zit ik op de grote trap van het Moscone Centre en wordt de dagelijkse drek aan commercials via een enorm scherm over mij uitgestort. Herhaaldelijk hoor ik de term ‘The Power of Java’ gevolgd of voorafgegaan aan een reden waarom Java zo geweldig is. Maar volgens mij is de essentie van dit soort boodschappen vrij simpel: Zolang ‘Getting things done’ met minimale inspanning mogelijk is, zit er Power in de taal Java (en daarmee in deze conferentie).



Jammer dat je javascript samentrekt met “geneuzel” JS is ondertussen een volwassen programmeertaal met meer in z’n mars dan alleen “AJAX” dingetjes.
Verder ben ik sterk van mening dat JS niet te genereren valt, tenminste, niet als je fatsoenlijke, onderhoudbare code wilt opleveren die ook nog eens performt. Vergeet niet dat het een geinterpreteerde taal is, die qua snelheid ver onder gecompileerde talen zit. Optimaliseren is dus juist in een taal als JS van levensbelang als je wat meer doet dan een mouseover of een xhr.
Rikkert Koppes - mei 9, 2008 9:47
“static vs. dynamic typing is een nondiscussie”
Dit vind ik een grappige uitspraak. Het lijkt alsof hij hiermee wil zeggen dat Groovy dus net zo goed is als Scala
Voordelen van static typing: Veel fouten kunnen tijdens compilatie opgespoord worden. Het voorkomt dus runtime fouten en je hoeft niet minder code te (unit)testen. Refactoring is makkelijker en de tool support is beter (kan beter zijn, het is nog even wachten op de goed werkende scala eclipse plugin..). En het lijkt erop alsof het ook veel beter performed. Maar misschien ben ik niet helemaal subjectief.
Remco Bos - mei 9, 2008 10:41
Het blijft altijd leuk om talen te vergelijken, maar er is mijn inziens geen winnaar, iedere ‘turing complete’ taal is in staat om een oplossing te maken voor dezelfde problemen. Het gaat erom of een probleem eenvoudiger is op te lossen in een taal (t.o.v. een ander).
Of een scripting taal daarin beter is…. soms wel. Van de andere kant geef je zelf al het voorbeeld van wanneer het omgekeerde ‘beter’ is: gwt (java boven javascript). En hiermee is denk ik een ander punt aan de vergelijking toegevoegd, dat libaries/frameworks van een taal een rol spelen.
Is het misschien niet zo dat de keuze van een oplossingsrichting (taal+ontwerp) voor een probleem grotendeels afhankelijk is van de libraries en bibliotheken die je nodig hebt. Simpel voorbeeld, als ik een simpele CRUD applicatie wil maken zonder spannende eisen, dan kies ik een framework wat daarin uitblinkt bijv. Rails en daarmee de taal ruby. Echter als een andere taal een gelijksoortig framework heeft dan is die taal wellicht net zo geschikt.
Verbosity gaat dan waarschijnlijk toch maar een kleine rol spelen in de te behalen velocity bij het ontwikkelen.
Oh en ik moest gelijk denken aan dit artikel + discussie:
http://ola-bini.blogspot.com/2008/04/pragmatic-static-typing.html
de mooiste flamewar in tijden
Arjen van Schie - mei 9, 2008 14:39
@remco bos: “Het lijkt alsof hij hiermee wil zeggen dat Groovy dus net zo goed is als Scala ;)”
Volgens mij is dit inderdaad precies wat Okke probeert te zeggen; het gaat er uiteindelijk om dat je je werk binnen de gestelde tijd gedaan krijgt en dat het resultaat onderhoudbaar is…. en het liefst doe je dat met zo min mogelijk onnodige ‘ruis’!
Peter Maas - mei 13, 2008 8:42
@peter:
Minder ceremony is prima. Maar ik vind ‘het’ geen non-discussie omdat ik geloof dat er wel degelijk verschil in kwaliteit is (qua onderhoudbaarheid, betrouwbaarheid en performance).
Remco Bos - mei 16, 2008 10:07
Rikkert: “Vergeet niet dat het een geinterpreteerde taal is, die qua snelheid ver onder gecompileerde talen zit.”
In de nieuwste browsers wordt JavaScript omgezet naar bytecode (geen Java bytecode, maar wel hetzelfde idee) en is dus niet puur een geïnterpreteerde taal meer. Zie bijvoorbeeld SquirrelFish, de nieuwste JavaScript interpreter in Safari: http://webkit.org/blog/189/announcing-squirrelfish/
Jesper de Jong - juni 3, 2008 16:23