Ohjelmointiympäristö

**Ohjelmointiympäristö** on ohjelma tai joukko ohjelmia, jolla ohjelmoija suunnittelee ja toteuttaa ohjelmistoa. Yksinkertaisimmillaan ohjelmointiympäristö sisältää tekstieditorin ja keinon käynnistää ja saada palautetta ohjelmointikielen kääntäjältä, joka on erillinen ohjelma.
Tekstieditorilla tuotetaan lähdekoodia ja kääntäjä muuttaa lähdekoodin ajettavaksi ohjelmatiedostoksi tai kirjastoksi.

Nykyisin samaan ympäristöön integroituvat myös muun muassa debuggeri, versionhallintatuki sekä profilointi. Muita työkaluja ovat visuaaliset käyttöliittymän muokkaamiseen käytettävät työkalut, dokumentaatiotyökalut ja niin edelleen.

Kehittyneet ohjelmointiympäristöt osaavat luoda suunnittelussa tehdystä UML-mallista suoraan lähdekoodin rungon (skeleton), jota suunnittelija/ohjelmoija voi täydentää. Esimerkiksi mallin tietoihin liittyvien toimenpiteiden (metodit) kutsut luodaan automaattisesti parametreineen.

Tietokoneohjelmia voi tehdä ilman ohjelmointiympäristöäkin, mutta niiden tavoitteena on helpottaa ohjelmoijan työntekoa tuomalla eri työkalut yhteen.

## Historiaa

Tietokoneiden alkuaikoina komentojen antaminen tietokoneelle oli hyvin vaivalloista. (kts. Käyttöliittymän historia) Tietokone saatettiin käynnistää suorittamaan yksi laskutoimitus, jonka arvoja oli kytkimillä syötetty bitti kerrallaan. Myöhemmin tietokoneet alkoivat ymmärtää komentosarjoja ja näiden syöttämiseen käytettiin vielä toisen maailmansodan aikaan isoa nippua reikäkortteja, mutta tiedot syötettiin edelleen bitti kerrallaan konekielisiksi komennoiksi. Kun tietokoneisiin lopulta saatiin kehitettyä suhteellisen halvat magneettiset massamuistit ja tietokoneet saatiin ymmärtämään merkkipohjaisia syötteitä, alkoi varsinaisten ohjelmointiympäristöjen ja ensimmäisten konekieliseksi suoraan käännettävien pseudokielisten ohjelmointikielien kehittäminen. (kts. Assembly (ohjelmointikieli)) Tarvittiin jokin keino järjestää tietokoneita ohjaavat bitit nopeammin ja tiheämpään. Tällöin ohjelmointiympäristöt alkoivat ymmärtää heksoja ja myöhemmin kokonaisia sanoja, jotka sitten kirjoitettiin bitti kerrallaan halvalle uudelleenkirjoitettavalle massamuistille. Tämän bittijonon tietokone sitten käänsi konekielisiksi komennoiksi.

Samaan pakettiin integroitu ohjelmointiympäristö (IDE, *integrated development environment*) tuli ensimmäisenä Turbo Pascaliin.

## Nykyään

Ohjelmointiympäristö parhaimmillaan nykypäivänä suorittaa koodin oikeellisuuden tarkistamista jo kirjoitusvaiheessa sekä kääntämisvaiheessa, ellei kyseessä ole tulkattava tai tavukoodin kautta tulkattava ohjelmointikieli. Ohjelmointiympäristöt osaavat myös neuvoa ohjelmoijaa syntaksin kanssa. Yleensä ohjelmointiympäristöt tarjoavat jo sinällään jonkin verran valmista koodia käsikirjan sivuilla tai ohjelmointiympäristöä voidaan pyytää luomaan jonkinlainen valmis pohja ohjelmalle ohjelmoijan antamien ohjeiden pohjalta. Joissakin tapauksissa valmista koodia saa muutamalla hiiren napin painalluksella satoja ellei tuhansia rivejä. On myös tehty ympäristöjä, joissa ohjelmoijan ei tarvitse osata sanaakaan lausekielistä ohjelmointia, vaan tietokone tekee valmiin ohjelman osittain ennalta määrätysti, mutta ottaen myös huomioon käyttäjän tai ohjelmoijan pyyntöjä. Näiden käyttäminen ei ole tehottomuutensa vuoksi suotavaa.

## Ohjelmointiympäristön osia ja ominaisuuksia

#Käyttöliittymä (joko graafinen tai konsolissa toimiva merkkipohjainen)
##Sanojen värjääminen tyypin mukaan (syntaksikorostus)
##Lauseen ennakoiminen ja esimerkin samalla näyttäminen
##Koodin ulkoasun automaattista muotoilua
##Ohjelman käyttöliittymän suunnittelu käyttämällä pelkkää hiirtä
#Kääntäjä tai tulkki
##Virhetilanteen paikantaminen ja korjausehdotuksen antaminen
##Mahdollisuus ajaa koodi sellaisessa ympäristössä joka ei välttämättä suorita koodia vaan keskittyy virheiden löytämiseen. Myös mahdollisten muistivuotojen tarkistaminen

## Ohjelmointiympäristöjä
* Android Studio - Virallinen ohjelmointiympäristö Android-sovellusten kehittämiseen
* Delphi
* Eclipse
* Gambas - Avoimen lähdekoodin kilpailija Visual Basicille
* KDevelop
* Lazarus
* Qt Creator
* Turbo Pascal
* SQLWindows
* Visual Basic
* Visual Studio
* Xcode

## Katso myös

* Käytettävyys
* Käyttäjäkeskeinen suunnittelu
* Käyttöliittymä
* Ohjelmistotuotanto
* Ohjelmistotekniikka
* Ohjelmointikieli
* Tavukoodi

## Aiheesta muualla

* Anjuta - C\C++ ohjelmointiympäristö UXeille
* DevC++  - C\C++ ohjelmointiympäristö windows alustalle joka käyttää MiniGW32:ta.
* Gambas  - Visual Basic tyylinen avoimenkoodin ohjelmointiympäristö.
* MS Visual Studio - Ohjelmointiympäristö usealle eri kielelle. Microsoftin tuote.
* SPE - Stanis Python Editor, eli Stanin Python muokkaaja.
* SUN Studio - C\C++ kehitystyökalut solarikselle tai linuxille
* SUN Creator - Java-ohjelmointiympäristö usealle alustalle.
* Eclipse - Avoin javapohjainen ohjelmointiympäristö useille kielille.
* OpenGL-pohjainen 3D peliohjelmointipaketti