Mikä ohjelmointikieli kannattaa valita?

Ohjelmointikielen valinta voi olla vaikeaa. Pitää miettiä haluaako ohjelmointia tehdä työkseen vai riittääkö harrasteprojektien väsääminen. Joihinkin ongelmiin on juuri siihen tarkoitettuja ohjelmointikieliä. Esimerkkeinä vaikkapa tilastotieteen ongelmiin tehty R ja relaatiotietokantojen käsittelyyn SQL. Toiset ohjelmointikielet ovat monikäyttöisempiä ja keskityn niihin enempi.

TLDR;

Valitsemalla JavaScript/Python/C#/Java (tai muu JVM-kieli) ei voi mennä kauheasti pieleen. Kaikki ovat monikäyttöisiä ja alustariippumattomia. Kaikilla niillä hoituu websovelluksen backendit, komentorivisoftat, työpöytäsoftat jossain määrin, monet pilvipalveluiden hommat ja vaikka Raspberry Pin käskyttäminen. Työpaikkoja löytyy ja netti on ohjeita täynnä.

Jos meinasit pärjätä yhdellä kielellä ja modernit websovellukset kuuluvat tavoitteisiin, valitse JavaScript, koska se on ainoa kieli mitä selaimessa toistaiseksi kannattaa/voi pyörittää. JavaScriptillä onnistuu myös mobiilisoftat natiivisti tai hybridinä.

Toiseksi kieleksi tai jos moderni web ei kiinnosta, kannattaa valita C#. Sillä voi tehdä samoja asioita kuin JavaScriptillä pl. frontti (toistaiseksi, odotellaan Blazorin kypsymistä), mutta paremmin ja luotettavammin. Käytössä on maailman paras IDE, eli Visual Studio, joka melkein koodaa sinun puolesta. C# on lisäksi em. ainoa järkevä vaihtoehto, jos haluaa tehdä työpöytäsovelluksen Windowsille tai jokseenkin näyttäviä pelejä tai AR-/VR-juttuja.

Miksei Python? Se ei tuo juurikaan lisäarvoa JavaScriptin jälkeen joitakin niche-kirjastoja lukuunottamatta. Samat typot, tyyppivirheet yms. dynaamisen kielen ongelmat menevät läpi tuosta vaan eikä IDEt osaa tehdä mitään koodintäydennystä, refaktorointia tai tarkistuksia luotettavasti. Ei voi tehdä fronttia eikä mobiilia.

Miksei Java? Sekään ei tuo juurikaan lisäarvoa JavaScriptin jälkeen. Natiiveihin Android-sovelluksiin voisi tuoda lisäarvoa, mutta hybridi- ja cross platform -alustatkin ovat useimmiten tarpeeksi hyviä CRUD-sovelluksiin yms. ja peleihin on Unity. JVM on kuitenkin hyvä alusta, joten ehkä Scala (bäkkäriin/taustapalveluihin) tai Kotlin (Android-kehitykseen), jos sille tielle haluaa lähteä.

Käytetyimmät kielet

Ohjelmointikielten suosituimmuus vaihtelee vähän lähteestä riippuen. Pikaisesti Tioben, Stackoverflow:n ja PYPL:n listoja vertaamalla kärkijoukko näyttäisi seuraavalta

Tämä ei kuitenkaan tarkoita, että nämä olisivat pidetyimpiä kieliä, vaan näiden kanssa työskennellään eniten ja tehdään paljon hakuja.

Työpaikat

Katsoin työpaikkoja Stackoverflow:sta, Indeedistä ja LinkedInistä. Jätin pois muutamia kieliä (R ja C), koska yksittäiset kirjaimet esiintyvät joka ilmoituksessa. Myös SQL kuuluu usein kehittäjän perustaitoihin, joten keskityin yleiskäyttöisempiin kieliin. Kärjessä on samoja kieliä kuin suosituimmissa.

Kiinnostavaa tässä on se, että kolme JVM:ää (Java Virtual Machine) käyttävistä kielistä (Scala, Kotlin, Groovy) on tällä listalla, muttei käytetyimmissä kielissä. Tämä kertonee siitä, että Javaa on alettu korvaamaan moderneimmilla kielillä ja java-työpaikoissa on riski joutua ylläpitämään 20v vanhaa legacy-järjestelmää.

Web

Kotisivujen tekemiseen ei välttämättä tarvitse osata ohjelmointia. Jos sisältö muuttuu harvoin, tulee pelkällä HTML:llä toimeen.

Blogit, uutissivustot yms. joissa lähinnä esitetään sisältöä ja suodatetaan vaikkapa kategorian perusteella, pystyy toteuttamaan käyttäen vain palvelinpään teknologioita. Tähän tarkoitukseen on paljon valmiita alustoja (esim. Wordpress), mutta jos haluat kuitenkin tehdä itse, hyviä kieliä (ja alustoja) ovat ainakin

Noille löytyy myös edullisia (<5€/kk) hosting-vaihtoehtoja. Kaikille yleisesti käytetyille ohjelmointikielille löytynee jokin alusta/kirjasto mikä hoitaa webpalvelimen virkaa, mutta mainituilla kielillä saa varmasti nopeammin valmista. Lisäksi muille kielille on vähemmän (jos lainkaan) hosting-paketteja, jolloin pyörittäminen vaatii kalliimman virtuaalipalvelimen.

Paljon vuorovaikutusta sisältävien sovellusten (esim. monimutkaisia lomakkeita) kanssa mukaan tulee myös selaimessa suoritettava koodi. Tähän on vain yksi vaihtoehto tällä hetkellä; JavaScript. Tulevaisuudessa myös WebAssembly on vaihtoehto, mutta tällä hetkellä sille ei vielä ole hyviä ja laajoja kirjastoja työtä nopeuttamaan.

Mobiili

Suurin osa mobiililaitteista pyörii joko Android- tai iOS-alustalla. Natiivien Android-sovellusten tekemiseen on käytetty paljon Javaa. Nyt rinnalle on noussut myös Kotlin, jonka suosio tulee luultavasti nousemaan. IOS-kehitykseen taas on käytetty Objective-C:tä ja nyttemmin Swiftiä.

On myös mahdollista tehdä kummallekin alustalle sopivia ohjelmistoja samasta koodista. Tällöin vaihtoehtoina ovat natiivisovellusten osalta

On myös mahdollista tehdä hybridisovelluksia (toimivat sekä webissä että mobiilissa). Tällöin kielenä on JavaScript.

Työpöytäsovellukset

Jos sovelluksen pitää toimia eri käyttöjärjestelmillä ovat vaihtoehtoina lähinnä

Jos riittää, että sovellus toimii Windows-käyttöjärjestelmällä, on oikeastaan vain yksi vaihtoehto; C# (WinForms, WPF, UWP)

Komentorivityökalut / taustapalvelut / skriptit

Näitä voi tehdä useimmilla ohjelmointikielillä

Serverless / Microservice / Pilvipalvelut

Suosituimmat pilvipalvelujen tarjoajat ovat AWS, Azure ja Google Cloud Platform. Kaikkiin näihin voi pystyttää virtuaalipalvelimen tai pyörittää Docker-containeria missä voi ajaa haluamallaan kielellä tehtyä koodia. Jos kuitenkin haluaa hyödyntää käytön mukaan laskutettavaa laskentaa (pienellä käytöllä ilmaista), löytyy näiltä palveluntarjoajilta AWS Lambda, Azure Functions ja Google Compute Engine. Kaikkien näiden tukemista kielistä muodostuu joukko: JavaScript, Java, Python, C#. Palveluissa on myös pari muuta tuettua kieltä noiden lisäksi, mutta niitä ei välttämättä tueta muissa.

Pelit ja AR/VR

Yleisimmille ohjelmointikielille löytyy jokin pelikirjasto millä Super Mario -kloonin (8-bit) tai muun vastaan simppelin 2D-pelin saa tehtyä. Graafisesti todella näyttävien pelien tekemiseen on vain yksi vaihtoehto: C++ (Unreal Engine, CryEngine). Näiden välimaastoon asettuu Unity, jolla saa tehtyä jo hyvinkin näyttävää jälkeä. Sen skriptauskielenä käytetään C#:ia. Unity on myöskin käytetyin VR/AR-alusta.

IoT

Jos haluat käyttää parin euron mikrokontrollereita, ohjelmointikielesi tulee olemaan C. Vähemmän vaivalloista lienee ostaa Raspberry Pi (25€ Powerin tarjouksessa) jolloin voit käyttää korkeamman tason kieliä

Noilla saa helposti tehtyä vaikka sellaisen, että selaimella voi laittaa I/O-pinnejä päälle/pois.