Ohjelmointi
Tätä artikkelia tai sen osaa on pyydetty parannettavaksi, koska se ei täytä Wikipedian laatuvaatimuksia. Voit auttaa Wikipediaa parantamalla artikkelia tai merkitsemällä ongelmat tarkemmin. Lisää tietoa saattaa olla keskustelusivulla. Tarkennus: Keskittyy vain ohjelmointikielien historiaan (joka jo artikkelissa Ohjelmointikieli), tässä voisi keskittyä enemmän ohjelmointimenetelmiin, periaatteisiin ja ohjelmistotuotannon näkökulmaan. |
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.
Perusteet
muokkaaTähän artikkeliin tai osioon ei ole merkitty lähteitä, joten tiedot kannattaa tarkistaa muista tietolähteistä. Voit auttaa Wikipediaa lisäämällä artikkeliin tarkistettavissa olevia lähteitä ja merkitsemällä ne ohjeen mukaan. |
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.
Historia
muokkaa- Pääartikkelit: Tietokonetekniikan historia ja Ohjelmointikieli
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
muokkaaOhjelmoinnissa 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
muokkaaSuoritustehokkuus vaikuttaa muun muassa virran käyttöön ja suoritusaikaan: huono suorituskyky aiheuttaa muita haittavaikutuksia.[10][11]
- Katso myös: Asymptoottinen suoritusaika
Ohjelmiston testaaminen
muokkaaOsana 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
muokkaaTietoturvan 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ä
muokkaaOhjelmointikielet 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.
Katso myös
muokkaaLähteet
muokkaa- ↑ B. Jack Copeland: The Modern History of Computing plato.stanford.edu. 2006. Viitattu 7.10.2021. (englanniksi)
- ↑ a b c John Backus: FORTRAN Session (PDF) Computer History Musem. Viitattu 10.2.2020. (englanniksi)
- ↑ Margaret Hamilton NASA. Viitattu 8.9.2017.
- ↑ Firesmith, Donald: Engineering Safety- and Security-Related Requirements for Software-Intensive Systems (PDF) Carnegie Mellon University. Viitattu 29.9.2017. (englanniksi)
- ↑ Safety Critical Systems Design omg.org. Viitattu 27.9.2017.
- ↑ a b Roger Clarke: A Contingency Approach to the Application Software Generations rogerclarke.com. 1991. Viitattu 4.2.2020. (englanniksi)
- ↑ Andrew Pollack: 'Fifth Generation' Became Japan's Lost Generation 5.6.1992. New York Times. Viitattu 10.2.2020. (englanniksi)
- ↑ Software Quality Standards – ISO 5055 it-cisq.org. Viitattu 20.10.2021. (englanniksi)
- ↑ a b c Importance of Code Quality and Coding Standard in Software Development multidots.com. 21.1.2020. Viitattu 20.10.2021. (englanniksi)
- ↑ The Impact of Source Code in Software on Power Consumption (PDF) hal.archives-ouvertes.fr. Viitattu 20.10.2021. (englanniksi)
- ↑ Consequences of Poorly Performing Software Systems (PDF) immagic.com. Arkistoitu 20.10.2021. Viitattu 20.10.2021. (englanniksi)
- ↑ The current state of unit testing livebook.manning.com. Viitattu 20.10.2021. (englanniksi)
- ↑ Secure coding practices every developer should know snyk.io. Viitattu 20.10.2021. (englanniksi)
- ↑ '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- Erich Gamma & Richard Helm & Ralph Johnson & John Vlissides: Design Patterns - Olio-ohjelmointi, Suunnittelumallit. IT Press, 2000. ISBN 951-826-428-7
- Steve McConnell: Code Complete. (Second Edition) Microsoft Press, 2004. ISBN 0-7356-1967-0
- Jouni Smed & Harri Hakonen & Timo Raita: Sopimuspohjainen olio-ohjelmointi Java-kielellä. Elektroninen kirja, 2007. ISBN 978-952-92-1776-2