Pravartu paskaityti apie programavimo kompiuteriams palyginimą su kitais realaus gyvenimo aprašais
>>>>>
Kaip norite būti vadinamas, kai pagrindinis darbas (o gal kartu ir hobis) yra kurti programinę įrangą?
Inžinieriumi, mokslininku, hakeriu o kodėl ne tiesiog programuotoju? Kodėl šis terminas kai kuriems žmonėms atrodo kiek žeminantis?
Programavimas yra keista profesija (jei tai išvis profesija), kurios pagrindinė ypatybė ta, kad ji labai
jauna. Jei sakai, kad užsiimi programavimu, vadinasi esi iki 60-ies, nes anksčiau tebuvo vos keli programuotojai.
Problema dėl programavimo ta, kad šis procesas susideda iš dviejų dalių: a) gilesnio mąstymo ir b)
paties kodo rašymo. Pirmosiomis programavimo dienomis buvo aišku, kad programavimas kažkiek susijęs
su matematika. Kodo rašymas buvo tarsi lygčių užrašymas )nors ir ne visai taip pat). Jį supo intelektualumo
aura. Laikas bėgo, programų reikėjo vis daugiau, o galvočių nepakako. Be to tie galvočiai pastebėjo, kad ima perrašinėti tuos pačius dalykus vėl ir vėl.
Pamažu programų rašymas ėmė atrodyti mažesne verte. Aukštesnis lygis buvo gudrių algoritmų
sumąstymas. Įvyko skilimas į smegeningus, kurie sugalvoja, kaip tai turi būti, ir ne tokius
smegeningus, kurie atlieka patį kodo užrašymą. Padėtis tapo panaši į statybas, kai architektas sukuria
pastato viziją, o daugybė darbininkų ją realizuoja. Tad neatsitiktinai daugelis programuotojų linkę savwe
vadinti architektais ar panašiai. Nedaugelis linkę būti mūrininkais ar stogdengiais.
Ilgai netruko, ir programavimu imtas vadinti kodavimo procesas ir galvočiai ėmė vengti
programuotojo vardo. O kaip tada juos vadinti? Atsirado keletas terminų, atspindinčių atskirus
programavimo aspektus. Programinių sistemų inžinierius atspindi programų konstravimo aspektą tarsi ta
veikla būtų inžinerijos dalimi. Sistemų analitikas atspindi susidomėjimą tuo, kaip turi funkcionuoti sistemos.
O rašantys kodą imti vadinti koduotojais , o vėliau tiesiog kodo beždžionėmis.
Matyt, didžiausią paklausą turi vykdytojas (angl. developer), atėjęs, matyt, iš statybų srities (iš
kurios atėjo ir patys pagrindiniai projektų valdymo principai), kur darbų vykdytojas reguliuoja ir prižiūri
atliekamus darbus. Tačiau ir čia yra skirtumas. Darbų vykdytojas gauna pinigus ir kitiems palieka daryti
juodą darbą. Kuriant programinę įrangą nėra tokios aiškios ribos. Dabar developeriu linkstama vadinti
asmenį, kuris rūpinasi visu pradinės idėjos apmąstymu ir jos įkūnijimu galutiniame produkte. Tai vėl suartina su tuo, ką išreiškia programavimo sąvoka.
Verta paminėti ir kompiuterijos mokslininką (computer scientist), kas sukelia prieštaravimą tarp mokslo ir meno. Jei nesi
mokslininkas, tada turi būti menininku. Tačiau ne viskas taip paprasta. Kompiuterija nėra vien programavimas
tai matematikos pritaikymas kompiuteriams. Tad šiuo terminu turėtų būti vadinamas teoretikas.
O sunkiausia dėl hakerio, turinčiu romantišką stereotipą. Tai tarsi būti poetu ar džiazistu. Tai reiškia
ignoruoti visas taisykles ir padaryti kažką iš to, kas pasitaiko po ranka. Tai įkvepia ir blizga.
Algoritminis mąstymas
Neretai užmirštama, kaip skirtingai reikia mąstyti, norint parašyti programas. Paprastas žmogus retai
sąryšio tarp pradinio taško ir tikslo. Tuo tarpu programuotojas gana greitai pamato, kaip iš A nusigauti į B.
Tai nėra matematika, nors ir panašu į tai, kaip įrodinėjamos teoremos. Taigi programuotojas
yra algoritminio mąstymo meistras ir savo mintis gali išreikšti algoritmine kalba. Ir būtent tai geriausiai jį apibūdina.
Mitas apie programavimą ir kodavimą
6-o dešimtmečio rašiniuose buvo įprasta skirti programavimą ir kodavimą, - kai šis laikytas žemo techniškumo, kurį
atlikdavo technikai rutininiu darbu blokines schemas arba pseudokodą versdami į mašinines instrukcijas. Darbo pasidalijimas
tarp jų dažnai pasireikšdavo išsilavinimo ir lyčių skirtumu. Tačiau tyrinėjant ankstyvuosius programavimo ir kodavimo
panaudojimo atvejus aiškėja, kad praktikoje beveik nebuvo jų atskyrimo. Ir nors veiklų skirtumai visiškai aiškūs,
jas labai dažnai atlikdavo tie patys asmenys. Tad greičiau tas atskyrimas labiau būdingas ne tikrovei, o ankstyvųjų skaičiavimų mitologijai.
Jo klausimas iškilo 6-me dešimtm. atsirandant automatiniam programavimui ir išlieka iki šių dienų.
Pirmąkart tasai skirtumas buvo išsakytas H. Goldstine1) ir J. von Neumanno
straipsnyje Uždavinių planavimas ir kodavimas elektroniniam skaičiavimo instrumentui (1947-48). Jie pateikė 4-ių lygių hierarchinę schemą.
Viršuje buvo matematinis lygis matematinio uždavinio algoritminės formos sukūrimui, kuris buvo skirtas vien matematikams ir neturėjo nieko
bendra su skaičiavimo mašinomis. Žemiau buvo kodavimas, suskirstytas į tris lygius:
- makroskopinis arba dinaminis lygis apimantis dinaminius skaičiavimo aspektus (sąlygų patikrinimai,
ciklai, adresų pakeitimai ir t.t.) formalizuoti blokinių schemų pavidalu;
- mikroskopinis arba statinis lygis apie faktinį kiekvieno blokinės schemos elemento kodavimą;
- lygis, (daugiausia) susidedantis iš atminties išskyrimų ir vertimo į dvejetainį kodą.
Blokinės schemos braižymas turėjo būti rutininiu darbu kiekvienam vidutiniškai matematiškai išsilavinusiam asmeniui. Statiniame lygis turėjo būti
rutininiu darbu kiekvienam vidutiniškai patirties turinčiam asmeniui. Skirtumas tarp šių dviejų lygių ir išreiškė programavimo ir kodavimo atskyrimą.
Bet kodėl Dž. Neimanas ir H. Goldsteinas norėjo atskirti
planavimą ir kodavimą? Tai gali būti paaiškinama jų patirtimi rankinių skaičiavimų darbo organizavime: H. Goldsteinas žinomas kaip paruošęs
nusisekusią schemą lentelių artilerijos šaudymams rengimui. Pertvarkyta po Pirmojo pasaulinio karo, ji akivaizdžiai naudojo darbo
pasidalijimą. Pradžioje buvo matematinė teorija ir iš jos išvesti algoritmai. Tada buvo skaičiavimų lapai (forma
5041), kuriuose žingsnis po žingsnio buvo nurodyta ką turi atlikti skaičiuotojai (aritmetikoje pakankamai įgudę kareiviai
ar vietiniai gyventojai). Sekdami tais žingsniai, skaičiuotojai turėjo surasti reikšmes lentelėse, paskaičiuoti logaritmus,
atlikti aritmetinius veiksmus, tarpinius rezultatus surašant į duomenų lapą, o galutinius rezultatus į trajektorijos
lapą. Balistinių tyrimų laboratorijoje toji schema buvo lengvai transformuota į instrukcijų paruošimą skaičiavimo mašinoms.
ENIAC kompiuteriui tokį darbų atskyrimą
Monte-Karlo metodo blokschemų kodavimui
gana sėkmingai pademonstravo Klara fon Neiman2).
Programavimo ir kodavimų atskyrimą pademonstravo UNIVAC, kurią Eckertas ir Mauchly pradėjo kurti
po to, kai kariškiams sukūrė ENIAC (1949). Kitais metais ryšium UNIVAC netgi buvo įvesti
standartiniai blokschemų ir kodavimo simboliai ir metodai ir blockschemos naudotos kaip galinga komunikacijos priemonė, o jų elementai galėjo talpinti
bet ką, nuo matematinių simbolių iki sakinių.
Tačiau užbaigus UNIVAC (1951), programuotojo ir koduotojo atskyrimo atsisakyta.
Pvz., J.L. McPhersonas iš UNIVAC interviu pasakė: Mes neskiriame programuotojų ir koduotojų. Pas mus yra operatoriai ir programuotojai. Pažymėtina
ir Darbo ministerijos 1959-ųjų atliktas tyrimas, pateikęs 13 profesijų duomenų apdorojimo elektroninėmis sistemomis
srityje sąrašą, kuriame nėra koduotojo. Tačiau pateikiami skirtumai tarp sisteminio analitiko, programuotojo ir
koduotojo. Pirmasis nustato uždavinį ir reikalavimus, programuotojas sukuria nuodugnias programas, blokschemas ir
kitką, kas reikalinga kodavimui ir duomenų apdorojimai, o koduojantis klerkas pertvarko informaciją į tinkamus
naudoti kodus (taigi, nenurodomas blockschemų vertimas mašininiais kodais).
Tai iš kur ir kaip kilo idėja priešpastatyti programuotoją ir koduotoją? Terminas koduotojas
6-me dešimtm. minimas ypač retai, tačiau 1955 m. pasirodė net trys straipsniai, kuriuose 28 kartus paminėtas žodis koduotojas
ir visų jų autoriai buvo Grace Murray Hopper ir jos komanda. Būtent G. Hopper buvo nepailstama programavimo
automatizavimo propaguotoja. Pagal ją, dabar tokie specialistai, kaip analitikas, programuotojas, koduotojas, operatorius
ir palaikymo specialistas atskirti ir komunikuoja tik tokių įrankių kaip blokschemos pagalba. Nors skirtumas tarp
programuotojo ir koduotojo ir nebuvo niekad aiškiai išreikštas. Ir realiai, dažnai jais buvo tas pats asmuo...
Tai kodėl G. Hopper juos atskyrė? Ogi todėl, kad kodavimą buvo lengva
automatizuoti ir žmogų pakeisti mašina! Vis tik dauguma 6-me dešimtm. nebuvo įsitikinę, kad automatinis kodavimas bus pakankamai efektyvus
ir galės konkuruoti su žmogumi. Tačiau pati programavimo automatizavimo idėja šiandien kirba DI modeliuose,
grasindama atsisakyti programuotojų. Ir vien pavadinimų naudojimas nors ir įsimena, tačiau svarbu, kiek tai realiai siejasi su praktika.
- H.H. Goldstine, J. von Neumann. Planning and coding of problems for an electronic computing instrument// Vol.
2 of Report on the Mathematical and Logical Aspects of an Electronic Computing Instrument. Report in three parts
prepared for U.S. Army Ord. Dept. under Contract W-36-034-ORD-7481, 19471948.
Nebaigei šiandien, pradėk iš naujo!
Siūlau prieš tai paskaityti Kodėl nuolat apsišauname vertindami projektus?
Ties 21 a. slenksčiu buvo populiari ekstremalaus programavimo metodologija. Greta jo buvo galima išvesti ir tokį principą. Pradėk
realizuoti funkciją ryte ir jei vakare ji nebus baigta, ištrink viską ir ryte pradėk iš naujo. Galima pasilikti tik modulių testus
(unit tests). Jei nepavyks per kelias dienas, apmąstykite, kokius reikia atlikti parengiamuosius darbus, infrastruktūros pakeitimus
ir refaktorinimą, kad ją galima būtų įtraukti į sistemą. Atlikę tuos darbus, grįžkite prie funkcijos realizavimo.
Tą principą galima panaudoti ir kitur bei apibendrinti.
Vienas iš patarimų pradedantiems programuotojams yra viską perprogramuoti. Realizavus sprendimą, iš naujo parašyk kodą tik nekartojant,
o pamąstant (euristiškai). Antrąkart rašant kodą sugaištama tik 25% pradinio sprendimo laiko, o rezultatas dažniausiai būna geresnis.
Tad gauti geresnį kodą sugaištant tik 125% laiko yra visai neblogai! Ir ypač neblogai projektams, kuriuos teks palaikyti ilgą laiką...
Kiekybė turi savąją kokybę sakė Stalinas. Jaunas specialistas savo kraitelėje neturi 100 K eilučių kodo ir būtent pradėk iš
naujo kasdien padeda tą kraitelę greičiau užpildyti. Be to, tai padeda geriau pastebėti ir įsisavinti dėsningumus. O kartu
ir atnaujinti ir sustiprinti neuronų jungtis (sinapses).
Tau sako, kad sprendimas užims 4 savaites. Tada įremi pistoletą programuotojui į galvą ir sakai: Užbaik per 24 val.!. Tikslas
sulaužyti nuostatas ir išankstinius nusistatymus. Tokiu atveju reikia visiškai kitokio sprendimo. Ir net nuostabu, kaip dažnai
tai suveikia! (man kelis kartus yra tekę būti panašioje situacijoje ir nieko: per parą tiesiog parašai 12-20 tūkst. eilučių
kodo, gal ne pačio efektyviausio, bet veikiančio). Iš tikro, tai nėra to pistoleto 10-15 min. įtempto pamąstymo ir gali eiti namo
ir išsimiegoti, o ryte, viską dar kartą pergalvojęs, pradėti ir
pabaigti per kelias dienas.
1) Hermanas Goldstainas (Herman Heine Goldstine, 1913-2004) žydų kilmės amerikiečių
kompiuterininkas ir matematikas, vienas iš ENIAC kūrėjų. Antrojo pasaulinio karo metais
užsiėmė balistinių šaudymo lentelių paskaičiavimais (skaičiuotojai buvo vadinami kompiuteriais), kurie buvo labai lėti. 1942 m. skaičiavimų
pagreitinimui buvo pasiūlyta sukurti elektroninę skaičiavimo mašiną (ESM) ir 1943 m. birželį, paskyrus finansavimą, per 30 mėn. buvo
sukurta ENIAC. 1946 m. kartu su Dž. Ekertu įkūrė atskirą kompiuterių gamybos kompaniją (dabart. Unisys). 1957 m.
tapo IBM Tyrimų centro Matematikos skyriaus vadovu, kur daugiausia užsiėmė IBM ir mokslo bendruomenės sąveika.
Vėliau 1985-97 m. buvo Amerikos filosofų draugijos vykdomuoju direktoriumi.
2) Klara fon Neiman (Klara Dan von Neumann, 1911-1963) vengrų kilmės amerikiečių matematikė,
savimokslė inžinierė ir kompiuterininkė, laikoma pirmąja programuotoja ir pirmąja moterimi kompiuteriu vykdžiusi šiuolaikinio stiliaus kodą.
Tapo Dž. fon Neimano žmona. Jos indėlis svarus į
Monte-Karlo metodą, ENIAC ir
MANIAC kompiuterių panaudojimą. Programuoti liovėsi po Dž. fon Neimano mirties, tačiau parašė pratarmę jo Silimano paskaitoms (1958),
vėlesnis išplėstas leidimas pavadintas Kompiuteris ir smegenys. Laikoma, kad ji nusiskandino.
Kiti HOT.LT straipsniai:
Kobolo motina
.Net palydėtuvės
Kompiuterių ištakos
Programavimo paradigmos
Programuotojų kertelė
Pirmasis interneto ryšys
Programavimo kalbų klegesys
Kompiuterių istorija: VT100
Atskleistoji istorija: SKIE-MUO
Ištraukos iš C kalbos Biblijos
Kitoniškumas: dygios eilutės
Optimali stulpelių eilės tvarka
Lambda išraiškos Java į naują lygį
MS SQL užklausų rezultatų puslapiavimas
Pirmasis Java įskiepis Lietuvoje
Bilas Geitsas: kol dar nebuvo garsus
Technika: Nuo Paleolito laikų
Danas Briklinas: skaičiuoklės autorius
Liūdna pasaka apie Unix
Algebra akimirksniu
Tikroji Interneto pabaiga
Unix ir C kalbos kiltis ir ... šachmatai
Ar mašina kada nors mąstys?
Pirmoji programuotoja: Ada Lovelace
Programuotojo evoliucija: "Labas, pasauli!"
P-NP: Ant sveiko proto svarstyklių
AWK kalba - sena ir nuolat aktuali
Peteris Karvašas. Archimedas
Programavimo kalbų evoliucija
Mūšis kibernetiniame pasaulyje
Visata kaip kompiuteris
Kompiuterių istorija
Haketonai
|