Et siis – milline programmeerimiskeel algajale?

Pinu.ee peal on vana hea teema ette võetud – milline programmeerimiskeel siis ikkagi on kõige parem algajale programmeerijale. Teema, mis on kordi käinud läbi Tartu Ülikooli mat-inf teaduskonna listist, leidnud tulist arutelu siin ja seal. Tõde, kui sellist, muidugi ei selgu ega olegi kunagi selgunud, sest selle küsimuse vastus sõltub liialt kontekstist. Ja kõik need aastad olen ma ise samale teemale vastust otsinud ja kaasa mõelnud, paneks nüüd selle kõik ka kirja.

Alustuseks aga üks tähelepanek, mis ei pruugi ehk olla üldse vähetähtis – mis on ühist nende aastate jooksul läbikäidud teemade juures? Vastusevariandid on kõikunud seinast seina, aga enamasti on läbi jooksnud ikka kaks põhilist varianti – Java ja Python. Ehk on siin peidus ka lahendus?

Mis asi on D? Mis asi ADA?
Küsimused on must-valged näited ja neid tuleb võtta üldiselt. Sügavam taust on neil seotud keele, tehnoloogia, frameworki ja paljude muude valikutega mis eelnevad projektidele, õpingutele jne… sõnaga kõigile programmeerimisega seotud algustele. Alati tasub eelistada lihtsamat ja tuntut asja, ning arvestada ka võimaliku community suuruse ja aktiivsusega.

Tuues elulise näite. Ühe suurprojekti juures valiti tehnoloogia (uudishimu rahuldamiseks – Oracle tolleks hetkeks juba mitte-edasi-arendatav käkk-produkt) seetõttu, et analüüsis oli üks pisike nõue (millele vastavaid tooteid oleks tegelikult teisigi olnud) ning et pea-programmeerija tundis seda tehnoloogiat.
Ja millega see lõppes? Kui see pea-programmeerija lahkus oldi sügaval selles-samuses, sest mitte keegi ei osanud ega tundnud seda tehnoloogiat. Langeti probleemi ohvriks – asi võis küll olla hea, aga kedagi teist selle süsteemi arendajaks leida oli raske, ning arenduse väiksemgi liigutus muutus ajaliselt väga kalliks.

Nagu lapse keelamine.
Tsiteerides mõtet keele valiku kohta:

Java õpikud algavad umbes nii: “Siin on hunnik koodi, millest kõigest sa praegu ei pea veel aru saama, aga katsu keskenduda keskmisele reale, mis trükib ekraanile teksti ‘Tere maailm’.” Ning see lihtne rida on System.out.println(“Tere maailm”);. Seega ei.

Sarnasus, kuidas osad “hoolivad” lapsevanemad lapsi kasvatavad – kõik peab kinni mässitud olema, kuna ta lööb ennast ehk/kindlasti ära; kahvlit/nuga ei tohi kätte anda kuna terav; rääkida/küsida pole mõtet, kuna niiehknaa ei saa aru; tassist pole mõtet joota kuna ei oska jne..

Kes teab gnome vs Linus juhtumit, siis minu meelest ütles Linus täiesti klassikalised sõnad:

This “users are idiots, and are confused by functionality” mentality of Gnome is a disease. If you think your users are idiots, only idiots will use it. I don’t use Gnome, because in striving to be simple, it has long since reached the point where it simply doesn’t do what I need it to do.

Please, just tell people to use KDE.

Kui nüüd need kaks tsitaati kokku panna, mis me saame? Jah.. kui te peate neid algajaid programmeerijaid idiootideks siis nad nendeks jäävadki.

Mis siis on kui nad ei saa kõigest aru? Miks peab _kõigest_ _kohe_ aru saama? Kas tõesti arvatakse, et nende muude ridade mõistmine jääb programmeerija kõige raskemaks takistuseks mida ületada? Võibolla see esimene takistus just peabki selline olema, et eraldada terad sõkaldest ning mitte laskma programmeerijate ridadesse selliseid keda viimastel aastatel prgrammeerimisfarmides aina rohkem ja rohkem näha on?

Ma mäletan oma esimest programmi käivtamist. BASIC. Vanemast klassist tüüp tuli disketiga minu arvuti juurde, pistis selle draivi, tegi mingi tsahka-tshaka ja äkki oli programm ekraanil. Ütles käivtada saad siit klahvist, muuda neid ja neid ridu (tegu oli lihtsa prgrammiga mis tegi for tsükli mingi 32 pealt kuni 10000 vms, ja mängis iga iteratiooni juures vastava kõrgusega heli) – ma ei saanud mitte mõhkugi aru. Aga ometi oli huvi pisik niivõrd suur, et see segadus ei seganud.. pigem tekitas vajadust ja tahet järjest rohkem uurida. järjest rohkem proovida ja katsetada ja lugeda.

Mida ise soovitaks?
Sellega jõuame me tagasi konteksti juurde. Mis mõte on mul soovitada kellelgi keelt HablaHalba kui ma seda isegi ei oska kirjutada? Ok, ma võin ju aidata algoritmilise mõtlemise juures, aga keele nüansid jäävad ikkagi tähelepanuta. Seega, oluline on see, mida oskavad sinu sõbrad, ümberolijad, mentor jt.

Kindlasti on oluline populaarsus. Tänased progemisfarmid tegelevad minuteada peamiselt Java programmeerimisega, kuigi on ka igasugu teisi keeli kasutsel. Kindlasti ei soovitaks ma platformi/tootja-sõltuvaid keeli (võibolla väheste eranditega) ning mitte mingil juhul ei soovtia ma microsofti spetsiifilisi keeli (nagu dotnet). Samuti ei saa väga heaks valikuks pidada Excel/Calc scriptimisi, kuna suunatus on ikkagi andmete lahterdamisele mitte prgrammeerimise õpetamisele.

Ühe programmeerimiskeelte populaarsustabeli leiab siit:

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

Nagu näha, siis esikohal on Java, C, C++ ja PHP (seisuga oktoober 2010). Kaks asjaolu – nendes keeltes programmerijaid on ilmselt kõige rohkem ning ilmselt on kõige suurem tõenäosus ühel hetkel kokku puutuda vastavas keeles kirjutatud programmiga.

Miks ma näiteks hoolimata selle keele austajate rõõmuhõisetest ei julge kellelgi soovitada Pythonit? Ma olen seda ise kirjutanud GRID’i praksis ning..
a) Üks keel peaks ikkagi skoopimiseks kasutama sulge
b) mul on ainult KAKS tuttavat, keda ma tean, et nad OSKAVAD Pythonit programmeerida. ja paar veel kes seda keelt kasutavad, aga mitte igapäevaselt.

Kas peaks muretsema homse pärast täna?
Ei ja jah. Ühest küljest ei pea täna ilmtingimata pongestama Java’t õppida sellepärast, et homme sa lähed suure tõenäosusega Javat progema, sest tähtis on ju algoritmilise mõtlemise arendamine, optimeerimine, mõistmine et sina vaatad programmeerijana kasutajat teiselt poolt ekraani jne. Liigne homsega arvestamine võib tekitada liigse resursikulu ning lõpuks ei too mingit kasu.

Teisest küljest jah, sest mis täna selge, see homme lihtsam.

Lõpetuseks, mõned mõtted keeltest
Nagu öeldud, programmeerimist saab ka õppida ilma konkreetse keeleta võiks mõnda asja keele valikul arvestada:

  • C – nii kui natuke pointerite ja mäluga hullamist ette tuleb, tekivad ka “segmentation fault”‘id. Ja see ON hull veateade mille põhjust algajal otsima hakata. Samas kui põhiteadmised juba olemas, siis koos C++’ga ilmselt üks parimatest valikutest. C oskamise pluss on ka vast see, et kui keele süntaks selge, on lihtsam juba haarata C++, Java jt ning sealt omakorda kasvõi php. OpenSource maailmas kindlasti vajalik keel (a’la kui soovid kirjutada rakendusi KDE/Gnome jaoks).
  • Bash/shell – võimalik valik, ja tegelikult väga võimas keskkond. samugi tcl näiteks. Aga liiga palju võimalusi puuduva tühiku tõttu endale päevaks probleem tekitada. Ja selle valikuga on hädas isegi Ülikooli tudengid, nagu näitas praktikumide andmine.
  • perl – sobib tegelikult ka alustuseks, seni kuni ei ürita kohe regulaaravaldisi hoomama hakata
  • Java – algus kindlasti raske, kuna failide asetus failisüsteemis, classpath, kompileerimine jne on päris hulk asju mida peab kohe alustuseks selgeks tegema. Samas, kui esimene näiteprogramm kirjutatud/netist tõmmatud ja käima pandud, läheb edasi juba lihtsamalt. Keele kindlad tugevsued on platvormisõltumatus ning stacktrace. Samuti on palju häid IDE’sid kus arendada ning tugev community
  • PHP – mina ei pea seda pahaks keeleks. Tüübid on küll lõdvad ja arendamiseks läheb vaja veebiserverit või käsurida, aga need on ületatavad ja isegi kasulikud teemad millega tegeleda kui edaspidi plaan tegeleda veebinduses.
  • Python – nagu nad räägivad, hea keel aga ülaltoodud põhjuste tõttu ei julge soovitada.
  • Pascal – oli aktiivselt kasutusel õppes näiteks Ülikoolis aastal 96-97, hiljem tuli Java. Järglane on Delphi. Ei julge soovitada, kuigi Eestis leiab hea Delphi programmeerija tööd küll. Keeleliselt erinev C ja tema järglaste süntaksist.
  • Advertisements

    One thought on “Et siis – milline programmeerimiskeel algajale?

    1. python + sql. suurepärane duct tape lahendusteks. nt väikeettevõttes. loodetavasti google apps engine aitab sellele kaasa et tulevikus see keel popim.

    Lisa kommentaar

    Fill in your details below or click an icon to log in:

    WordPress.com Logo

    You are commenting using your WordPress.com account. Log Out / Muuda )

    Twitter picture

    You are commenting using your Twitter account. Log Out / Muuda )

    Facebook photo

    You are commenting using your Facebook account. Log Out / Muuda )

    Google+ photo

    You are commenting using your Google+ account. Log Out / Muuda )

    Connecting to %s

    %d bloggers like this: