Dipende principalmente da quali piattaforme stai mirando.
Se scegli come target solo piattaforme PC (che non sono molto esotiche), allora hai molte opzioni riguardanti il linguaggio (C ++, Java, Python, Go, ecc.) e la struttura della GUI multipiattaforma (Qt, GTK, SWT, Swing, wxWidgets, ecc. Ecc.). La portabilità non dovrebbe essere la principale preoccupazione quando si sceglie una lingua per il programma solo per PC (praticamente tutto ciò che è non specifico per OS dovrebbe essere portatile ).
Se vuoi scegliere come target PC e qualcosa di più (web o mobile), hai bisogno di un livello superiore di portabilità. Lo stile architettonico è cruciale, perché vuoi staccare pezzi specifici della piattaforma dal codice portatile. Lo stile più popolare che si rivolge ai requisiti di portabilità è architettura a livelli (il codice portabile va nel livello intermedio). Ogni livello può (e spesso lo sarà) essere scritto in una lingua diversa. Puoi prendere in considerazione la possibilità di strutturare il tuo codice a strati anche in caso di programmi solo per PC (probabilmente appariranno cose specifiche del sistema operativo).
Le possibilità linguistiche si restringono quando si prende di mira qualcosa di più del PC. A seconda di quali piattaforme particolari ti interessano, può anche rendere impossibile scrivere tutto in una lingua (a meno che tu non sia preparato per scrivere il tuo compilatore).
- Per PC e dispositivi mobili, C ++ è la scelta giusta per scrivere codice portatile (livello logico), perché tutte le piattaforme mobili tradizionali lo supportano. Per GUI mobile - Qt o soluzioni specifiche per piattaforma (Java, ObjC e C #). La scelta di Qt può velocizzare tutto (la maggior parte del codice viene eseguito ovunque) ma potrebbe essere necessaria una conoscenza di basso livello di Qt e piattaforme mobili per farlo funzionare. Più hai una GUI, più Qt sarà più redditizio.
- Nel caso in cui desideri scegliere come target PC e web, hai le lingue Java, Python e Go . Se scegli Java, avrai tutto più omogeneo (framework come GWT e Vaadin abilitano la scrittura del codice lato client in Java). Se scegli Go, avrai una lingua più giovane (più fresca) rispetto a Java, che richiede meno hotplate e non ha bisogno della VM per funzionare (meno parti coinvolte = meno problemi), ma dovrai utilizzare una lingua diversa per il web GUI (JavaScript o Dart) .
- Le cose si complicano molto se vuoi che il tuo programma funzioni su PC, web e mobile e vuoi che la versione per PC e mobile sia autosufficiente (funziona senza componente server). In questo caso non esiste una sola lingua che verrà eseguita ovunque. Probabilmente prenderei l'approccio PC + mobile per il codice logico (scriverlo in C ++) e poi, o creare collegamenti ad altro linguaggio disponibile sulla piattaforma web, o scrivere software server in C ++. Un'altra possibilità è scrivere logica in Java (approccio PC + web) e quindi scrivere (usando LLVM) un compilatore che traduca java in lingue disponibili su piattaforme mobili di destinazione. In ogni caso, è necessario un ulteriore sforzo per farlo funzionare su un terzo tipo di piattaforma .
L'elenco qui sopra non è esaustivo né completo.
Dopo aver scelto le tecnologie, raccomando progettare interfacce tra i livelli , quindi pianificare l'implementazione.