201310142104


Programmeerimise ring


Sissejuhatus.
------------

    I see the light in the end of the tunnel.. and this is not a train.*
    David Bowie, Five Years in the Making of an Icon, 2013
    
*) Ma näen valgust tunneli lõpus.. ning see pole rong.

Alguses olid joonised (koobastes).

  mammoth.png

Siis tulid arvud (vangla seintel).

  ||||||
  
Siis tuli käsikiri.

  handwriting.png

Alles tuhandeid aastaid hiljem Johannes Gutenberg tõi Euroopasse trükkimise. Isegi täna raamatuhuviline eelistab lugemist (olgu see film või mäng) -- põhjendus on lihtne pilt asendab minu super-puper 3D kujutlusvõimet televiisoriga (olgu ta kas või kolme meetrise ekraaniga), ma ei taha proteese -- kalkulaator kiirendab minu arvutusi, ekskavaator teeb mind tugevamaks, auto -- kiiremaks, kuid televiisor teeb mind vaesemaks.

Kui olete eelmise jutuga nõus, siis on võimalik, et usk loodusliku keha ja vaimu võimetesse võib teha programmeerimise meeldivaks tegevuseks. Vastasel juhul tekib küsimus: kas küborg-programmeeria võib olla edukas?

OK, otsigu vastust sellele küsimusele ulme-romaanide kirjanikud, milleks mõelda halvast kui see isegi pole juhtunud? Raamat jääb raamatuks, koomiksid seda ei asenda. Sama lugu on programmeerimisega. Programmeerija on kaasaegne skulptor. Võtab kivi (kiip, arvuti) ning puhub "hinge" sisse -- asi mis kogus tolmu (näiteks, poe letis) hakkab teenindama enda loojat -- olgu see robot, mobiili app, või SETI screensaver (otsib tulnukate signaale internetiga ühendatud arvutitel, mis pole hetkel hõivatud). Kuid kood, mida luuakse, võib olla pikk. Miguel de Icaza koos Nat Friedmaniga kirjutasid mõne aastaga miljon rida programmeerimise koodi (mono -- .NET unix arvutile), kuid Windows-7 lähtekood on 25 miljardi rea pikkune. Nii et arvestage grupitööga. Ise-asi, et kolleeg ei pea alati inimene olema: erinevad wizardid ning koodi generaatorid kirjutavad isegi kogenud programmeerijast sadu kordi kiiremini. Kasutage selliseid abilisi, kuid osake aru saada ka nende töö osast. Kuid õppides robotite meeskonnas on kergem sisse elada ennast mõnda tiimi (team).

Kas programmerimine on alati töö? Kui selle eest makstakse, siis ta on. Kuid see võib olla ka näiteks ükskõik mis eesmärgi saavutamise vahend.


Mis juba oli (Tahtsime parimat, kuid osutus nagu alati. [1])
------------------------------------------------------------

  -- Programmeerimine on teine ​​kirjaoskus. (cirka 198x aasta) Jershool (Novosibirsk, pre- Python).
  
     "Elasid kord ühes koopas Mees, Naine, nende Poeg ning väike kodune lendav Dinosaurus. Koopas oli palju imelisi asju, mida poeg oskas natuke kasutada. Kord saatis isa poja juurikaid (roots) lõunaks korjama, ning ütles naisele -- ma tahan veenduda, et poeg pole minust kehvem. Ma saadan ta pikale teele, las ta leiab või loob kas või mõned asjad nendest, mis meie koopas seisavad. Kui ma olin tema vanune, ma elasin siit väga kaugel, siis asusin kord teele, leidsin või tegin ise kõike seda, mida ma koopasse olen toonud.

Kuid naine oli vastu, öeldes, et selline seiklus (adventure) on liiga ohtlik selleks, et seda ette võtta ainsal eesmärgil veenduda poja võimalustes ning oskustes. Pigem kaitseme oma vara paremini uputusest, tuleleekidest ning metsikute loomade eest ja anname pojale võimaluse teha järgmise sammu, mis viib meid kõiki tulevikku. Sellist sammu, mida meie pole kunagi proovinud teha. Ja olgu meie tulevik parem kui minevik.

Mees nõustus."

Kirjutada enamik meist oskab, kuid programmeerida nendest oskab vähemus. Näide: Meie -- Anne, Urmas ja koer Jack. Kirjaoskajad -- Anne, Urmas. Programmeerijad -- Anne. (Jack pole kirjaoskaja, järelikult ta ei saa olla programmeerija).
  
  -- Maagiline kristallkuul (cirka 1000AC, AD anno domini + BC before Christ .. AC [2])

     Legend kõlab nii -- kunagi ammu loodi programmeeritavad kristallid, mille abil oli võimalik igasuguseid imesid teha. Siis programmeerimise kunst unustati osaliselt ära, ning maailm jagunes võluriteks ning muudeks, kusjuures võlur (wizard) polnud RAD-robot, nagu tänapäeval (RAD - rapid application development). Veel hiljem unustati totaalselt ära, kuidas maagilisi kristalle programmerida, ning need (kristallkuulid) muutusid lihtsalt kivideks. (poes: -- kas teil on pakkuda selline kivi nagu xyz012345789. -- tuleb tellida, me saadame teile sms kolme päeva jooksul et kaup on kohale toodud)

Teises laines mis algas siis kui kivist loodi transistor (1945) me oleme jõudnud programmeeritavate kristallideni (mitmekihiline 3D-SoC [3] kuid need pole veel eriti maagilised).


"Veel kuus tuhat ämbrit ning kuldvõtmeke on meil taskus"
--------------------------------------------------------

Et mitte loota lubadusele, nagu oleks vaja lugeda ainult 100000 lehte teksti matemaatika raamatutest ning sama palju programmeerimise raamatudest ja siis te oskate kirjutada programmi, mis toob mustale ekraanile mingi salanumbri -- alustame hetkeseisust. Programmeerimiskeeli on väga palju, enamik neist kuulub kolme liiki:

  - deklaratiivsed (HTML, SQL, kui tahame veebilehekülge valmistada voi leida midagi konkreetset infolaost (data warehouse [4]) tasub olla nendega tuttav.
  
  - funkstionaalsed. Matemaatik mõtleb teistmoodi kui mittematemaatik. Kui matemaatiliselt mõtlev isik tahab programmeerida -- ta valib seda teed (Haskel, F#, ML, ..)
  
  - imperatiivsed keeled. Ühel ja samal hetkel oleme ainult ühes punktis. Kirjutame retsepti, mida tuleb ette võtta järgmiseks sammuks (üks lõim -- one thread). "Multithreaded" programm on nagu muusika partituur või filmi stsenaarium, kus iga roll on täpselt kirjeldatud. Selles klassis on palju alamkategooriaid, näiteks: 
  
    + industry strength languages (C++, C#, Java). Tuleb kirjutada 100000 rida teksti, et asi kas või vähe kasulik oleks. Õppimiseks kõlbab hästi -- on palju sarnasusi praktilisemate keeltega. "Kui kolm aastat ennast mitte pesta, siis nahk enam ei sügele" -- arvestage pika sukeldamusperioodiga, ennem kui saate selles vees vabalt ujuda.
    
    + skriptimiskeeled. kui ei karda "script kiddie" sildiga ringi käia, skriptimiskeeled on piisavalt võimsad ning nende abil saab nii õppida, kui ka väärtusi luua (Perl, Python, PHP, Ruby, BASH, Powershell..).


Viited.

[1]. http://ru.wikipedia.org/wiki/Хотели_как_лучше,_а_получилось_как_всегда
[2]. http://en.wikipedia.org/wiki/Before_Christ
[3]. intel.com, 2017
[4]. http://en.wikipedia.org/wiki/Data_warehouse
