Ohjelmointi

Wikipediasta
Siirry navigaatioon Siirry hakuun
Ohjelmointia Java-ohjelmointikielellä

Ohjelmointi tarkoittaa tietokoneelle tai vastaavalle ohjelmoitavalle laitteelle jollakin tavalla, tyypillisesti kirjoittamalla, annettavia toimintaohjeita formaalilla kielellä eli ohjelmointikielellä. Tietokoneet ymmärtävät niille annettavia käskyjä, joista muodostuu tietokoneelle suoritettavaksi annettu toimintaohje eli tietokoneohjelma.

Ohjelmoimalla saadaan aikaiseksi tietokoneohjelman konekielinen koodi, symbolista konekieltä oleva koodi tai korkeamman tason käännettävä lähdekoodi. Ohjelmointi kehittyi 1950-luvulta 1970-luvulle matalan tason ohjelmointikielistä käännettävien ohjelmointikielten suuntaan, sillä niiden symbolinen logiikka, loogiset rakenteet ja avainsanat ovat ihmisen helpommin ymmärrettävissä ja ohjelmointivirheet silmämääräisesti korjattavissa.

Korkeamman tason kieltä käyttämällä on lähdekoodi käännettävissä useammille kohdesuorittimille, kun taas konekieli ja symbolinen konekieli ovat sidoksissa tiettyyn suoritinarkkitehtuuriin ja siirrettävyys toiselle arkkitehtuurille on siksi heikko.

Tietokoneen suoritin ymmärtää suoraan vain ohjelmia, jotka on kirjoitettu konekielellä. Konekieli koostuu yksinkertaisista operaatioista, esimerkiksi "vähennä rekisterin 3 arvosta rekisterin 5 arvo". Ohjelmointi suoraan konekielellä on mahdollista, mutta hyvin hidasta ja virhealtista johtuen laitteiden eroavaisuuksista. Konekielellä ohjelmia kirjoitetaan usein vain poikkeustapauksissa. Useammin käytetään symbolista konekieltä (ks. assembly). On huomattavaa, että myös symbolinen konekieli kääntyy viime kädessä ykkösiksi ja nolliksi, jotka vastaavat prosessorin transistoreiden päälle/pois tilaa.

Tavallisesti tietokonetta ohjelmoidaan käyttämällä jotakin ohjelmointikieltä. Ohjelmointikielissä käytetään luettavia symboleja ja sovittuja koodeja. Esimerkiksi Pascal-kielisen ohjelman rivi palkka := palkka-vero; voisi kääntyä edellä mainituksi konekielen operaatioksi. Ohjelmointikielellä kirjoitettu lähdekoodi joko käännetään konekielelle tai tulkataan kieltä suorittavalla ohjelmalla. Käännettäessä koko ohjelma muutetaan kerralla konekieleksi, jonka tuloksena saatu ohjelma voidaan suorittaa ilman kääntäjää. Tulkattaessa tyypillisesti käännetään osa kerrallaan ja suoritetaan se, jonka jälkeen käännetään seuraava osa. Tulkattavan ohjelman suoritus vaatii siis joka kerta tulkin. Molemmissa tavoissa on mahdollista käyttää välikieltä apuna.

Ohjelmointiparadigmat ovat ohjelmointikielien taustalla olevia tapoja ajatella ja mallintaa ratkaisu. Eri kielet tukevat eri paradigmoja eri tavoin: osa kielistä on moniparadigmaisia, jolloin niillä voi ohjelmoida useilla eri tavoilla. Eräs merkittävä paradigma on olio-ohjelmointi.

Ennen tallennetun ohjelman tietokonetta muutokset ohjelmassa tarkoittivat muutoksia johdoissa ja kytkimissä (ks. Colossus).[1] Ennen vuotta 1954 lähes kaikki ohjelmointi tehtiin matalan tason ohjelmointikielillä kuten konekielellä tai assemblyllä.[2] Suuri osa ohjelmoijien työstä liittyi tuon ajan tietokoneiden rajoitteisiin.[2] Vuonna 1954 tietokonekeskukseen liittyvien ohjelmoijien kustannukset olivat tavallisesti lähes yhtä suuret kuin itse tietokoneen kustannukset, joka oli yksi motivaatio FORTRANin kehittämiselle.[2]

Margaret Hamiltonin työ Apollo Guidance Computerin ohjelmoinnissa ja kehitetyt konseptit olivat edelläkävijänä huippuluotettavien ohjelmistojen suunnittelulle.[3] Nykyisin ohjelmistoja käytetään myös turvakriittisissä järjestelmissä osana koko järjestelmää, jossa henkilöstön turvallisuus (engl. safety, koneturvallisuus) on mukana (erona muunlaisesta turvatekniikasta (engl. security)).[4][5]

Laitteistoabstraktion kannalta neljännen sukupolven ohjelmointikielet saavuttivat täyden riippumattomuuden laitteistoalustasta.[6] Neljännen sukupolven kieliä on myös kritisoitu laitteistoresurssien tuhlaavasta käytöstä, etenkin suoritusajan.[6]

1980-luvulla Japanissa aloitettiin projekti viidennen sukupolven tietokonejärjestelmän kehittämiseen, jonka merkittävin vaikutus oli mahdollisesti lukuisien ihmisten kouluttaminen tietotekniikkaan.[7]

Ohjelmiston laatu

[muokkaa | muokkaa wikitekstiä]

Ohjelmoinnissa tuotetun ohjelmakoodin laatua voidaan arvioida useilla eri mittapuilla:[8]

  • luotettavuus
  • suoritustehokkuus
  • turvallisuus
  • ylläpidettävyys

Näihin pyrkiessä voidaan käyttää apuna erilaisia ohjelmointikäytäntöjä.[9] Käytännöt liittyvät muun muassa koodin helppoon luettavuuteen, yhdenmukaisuuteen nimeämisessä ja ymmärrettävyyteen myös pitkän ajan jälkeen.[9] Käytännöillä parannetaan ohjelmoinnin tehokkuutta, vähennetään projektin riskejä ja helpotetaan ylläpitoa.[9]

Katso myös: Ohjelmointivirhe

Suoritustehokkuus

[muokkaa | muokkaa wikitekstiä]

Suoritustehokkuus vaikuttaa muun muassa virran käyttöön ja suoritusaikaan: huono suorituskyky aiheuttaa muita haittavaikutuksia.[10][11]

Ohjelmiston testaaminen

[muokkaa | muokkaa wikitekstiä]

Osana ohjelmiston laaduvarmistusta on ohjelmiston testaaminen, johon voi kuulua yksikkötestaaminen ja koodin kirjoittaminen testejä varten. Yrityskäyttöön suunnatuissa sovelluksissa riittävän testikattavuuden saamiseksi voi tarvita 1–3 riviä testikoodia jokaista tuotantoon menevää koodiriviä kohden ja suhde voi olla suurempikin.[12]

Tietoturvallinen ohjelmointi

[muokkaa | muokkaa wikitekstiä]

Tietoturvan kannalta merkittävissä järjestelmissä (pankkijärjestelmät, henkilötietojärjestelmät) käytetään periaatteita, joilla pyritään estämään tietoturva-aukkoja. Periaatteina ovat pääsyn valvonnasta huolehtiminen, vahvan salauksen käyttö ja salaisuuksien hallinta. Käytäntöjä ovat muun muassa koodin minimointi, koodin katselmointi ja auditointi.[13]

Mahdollisia tulevaisuuden ohjelmointimenetelmiä

[muokkaa | muokkaa wikitekstiä]

Ohjelmointikielet voivat perustua eri paradigmoihin kuten rinnakkaiseen käsittelyyn (CSP, Occam, LOTOS), logiikkaan (Prolog) ja niin edelleen.

Kvanttitietokoneiden ohjelmointiperiaatteet ovat merkittävästi erilaisia aiemmin käytetyistä: kvanttiohjelmoinnissa todennäköisyyksillä on suurempi merkitys.[14]

Tekoälyn koulutuksessa käytettävät periaatteet poikkeavat muun muassa järjestelmäohjelmoinnissa käytetyistä.

Laitteistokuvauskielet kuten VHDL ja SystemC ovat kehittyneet, jolloin myös ne muistuttavat enemmän ohjelmointikieliä. Muun muassa ASIC ja FPGA kehitys ovat muuttuneet logiikkasynteesin avulla.

  1. B. Jack Copeland: The Modern History of Computing plato.stanford.edu. 2006. Viitattu 7.10.2021. (englanniksi)
  2. a b c John Backus: FORTRAN Session (PDF) Computer History Musem. Viitattu 10.2.2020. (englanniksi)
  3. Margaret Hamilton NASA. Viitattu 8.9.2017.
  4. Firesmith, Donald: Engineering Safety- and Security-Related Requirements for Software-Intensive Systems (PDF) Carnegie Mellon University. Viitattu 29.9.2017. (englanniksi)
  5. Safety Critical Systems Design omg.org. Viitattu 27.9.2017.
  6. a b Roger Clarke: A Contingency Approach to the Application Software Generations rogerclarke.com. 1991. Viitattu 4.2.2020. (englanniksi)
  7. Andrew Pollack: 'Fifth Generation' Became Japan's Lost Generation 5.6.1992. New York Times. Viitattu 10.2.2020. (englanniksi)
  8. Software Quality Standards – ISO 5055 it-cisq.org. Viitattu 20.10.2021. (englanniksi)
  9. a b c Importance of Code Quality and Coding Standard in Software Development multidots.com. 21.1.2020. Viitattu 20.10.2021. (englanniksi)
  10. The Impact of Source Code in Software on Power Consumption (PDF) hal.archives-ouvertes.fr. Viitattu 20.10.2021. (englanniksi)
  11. Consequences of Poorly Performing Software Systems (PDF) immagic.com. Viitattu 20.10.2021. (englanniksi)
  12. The current state of unit testing livebook.manning.com. Viitattu 20.10.2021. (englanniksi)
  13. Secure coding practices every developer should know snyk.io. Viitattu 20.10.2021. (englanniksi)
  14. 'Quantum computer algorithms are linear algebra, probabilities. This is not something that we do a good job of teaching our kids' theregister.com. 1.10.2021. Viitattu 7.10.2021. (englanniksi)

Kirjallisuutta

[muokkaa | muokkaa wikitekstiä]

Aiheesta muualla

[muokkaa | muokkaa wikitekstiä]