26 mei

Lost in translation: een native app of cross-platform?

Developers creëren software door een idee te vertalen in broncode. Deze broncode wordt op zijn beurt weer vertaald naar instructies die een computer kan uitvoeren. De keuze voor de taal waarin de broncode wordt geschreven, is erg afhankelijk van het eindproduct: wordt het een website, app of desktop-applicatie? Als het eindproduct duidelijk is, houd je nog steeds een belangrijke keuze over. In deze blogpost zetten we een native app tegenover een cross-platform app.

Wat is een native app?

Een native app is een app die ontwikkeld is in de omgeving zoals de uitgever van het platform het voor ogen heeft.

Google, het bedrijf achter Android, heeft graag dat je gebruikmaakt van Android Studio. Je ontwikkelt de software dan in Java. Apple heeft een heel andere route voor ogen. Hierbij kun je aan de slag met Xcode en schrijf je de software in Objective-C of Swift.

In verband met concurrentie blijven deze partijen vernieuwen en proberen functionaliteiten aan te bieden die de rest niet heeft. Het spreekt voor zich dat deze platformen dus erg van elkaar afwijken. Als je een native app bouwt voor zowel iPhone als Android, zul je dus voor beide platformen los aan de slag moeten.

Wat is een cross-platform app?

Een cross-platform app lost het probleem van verschillende talen op door een tussenstap te introduceren. In plaats van dat je rechtstreeks te maken krijgt met een native omgeving, ontwikkel je voor deze tussenstap. Je schrijft in één taal, en de tussenstap is verantwoordelijk voor de vertaling naar de verschillende platformen. Je hoeft hierbij dus maar een keer aan de slag voor zowel Android als iPhone.

De voordelen van cross-platform

Er zijn veel voordelen aan cross-platform. Het zou niet eerlijk zijn deze over te slaan voor ik uitleg waarom je vaak toch beter voor native kan kiezen. Naast de tijdwinst bij de opbouw van de app is er ook tijdwinst te behalen bij het onderhoud; eventuele denkfouten los je over het algemeen gelijk voor alle platformen op. De taal waarin je een cross-platform app bouwt, is vaak een taal die ook gebruikt wordt door developers van websites. Zodoende zijn er meer developers die je broncode kunnen begrijpen.

Waarom dan toch native?

Om die vraag te beantwoorden is het handig om te begrijpen hoe ze het cross-platform principe voor elkaar krijgen. De door jou geschreven “tussencode” wordt vertaald naar de verschillende platformen. Eigenlijk is dat goed te vergelijken met vertalen in het echt. Je vervangt woorden uit de ene taal door die uit een andere... Of eigenlijk vervang je zinnen uit de ene taal door die uit een andere, rekening houdend met grammatica, etc. Maar wat als er een uitdrukking wordt gebruikt die in de andere taal niet bestaat? Denk eens aan de beroemde uitspraken van Louis van Gaal: http://www.voetbalprimeur.nl/nieuws/412947/de-tien-beste-engelse-oneliners-van-van-gaal.html

Een goede vertaling maken is zo makkelijk nog niet. Dit geldt ook voor de cross-platform oplossing. De verschillende platformen zijn precies dat: verschillend. Natuurlijk zijn er overeenkomsten, je wilt iets laten zien, laten horen, op touches reageren etc. Maar de manier waarop dit wordt afgehandeld en vooral de achterliggende ideologie is zo verschillend dat vaak meteen opvalt of iets native is of niet. Alsof je toerist in Frankrijk bent en iemand zegt: "Ça va?" Als jij antwoordt: "Oui ça va, et toi?" en je krijgt ineens een hele lading Franse woorden over je heen waarvan je de helft niet begrijpt. Op het eerste gezicht lijkt het alsof je dezelfde taal spreekt, maar binnen de kortste keren val je door de mand. Of je te maken hebt met een cross-platform app, kun je vaak zien door de gebruikte user interface en reactie-snelheid. Doordat dezelfde interface gebruikt wordt voor verschillende platformen ontbreken vaak de unieke details van het platform.

Makers van cross-platform oplossingen proberen het native-gevoel na te bootsen door platform-specifieke code toe te laten. Als een toerist in Frankrijk die een woordenboek heeft: hij kan vragen waar het strand is, maar ziet er nog steeds uit als een toerist. Het toelaten van platform-specifieke code wordt vaak toegepast bij demo's om te tonen hoe goed de cross-platform oplossing is, maar ze vergeten er bij te zeggen dat ze er dubbel zoveel tijd in hebben gestoken. Door het extra werk dat het met zich meebrengt, valt een belangrijke meerwaarde van cross-platform weg. 

Ook dragen cross-platform apps een groter risico. Je bent afhankelijk van een extra partij die mee moet bewegen in de dynamische, altijd veranderende wereld van app development. Het kan zomaar gebeuren dat een platform besluit om bepaalde functionaliteit op een andere manier in te zetten. Er is geen garantie dat de cross-platform oplossing deze beweging goed kan opvangen. Dit geldt in principe ook voor native code. Maar omdat die code in de ideologie en goedkeuring van de uitgever geschreven is, is de kans groot dat de impact van zo’n aanpassing kleiner is.

Dan nooit meer cross-platform?

Dat hoor je me ook niet zeggen. Er zijn situaties, zeker bij games, waar de nadelen van cross-platform minder opvallend zijn. Wel is het van belang goed te kijken naar de performance en algemene volwassenheid van de cross-platform oplossing. Is de derde partij snel in het oplossen van problemen bij bijvoorbeeld een OS update? Is die cross-platform oplossing er over een jaar nog, of moet je dan al je code opnieuw in een andere taal gaan schrijven? Als het idee niet geschikt is voor cross-platform verdient het de voorkeur om native te gaan. Al kan dat soms betekenen dat je in eerste instantie maar op één platform lanceert. Liever 100% kwaliteit op een platform, dan 50% op twee. 

Conclusie

De keuze voor native of cross-platform is erg afhankelijk van het gewenste resultaat. MaxServ staat voor kwaliteit en zal dus over het algemeen native adviseren. Loop je zelf rond met een idee voor een app en ben je benieuwd hoe wij dit zouden vertalen? Stuur dan een mailtje naar info@maxserv.com. We nemen graag contact met je op.

Geschreven door: