Seppo Mustonen:

Tietoisku Survosta ja sen tulevaisuudesta (5.10.1993)


From: seppomus@plootu.Helsinki.FI (Seppo Mustonen)
Newsgroups: hy.atk.survo 
Subject: Tietoisku Survosta ja sen tulevaisuudesta
Date: 5 Oct 1993 16:06:34 +0200
Organization: University of Helsinki
Message-ID: <28rv1a$8v6@plootu.Helsinki.FI> 

On ilahduttavaa, että moni on tämän keskustelun yhteydessä ottanut rakentavasti kantaa erilaisten Survon kehitysmahdollisuuksien suhteen. Antaakseni keskustelulle toivottua konkreettista pohjaa tarjoan seuraavia faktoja ja mielipiteitä. Valitan tämän tietoiskun pituutta, mutta onhan tämä ensimmäinen kerta, kun näyttäydyn näillä sähköisillä foorumeilla. Seuraavalla kerralla lupaan olla lyhytsanaisempi.

Survon nykyisen C-kielisen perusversion lähdekoodi, josta itse vastaan, jakautuu noin 700 kompilandiin (keskikoko 5 KB). Näissä on yhteensä noin 7000 C-funktiota. Ohjelmarivejä (arvio 20 merkkiä keskimäärin riviä kohti) on siis noin 200'000. Lisäksi tulevat muiden tekemät laajennukset, mm. Markku Korhosen tekemät arvokkaat varianssianalyysin ym. lisämodulit.
     Ko. koodista muodostuvat Survon kirjastofunktiot ja modulikohtaiset pää- ja alifunktiot. Survo-moduleja eli aitoja EXE-tiedostoja on perusversiossa kaikkiaan noin 200, jotka ajoaikaisesti pelaavat automaattisesti yhteen Survon editorin (S.EXE) suojeluksessa. Lisäksi muita systeemitiedostoja on reilusti yli 100.
     Nykysurvon ohjelmatekniset ratkaisut lyötiin lukkoon 8 vuotta sitten. Olin jo pitkään etsinyt parempaa perustaa tulkkaavan Basicin varaan rakennetulle systeemeille (SURVO 76 ja SURVO 84). Oli onnellinen sattuma, että kiinnittäessäni huomiota C-kielen mahdollisuuksiin Microsoft sattui juuri silloin julkistamaan uuden C-kääntäjänsä, ver.3. Microsoftin nimellä aikaisemmin kulkeneet C-kääntäjät olivat itse asiassa Latticen tekemiä. Tämä 3-versio oli täysin uusi konstruktio, jota tietääkseni oli jo parin vuoden ajan kokeiltu Microsoftin omien tuotteiden ohjelmoinnissa. Näin ollen siinä oli (uudeksi kääntäjäksi) suhteellisen vähän lastentauteja.
     Tuolloin C-kielen ANSI-standardia ei ollut vielä olemassa. Vaikka sovelsinkin kielen käsky- ja tietorakennevalikoimia varsin säästeliäästi, nykyinen koodi ei em. syystä voi olla kaikin osin ANSI-standardin mukaista. Tämänhetkinen Survo on käännetty Microsoftin C-kääntäjän 6-versiolla (välissä ovat ollet siis myös versiot 4 ja 5). Kääntäjän versio 7 on "susi" DOS-ohjelmoinnin kannalta. Uusimmassa 8-versiossa puutteet on ilmeisesti poistettu ja Survo saatetaan siirtää sen alaisuuteen, vaikka mitään pakottavaa syytä siihen ei liene.

Survon rakenne on hyvin modulaarinen. Pääprosessina on Survon oma editori, joka käyttäjän aktivointien mukaisesti automaattisesti kutsuu vapaana olevaan DOS-muistiin muita Survo-moduleja lapsiprosesseina.
     Tieto emoprosessilta (editori) välittyy yhden ainoan osoitteen (pointterin) avulla. Ko. pointteri osoittaa pointterivektoria, jonka alkioina ovat kaikkien globaalisten muuttujien osoitteet (pointterit). Lapsiprosessi voi näin lukea emon puolelta erilaisia lähtötietoja (esim. komentojen parametrit, komentojen toimituskentässä olevat täsmennykset ja Survon yleistä tilaa koskevat tiedot). Vastaavasti lapsiprosessi voi kirjoittaa tuloksiaan toimituskenttään ja emoprosessin osoittamiin tiedostoihin.
     Kun lapsi lopettaa työnsä, se yksinkertaisesti vapauttaa varaamansa keskusmuistitilan ja editori jatkaa välittömästi niin kuin mitään ei olisi tapahtunutkaan. Näin (varsinkin välimuistin ollessa käytössä) ohjelmien jatkuva vaihtelu on hyvin nopeaa ja käyttäjälle systeemi näkyy saumattomana kokonaisuutena.

Ohjelmantekijöiden kannalta tällainen modulaarisuus on ratkaiseva etu siinä, että jokainen voi rakentaa omia moduleitaan täysin riippumatta siitä, mitä muut mahdollisesti ovat tehneet tai tekemässä. Systeemin koolle ei ole mitään ylärajaa. Ainoa "rajoitus" koskee aktivoitavien komentojen nimiä, koska esim. komentoa PRINT tulee vastata Survon päähakemistossa !PRINT.EXE-niminen ohjelmatiedosto. Ohjelmantekijöillä on vapaasti käytössään kaikki Survon C-kirjastofunktiot, jotka huolehtivat mm. toimituskentän, havainto-, matriisi- ja tulostiedostojen hallinnasta.
     Esim. tyypillinen tilastollinen moduli syntyy yksinkertaisesti kokoamalla modulin pääfunktioksi jono valmiita kirjastofunktiokutsuja. Omalle vastuulle jää varsinaisen laskenta-algoritmin ja tulostusmuodon ohjelmointi. Edellisessä tehtävässä auttavat esim. valmiit matriisifunktiot ja jälkimmäiseen on myös valmiita osaratkaisuja. Tämä ohjelmointitapa paitsi helpottaa työtä myös luonnostaan lisää eri toimintojen ja käyttötapojen yhtenäisyyttä. Survon-ohjelmointitekniikkaa ja sen kirjastofunktiot on kuvattu julkaisussa "Programming SURVO 84 in C".

Oma tärkeä osuutensa Survossa on editoriaalisella käyttöliittymällä, joka yhdessä em. rakenteellisten sopimusten kanssa luo sille ominaisen käyttötyylin, tai -"ideologian", jos niin halutaan sanoa.
     Kun nyt ajatellaan Survon rinnakkaisversion tekoa esim. Windowsiin, Unixiin jne., olisi pidettävä tarkoin huolta siitä, että tuloksena syntyy ratkaisu, jossa yhdistyvät nykysurvon ja ko. uuden ympäristön hyvät puolet. Ennen mitään raskaampia satsauksia tämä on varmistettava; muuten on turha edes lähteä liikkeelle.
     Mielestäni juuri Survo ja Windows ovat monessa suhteessa kuin tuli ja vesi. Olen siis varsin skeptinen ainakin tämän yhdistelmän suhteen. Jos Survosta tehtäisiin aito Windows-ohjelma, niin pahoin pelkään, että jouduttaisiin luopumaan monista ominaisuuksista, joihin Survon suosio nykyisten käyttäjien piirissä perustuu.

Hiukan eritellymmin voidaan mahdolliselle uudelle Survo-toteutukselle esittää seuraavia vaatimuksia. Annan kullekin vaatimukselle oman ehdottomuusasteeni välillä (0,100), jossa 100 vastaa täyttä ehdottomuutta.

1. Yhteensopivuus käyttäjän kannalta (100)
Kaikkien nykysurvon toimintojen on toimittava täsmälleen samoin uudessa versiossa. Tämä ei estä uudelta lisäominaisuuksia, jotka tuovat mukaan uuden ympäristön tarjoamia keinoja.
     Vaatimuksen ehdottomuus johtuu paljolti siitä, että Survo on myös yleinen ongelmanratkaisuympäristö ja sovelluskehitin. Siinä on aitoja omia "kieliä" ja työskentelytapoja (mm. matriisitulkki, grafiikan ohjaus, editoriaalinen ja kosketuslaskenta ja tärkeimpänä makro-ohjelmointiin tarkoitettu sukro-kieli), joilla laadittujen sovellusten ja opetusohjelmien tulee pyöriä entiseen tapaan.

2. Olemassa olevan lähdekoodin kelvollisuus (95)
Nykyversiossa lähdekoodia on niin paljon, että se on voitava siirtää uudelle puolelle joko sellaisenaan tai pienin mekaanisin muutoksin, jotka voi toteuttaa ohjelmallisesti. On erittäin arveluttavaa lähteä kirjoittamaan alusta uudelleen toimivia ohjelmia, koska eteen tulisi pitkä epävarmuuden aika sen suhteen, toimiiko systeemi vai ei kaikissa tilanteissa. Ainoa varaus koskee itse editoria, jossa interaktio käyttäjän suuntaan (näyttö ja näppäimistö) joudutaan panemaan uusiksi. Tähän onkin jo alunperin varauduttu, koska ko. toiminnat on nykysurvossa eristetty määrättyihin funktioihin.

3. Laiteympäristö ja käyttöjärjestelmä (80)
Koska nykyinen Survo on varsin kohtuullinen laitevaatimuksien suhteen (riittää jopa XT, DOS-perusmuisti, 20 Mtavun kovalevy ja EGA-näyttö), ei ole järkeä lähteä istuttamaan sitä olennaisesti kalliimpiin koneisiin, joiden levinneisyys on rajoitettu. Tämän vuoksi ilmeisesti vain PC-tyyppiset tulevat kysymykseen, ehkäpä tasolta 386 alkaen. Unix ja OS/2 sulkeutuvat myös ainakin tällä hetkellä pois, koska kummankaan osalta en jaksa uskoa suosion olennaiseen kasvuun. Niin mielenkiintoiselta kuin Windows NT vaikuttaakin, sen kovat laitevaatimukset saavat epäilemään. Jäljelle jää vain tavallinen Windows (tai aito 32-bittinen DOS sitten kun se tulee).

Nykyinen Survo toimii suhteellisen mukavasti sellaisenaan Windowsin DOS-ikkunassa. Toiminta on kokoruutunäytössä nopeaa, mutta hidastuu ikkunoidussa tilassa varsinkin kuvaruutugrafiikan osalta liikaa. 386-moodissa on mahdollista pyörittää useitakin Survoja samanaikaisesti, jolloin pääsee esim. näyttämään kuvia yhdessä ikkunassa ja tekemään laskutoimituksia, analyyseja jne. toisissa.
     Mielestäni Windowsin tuessa puhtaille DOS-ohjelmille on kuitenkin paljon toivomisen varaa. Survolle ominaisen työskentelyn kannalta olisi paljon hyötyä jo siitä, että ikkunoita voisi suoraan kopioida ruudulla, jolloin esim. kuva jäisi näkyville ja samalla Survolla voitaisiin jatkaa työtä eteenpäin. Ehkä tällainen onkin mahdollista; kukaan ei vain tietääkseni ole kunnolla ehtinyt tutkia sitä, miten nykysurvon käyttö Windowsin alaisuudessa olisi parhaiten kuvioitavissa.
     Se on kuitenkin selvää, ettei aitojen Windows-ohjelmien käyttötapaa eikä DDE- ja OLE-tyyppisiä liitäntöjä ole saavutettavissa. Survon sisällä ja sen omalla käyttöliittymällä vastaavat palvelut ja toimintojen yhdistelyt ovat kuitenkin jo olemassa ja uskallan väittää, jopa integroidummin ja tehokkaammin kuin Windows-ohjelmien välillä.
     Näin ollen on aihetta kysyä, saavutetaanko Survon muuntamisella aidoksi Windows-ohjelmaksi mitään muuta kuin muodinmukaisuutta ja sen tuomia "markkinoinnillisia" etuja.

Windowsille ominainen työmuoto on jono valintoja, jotka tehdään osoittelemalla kuvaruudulla näkyviä edellisistä valinnoista riippuvia vaihtoehtoja. Tämä on mukavaa ja helppoa, kun siihen tottuu ja oppii muistamaan, kertaluonteisissa tehtävissä, mutta turhauttavaa, kun samat toimenpiteet joudutaan toistamaan useasti. Toistoa helpottavat nauhoitusmahdollisuudet ovat ilmeisesti melko rajoittuneita ja alkeellisia.
     Vaikka Survon editoriaalinen peruskäyttötapa edellyttää komentojen ja komentokaavioiden kirjoittamista ja aktivointia, kaikki työn ohjausta koskevat tiedot jäävät toimituskenttään ja ovat helposti toistettavissa. Ne on myös eri tavoin nimettävissä ja talletettavissa esim. Survon makroina (sukroina), joita edelleen on mahdollista kehitellä sukrokielen avulla. Näin luodaan esim. opetus- ja asiantuntijasovelluksia käyttäjille, jotka edes tietämättä Survosta juuri mitään voivat toistaa omilla lähtötiedoillaan aikaisemmin talletettuja ehdollisia toimenpidesarjoja.
     Survon avulla taitavat käyttäjät voivat siis nopeasti luoda hyvin helppokäyttöisiä, esim. valikkopohjaisia ratkaisuja, jolloin toiminnallisesti päästään Windows-käyttötapaa vastaavaan tilanteeseen.

Vielä tällä hetkellä katson omalta ja Survon käyttäjien kannalta hyödyllisemmäksi jatkaa nykyversion parantamista ja laajentamista kuin jättää sen osalta asiat seisomaan ja keskittyä jonkin rinnakkaisversion suunnitteluun.
     Survon levikki on tällä hetkellä noin 1000 kpl normaaliversiota (SURVO 84C) yksittäisinä, kopiosuojattuina asennuksina, noin 20 määräaikaista verkkoasennusta, joissa 5-100 työasemaa kussakin. Entinen kouluversio (SURVOS), laajuudeltaan noin puolet normaaliversiosta, ehti levitä koulukohtaisella lisenssillä lähes 50 keskiasteen ja vastaavaan oppilaitokseen. Tämän vuoden alusta SURVOS on päästetty täysin vapaaseen jakeluun ei-kaupallisissa sovelluksissa eikä levikistä voi esittää edes summittaisia arvioita.
     Kokonaisuudessaan Survoa käyttää Suomessa tällä hetkellä ehkä parisentuhatta ihmistä. Survon (tekijöistä riippumattoman) käyttäjäyhdistyksen jäsenmäärä on noin 150. Tälle käyttäjäkunnalle olen mielestäni velkaa sen, että nykyversio voi jatkuvasti hyvin ja että sitä viedään eteenpäin. Esim. jo pelkästään tilastollisen analyysin toimintojen jatkokehittelyssä riittää paljon mielenkiintoista tehtävää.

Silti olen halukas keskustelemaan muista vaihtoehdoista ja tarkistamaan käsityksiäni, kun aihetta ilmenee. Varsinkin siitä innostuisin, että DOS:ista vihdoinkin saataisiin aito 32-bittinen versio.