Programų kūrimo metodologija. Šis kursas galėtų būti prerekvizitas tiems kursams, kuriuose praktikos darbų metu studentai turi parašyti savo programas ar skriptus ir jas pritaikyti. Prerekvizitas -- mokėti dirbti Unix tipo sistemose. a) Programų rašymo apžvalga (priminimui): mažinos kodai, autokodai asembleriai, makroprocesoriai, aukšto lygio programavimo kalbos. Bendras programos kūrimo darbo ciklas: edit-compile-link-(test)-run. Šiulaikinių interpretuojamų kalbų darbo ciklas: edit-compile+test-run b) Programų surinkimo būdas: kompiliacija, surinkimas (compiling, linking) c) Programų surinkimo automatizavimas. Make, Ant. Aplinkos sukūrimas naudojant GNU Make. Integruotos terpės (Eclipse, Anjuta). IDE plg. su komandinės eilutės įrankiais. Elementarūs make-failai, taisyklės (rules), komandos, tikslai (targets), gerai žinomi tikslai (well-known targets). GNU Make kintamieji ir funkcijos. Make kalba. d) Versijų kontrolė -- kas tai yra, kam ji reikalinga. Versijų kontrolės sistemų ir PĮ kūrimo procesų variantai: paskirstytas ir centralizuotas PĮ kūrimas ir versionavimas. Centrlizuotos versijų kontrolės sistemos: RCS, Subversion, CVS, (paminėti ClearCase, VSS, Bitkeeper, ... jeigu gamintojai parems ;D ) Paskirstytos (distributed) versijų kontrolės sistemos: BazaarNG (bzr), monotone, mercurial, opencm, git, arch. Komandos darbas su versijų kontrolės sistema: revizijos ir versijos, atsikėlimas (checkout), pakeitimų įkėlimas (checkin), suliejimas (merging), užraktai (locking), konfliktai (conflicts) ir jų sprendimas. Žurnaliniai įrašai (log records). Senų versijų atsikėlimas ir analizė, skirtumai (diff, annotate), senų ir mišrių revizijų surinkimas, paleidimas ir testavimas. d') Programų kūrimo organizavimo būdai, naudojant versijų kontrolės sistemas. Kamienas (trunk), šakos (branches). Darbas kamiene, darbas individualiose šakose. Šakų suliejimas su kamienu (branch merging). Suliejimo ir surinkimo organizavimo būdai: mergre queue, merge server, merge leutnant (officer), cherry-picking. Merge tracking. d'') Programos laidos ciklo (release cycle) organizavimas, naudojant versijų kontrolės sistemas: versijos (Versions), žymės (tags). e) Programų testavimas -- kam jis reikalingas, ką jis duoda ir ko ne. Apskritai, kodėl testavimas veikia. Automatinis testų valdymas Make programa. Regresijos testai. Modulių testai (Unit tests), testavimo serveriai. XP (Extreme programming); kūrimas, paremtas testais (test driven development). Testų padengtis (test coverage). f) Programų formalus specifikavimas ir teisingumo įrodymas. Pradinės sąlygos (preconditions), pabaigos sąlygos (postconditions), invariantai (invariants). Formalūs (automatizuoti) įrodymai. Design by contract (Eiffel). Formalių metodų privalumai, trūkumai, galimybės ir ribos. (gal paminėti Z-notaciją ir Vienos mokyklą, labai nesigilinant?) g) Programų optimizavimas ir profiliavimas. 20/80 taisyklė. Profiliavimo įrankiai: gprof/gmon. h) Moksliniai (bioinformatiniai) skaičiavimai ir galimybė juos valdyti make-tipo sistemomis. Pradiniai failai, algoritmai, parametrai, rezultatų failai. Apibendrintas skaičiavimo procesas ir jo valdymas make pagalba. Integravimas su vizualiomis (visual, windows based) sistemomis.