linguaggio di programmazione da imparare che possa essere potente e versatile
Potente e versatile è un concetto troppo generico. I linguaggi hanno tutti punti di forza e di debolezza e dipende dal caso d'uso, se uno è più o meno adatto.
che mi permetta di programmare applicazioni native per Android e iOS (e non solo)
C'è una premessa doverosa da fare, ovvero separare linguaggio da librerie e framework. C++ ti consente di lavorare ovunque ( per esempio ), ma non è di facile utilizzo per lo sviluppo mobile. Invece ha molti più strumenti "user friendly" lato desktop e server.
Per cui devi già cominciare a scegliere se per te è più importante la semplicità d'uso, le prestazioni del software generato, la portabilità verso altre piattaforme.
Per esempio, puoi usare Java o Kotlin + il SDK ufficiale per realizzare app Android. Ma Java ti aiuta poco e niente su iOS e dovrai usare un framework multipiattaforma apposito, tipo MultiOS.
Per questo dicevo che bisogna separare linguaggi e librerie/framework. Perchè, bene o male, riesci a trovare un port di un dato che ti fornisce supporto per una piattaforma che teoricamente non avrebbe dovuto supportare. Ma il linguaggio da solo non ti consente di realizzare il prodotto finito.
Per cui devi puntare su strumenti multipiattaforma, almeno se per te è fondamentale poter realizzare un unico programma che giri ovunque.
Il problema è che non esiste uno strumento che copra mobile e desktop ( e magari web ) in maniera soddisfacente.
Sul fronte mobile hai React Native, Nativescript, Xamarin, Flutter, Qt e qualche altro.
Il primo è molto famoso ed usato. Personalmente non mi entusiasma, per via della complessità e fragilità dell'ecosistema e perchè sono un fissato delle prestazioni estreme.
Xamarin ha il vantaggio di usare i linguaggi .NET ( C# e VB ) e questo ti dà modo di imparare un linguaggio utilizzabile in ambito server e desktop. Performance superiori a React Native e Nativescript, ma non entusiasmanti. E imho ha troppi bug.
Qt è usato ovunque, in accoppiata con C++ e Python, e quindi è quello che ti offre una copertura totale su tutti i fronti. Però non è certo di facile utilizzo. Ma in accoppiata con C++, produce software estremamente performante.
Flutter, è imho la scelta migliore per lo sviluppo mobile. E' cross-platform ovviamente. Genera software performante. Soprattutto è un framework giovane, basato su criteri moderni, prodotto da Google ( che produce pure Android ), molto produttivo e semplice da imparare ed usare. Supporta ( in beta per ora, ma è usabile ) lo sviluppo web. In futuro arriverà pure il supporto a Linux, Windows, macOS, che per ora è in alpha. Flutter usa il linguaggio Dart.
Il discorso cambia se devi realizzare giochi. Perchè esistono Unity, Corona, Cocos, che sono fatti apposta e supportano un gazillione di piattaforme.
Non ho trattato approfonditamente il desktop ( tranne dire che Qt lo supporta, Xamarin ti dà un bel pò di conoscenze, da integrare ovviamente, per poter usare Mono o .NET per lo sviluppo desktop, Flutter lo supporterà nel prossimo futuro ).
C'è in oltre da considerare la popolarità dei vari linguaggi. Cioè, Javascript è tra i più popolari in assoluto e conoscerlo ti permette di usarlo ovunque ( visto che è praticamente supportato ovunque ), previo studio degli strumenti necessari ( per esempio Node.js, Electron, ecc... ). Quindi non sarebbe un investimento sbagliato a prescindere.
Cioè, quello che voglio, è che ormai, sempre più spesso, c'è un disaccoppiamento tra linguaggi e librerie/framework. Tanto per fare un esempio, Golang è un linguaggio nato per i server, eppure puoi usarlo con Sciter per creare programmi desktop. E magari domani spunterà un progetto che consentirà di usarlo pure per il mobile.
Per cui c'è un ventaglio di linguaggi che andrebbero studiati in ogni caso. Imho sono C++, Javascript, Go, Python, C#, Rust ( sta prendendo piede molto velocemente e in molti ambiti, quindi in futuro diventerà un must know ), Java ( e Kotlin che ne sta mangiando il market share ).