Als eerste wil ik ff kwijt dat ik deze topic niet open als flamebait. Ik wil gewoon serieus weten of Java tegenwoordig echt wel productief kan zijn.
In een ander topic stelde ik dat Java een stuk minder productief is dan .NET. Dit baseerde ik vooral uit mijn eigen ervaringen tijdens het bouwen van een grote SOA oplossing. De .NET en Java ontwikkelaars moesten soortgelijke services bouwen. Hierbij ging het in .NET opvallend vaak sneller.
Nu ben ik rond gaan vragen bij collega architecten/consultants/senior developers wat hun ervaring was. En om te vergelijken werd er natuurlijk weer gewezen op FPA (functie punten analyse... damn I hate those). En over het algemeen werd gesteld dat je met Java ca. 12 uur per Functie Punt doet, .NET 6-7 per Functie Punt, en Oracle 4-5 per Functie Punt. Opvallend is dat er nog weinig bekend was, op het gebied van FPA, over bijv. Ruby on Rails.
Iets wat gesteld werd was dat Java programmeurs het heeerlijk vinden om te programmeren, en er niet per se veel aan doen om productief te zijn. Nu vroeg ik mezelf af of het uberhaupt niet geld voor alle 3GL (Java, C#, Smalltalk etc) talen. Wil je een substantiële hogere productiviteit zul je denk ik meer richting model gedreven omgevingen moeten, of DSL's die toegespitst zijn op een bepaald domein. Talen waar je veel plumbing moet doen, verliezen productiviteit doordat een programmeur veel code schrijft die direct gerelateerd is aan de gevraagde functionaliteit (laten we het non functional code noemen.). Daarom zie je ook dat static typed talen zo enorm veel patterns (GoF factory pattern, strategy pattern, etc) hebben die er puur voor zijn om je code overzichtelijk flexibel, en gestructureerd te houden. Er zijn tig frameworks om delen van applicaties te genereren/configureren/declareren.
Maar wat in deze tijd van crisis sowieso een goede vraag is om te stellen is : "Zijn we met de huidige talen/platforms wel op het juiste pad? Moet er niet compleet out of the box gedacht worden?"
Ik begin bewust met Java aangezien het in de praktijk blijkt het minst productieve platform te zijn. Dus hoe kan de industrie nu al jaren accepteren dat er zo langzaam gewerkt wordt? Ik heb me echt dood lopen ergeren aan het feit dat wanneer er nieuwe dingen gevraagd worden van Java ontwikkelaars, dat opeens alle wielen opnieuw uitgevonden moeten worden.
Voorbeeld van een discussie tussen een architect en een Java ontwikkelaar
Nu zullen een aantal mensen zeggen dat als je een fabriek/ontwikkelstraat hebt, dat de keuzen voor je gemaakt zijn. En dat is deels waar, maar in de praktijk zijn die straten technologie georienteerd. Wat dus betekend dat ze zich vooral focussen op het technische probleem domein. Wanneer ze geconfronteerd worden met een nieuwe toepassing die functioneel lijkt op een andere, maar technisch anders is. Moet het wiel opnieuw uitgevonden worden. De programmeur ziet niet direct wat de beide toepassingen gemeen hebben.
Nu ben ik zelf van mening dat programmeerwerk maar 30% van de kosten van een gemiddeld project behelzen. De rest gaat in het uithoren van de klant, functioneel testen, project management, deployen, requirements/specificaties opstellen, en communicatie.
Dus ik zie vooral heil in methoden en platforms die zowel het programmeerwerk als beheer, requirements management, test en deployment omvatten. En dit alles in een vaste set aan tools aanbiedt. Waarbij liefst op een hoger abstractie niveau dan de gangbare talen zoals C# en Java geprogrammeerd wordt. Er wordt gefocussed op het probleem domein van de business. Vanuit dat domein worden er vertalingen gemaakt naar pattern en practices. Deze patterns zijn van een hoger niveau dan de GoF patterns, en zullen zich dus niet uitlaten over techniek. De patterns worden immers al onderkend door het ontwikkelplatform, en daar worden ze, met de kennis uit de context, vertaald naar de best passende technische oplossing.
Zo'n platform, is niet iets wat je even erbij ontwikkeld. Daar kun je een aardig bedrijf rondom bouwen. Dus al die kleine initiatieven overal en nergens lijden meestal tot miniscule verbeteringen in productiviteit. Maar een goede set aan tools en processen, die volgens een bewezen standaard werken. Die dus ook ontwikkeld worden met als doel om de productiviteit binnen een project te verhogen, heeft denk ik de toekomst.
In een ander topic stelde ik dat Java een stuk minder productief is dan .NET. Dit baseerde ik vooral uit mijn eigen ervaringen tijdens het bouwen van een grote SOA oplossing. De .NET en Java ontwikkelaars moesten soortgelijke services bouwen. Hierbij ging het in .NET opvallend vaak sneller.
Nu ben ik rond gaan vragen bij collega architecten/consultants/senior developers wat hun ervaring was. En om te vergelijken werd er natuurlijk weer gewezen op FPA (functie punten analyse... damn I hate those). En over het algemeen werd gesteld dat je met Java ca. 12 uur per Functie Punt doet, .NET 6-7 per Functie Punt, en Oracle 4-5 per Functie Punt. Opvallend is dat er nog weinig bekend was, op het gebied van FPA, over bijv. Ruby on Rails.
Iets wat gesteld werd was dat Java programmeurs het heeerlijk vinden om te programmeren, en er niet per se veel aan doen om productief te zijn. Nu vroeg ik mezelf af of het uberhaupt niet geld voor alle 3GL (Java, C#, Smalltalk etc) talen. Wil je een substantiële hogere productiviteit zul je denk ik meer richting model gedreven omgevingen moeten, of DSL's die toegespitst zijn op een bepaald domein. Talen waar je veel plumbing moet doen, verliezen productiviteit doordat een programmeur veel code schrijft die direct gerelateerd is aan de gevraagde functionaliteit (laten we het non functional code noemen.). Daarom zie je ook dat static typed talen zo enorm veel patterns (GoF factory pattern, strategy pattern, etc) hebben die er puur voor zijn om je code overzichtelijk flexibel, en gestructureerd te houden. Er zijn tig frameworks om delen van applicaties te genereren/configureren/declareren.
Maar wat in deze tijd van crisis sowieso een goede vraag is om te stellen is : "Zijn we met de huidige talen/platforms wel op het juiste pad? Moet er niet compleet out of the box gedacht worden?"
Ik begin bewust met Java aangezien het in de praktijk blijkt het minst productieve platform te zijn. Dus hoe kan de industrie nu al jaren accepteren dat er zo langzaam gewerkt wordt? Ik heb me echt dood lopen ergeren aan het feit dat wanneer er nieuwe dingen gevraagd worden van Java ontwikkelaars, dat opeens alle wielen opnieuw uitgevonden moeten worden.
Voorbeeld van een discussie tussen een architect en een Java ontwikkelaar
Architect: Ik zou graag 3 services willen die ik via een centrale broker wil ontsluiten Java Dev: Zou je niet willen kijken naar de open-source broker X in Java Architect: Nou we hebben al een broker Java Dev: Ja maar deze kunnen we helemaal zelf aanpassen, en toespitsen op on gebruik Architect: Da's leuk, maar we hebben hier een dikke dure broker staan, dus we gebruiken die Java Dev: Ik moet nog wel even 2 weken hebben voor spike's (proof of conceptjes) om te kijken welke framework ik ga gebruiken voor xml parsing, webservice stack. Architect: Maar er is toch al een standaard Java Dev: Ja, maar het is gebleken dat dat niet erg lekker werkt. En we willen nu wat anders proberen. Java Dev: En daarbij hebben de huidige ontwikkelaars geen ervaring met Hibernate, dus die moeten nog een paar dagen inwerken. Architect: Maar is het niet beter om aan standaarden te vast houden zodat we niet steeds tijd kwijt zijn aan onderzoek Java Dev: Ja maar we moeten toch echt kijken hoe we dit specifieke probleem technisch oplossen.
Nu zullen een aantal mensen zeggen dat als je een fabriek/ontwikkelstraat hebt, dat de keuzen voor je gemaakt zijn. En dat is deels waar, maar in de praktijk zijn die straten technologie georienteerd. Wat dus betekend dat ze zich vooral focussen op het technische probleem domein. Wanneer ze geconfronteerd worden met een nieuwe toepassing die functioneel lijkt op een andere, maar technisch anders is. Moet het wiel opnieuw uitgevonden worden. De programmeur ziet niet direct wat de beide toepassingen gemeen hebben.
Nu ben ik zelf van mening dat programmeerwerk maar 30% van de kosten van een gemiddeld project behelzen. De rest gaat in het uithoren van de klant, functioneel testen, project management, deployen, requirements/specificaties opstellen, en communicatie.
Dus ik zie vooral heil in methoden en platforms die zowel het programmeerwerk als beheer, requirements management, test en deployment omvatten. En dit alles in een vaste set aan tools aanbiedt. Waarbij liefst op een hoger abstractie niveau dan de gangbare talen zoals C# en Java geprogrammeerd wordt. Er wordt gefocussed op het probleem domein van de business. Vanuit dat domein worden er vertalingen gemaakt naar pattern en practices. Deze patterns zijn van een hoger niveau dan de GoF patterns, en zullen zich dus niet uitlaten over techniek. De patterns worden immers al onderkend door het ontwikkelplatform, en daar worden ze, met de kennis uit de context, vertaald naar de best passende technische oplossing.
Zo'n platform, is niet iets wat je even erbij ontwikkeld. Daar kun je een aardig bedrijf rondom bouwen. Dus al die kleine initiatieven overal en nergens lijden meestal tot miniscule verbeteringen in productiviteit. Maar een goede set aan tools en processen, die volgens een bewezen standaard werken. Die dus ook ontwikkeld worden met als doel om de productiviteit binnen een project te verhogen, heeft denk ik de toekomst.
Dè developers podcast in je moerstaal : CodeKlets Podcast