Deze week ben ik een opmerkelijk probleem tegengekomen m.b.t. naamgeving.
Het zit zo dat ik normaal uitsluitend intern werk als lead developer/designer. Vanaf volgende week ga ik echter voor een korte periode werken bij een ander bedrijf, dat in feite een klant is van het bedrijf waar ik nu werk. Dit bedrijf heeft een bestaande technische afdeling en ik zal hier samenwerken met een andere lead developer en tevens wat implementatie werk doen.
Om alvast voor te bereiden ben ik vrijdag middag langs geweest en hebben we een design opzet voor het project door besproken dat ik al eerder gemailed had. De persoon die daar de designs en modellering doet bleek er (mijn inziens) nogal een opmerkelijke visie op na te houden wat betreft de naamgeving. In het kort staat hij erop dat namen uit je user/problem domain niet overeenkomen met de namen in je model en de namen in je uiteindelijke sourcecode. Zoals ik het altijd heb geleerd (zowel op school als van mensen die vroeger boven mij stonden bij vorige werkgevers) is het de bedoeling dat de namen juist wel overeenkomen.
De motivatie van deze meneer was ongeveer dat vanwege het feit dat een software product in principe taal onafhankelijk ontworpen moet worden, het geen zin heeft om de namen overeen te laten komen, daar elke overeenkomst slechts op een toevalligheid van 1 bepaalde taal is gebaseerd. B.v. voor de Engelse markt is het maar een toevalligheid dat het model/design en de sourcecode ook in het Engels is; de Engelse markt is daarbij maar 1 van de velen markten en door in de modellering bewust andere termen te gebruiken dan in het user domain van de Engelse markt gebruikelijk is, koppel je deze beter los...
Concreet gaat het om het volgende. Er dient een systeem gebouwd te worden voor het reserveren van booten. Daarbij komen diverse specifieke dingen kijken (b.v. koppeling met waarschuwing voor scheepsvaart), maar alleen het concept "reserveer boot" was al aanleiding voor de hele controverse.
Uit diverse gesprekken met stakeholders bleek dat de user domain term overduidelijk "boat" (en) is.
Mijn idee was om in het design een entiteit te modelleren die "boat" heet en deze dan uiteindelijk te implementeren d.m.v. een classe "Boat". Deze term komt uiteindelijk ook weer terug in de userinterface. Als een lijst van instanties van "Boat" op het scherm wordt afgedrukt zal een tekst gebruikt worden als "List of boats", en als iemand 1 van deze selecteert "You have selected the following boat:". In het Nederlands zou de userinterface dan de meest directe vertaling gebruiken: "boot" en in het Duits waarschijnlijk "fahrzeug".
Zijn idee was echter dat het design en de source-code perse een term moest gebruiken die juist niet overeenkomt met de Engelse user domain term. Hij wilde dan ook perse de term (synoniem) "vessel" gebruikt zien in de source-code. De motivatie was dus dat de Nederlandse en Duitse termen ook niet overeen konden komen, en we Engels niet moesten gaan voortrekken. Ook melde hij nog dat het zeer gebruikelijk was om voor user domain en implementation domain termen synoniemen te gebruiken.
Nu wil ik zeker niet stellen dat ik wijsheid in pacht heb, maar ik vind dit eigenlijk maar een beetje vreemd. De boeken en online resources die ik er op na sla lijken allemaal te zeggen dat de namen juist wel overeen moeten komen.
Nu moet ik echter nog veel leren op het gebied van modelering, dus ik vraag me af of mensen die hier wat meer ervaring mee hebben kunnen vertellen of het inderdaad zo is dat namen juist niet overeen moeten komen.
Het zit zo dat ik normaal uitsluitend intern werk als lead developer/designer. Vanaf volgende week ga ik echter voor een korte periode werken bij een ander bedrijf, dat in feite een klant is van het bedrijf waar ik nu werk. Dit bedrijf heeft een bestaande technische afdeling en ik zal hier samenwerken met een andere lead developer en tevens wat implementatie werk doen.
Om alvast voor te bereiden ben ik vrijdag middag langs geweest en hebben we een design opzet voor het project door besproken dat ik al eerder gemailed had. De persoon die daar de designs en modellering doet bleek er (mijn inziens) nogal een opmerkelijke visie op na te houden wat betreft de naamgeving. In het kort staat hij erop dat namen uit je user/problem domain niet overeenkomen met de namen in je model en de namen in je uiteindelijke sourcecode. Zoals ik het altijd heb geleerd (zowel op school als van mensen die vroeger boven mij stonden bij vorige werkgevers) is het de bedoeling dat de namen juist wel overeenkomen.
De motivatie van deze meneer was ongeveer dat vanwege het feit dat een software product in principe taal onafhankelijk ontworpen moet worden, het geen zin heeft om de namen overeen te laten komen, daar elke overeenkomst slechts op een toevalligheid van 1 bepaalde taal is gebaseerd. B.v. voor de Engelse markt is het maar een toevalligheid dat het model/design en de sourcecode ook in het Engels is; de Engelse markt is daarbij maar 1 van de velen markten en door in de modellering bewust andere termen te gebruiken dan in het user domain van de Engelse markt gebruikelijk is, koppel je deze beter los...
Concreet gaat het om het volgende. Er dient een systeem gebouwd te worden voor het reserveren van booten. Daarbij komen diverse specifieke dingen kijken (b.v. koppeling met waarschuwing voor scheepsvaart), maar alleen het concept "reserveer boot" was al aanleiding voor de hele controverse.
Uit diverse gesprekken met stakeholders bleek dat de user domain term overduidelijk "boat" (en) is.
Mijn idee was om in het design een entiteit te modelleren die "boat" heet en deze dan uiteindelijk te implementeren d.m.v. een classe "Boat". Deze term komt uiteindelijk ook weer terug in de userinterface. Als een lijst van instanties van "Boat" op het scherm wordt afgedrukt zal een tekst gebruikt worden als "List of boats", en als iemand 1 van deze selecteert "You have selected the following boat:". In het Nederlands zou de userinterface dan de meest directe vertaling gebruiken: "boot" en in het Duits waarschijnlijk "fahrzeug".
Zijn idee was echter dat het design en de source-code perse een term moest gebruiken die juist niet overeenkomt met de Engelse user domain term. Hij wilde dan ook perse de term (synoniem) "vessel" gebruikt zien in de source-code. De motivatie was dus dat de Nederlandse en Duitse termen ook niet overeen konden komen, en we Engels niet moesten gaan voortrekken. Ook melde hij nog dat het zeer gebruikelijk was om voor user domain en implementation domain termen synoniemen te gebruiken.
Nu wil ik zeker niet stellen dat ik wijsheid in pacht heb, maar ik vind dit eigenlijk maar een beetje vreemd. De boeken en online resources die ik er op na sla lijken allemaal te zeggen dat de namen juist wel overeen moeten komen.
Nu moet ik echter nog veel leren op het gebied van modelering, dus ik vraag me af of mensen die hier wat meer ervaring mee hebben kunnen vertellen of het inderdaad zo is dat namen juist niet overeen moeten komen.
It's shocking to find how many people do not believe they can learn, and how many more believe learning to be difficult.