**Lähdekoodilla** tarkoitetaan ohjelmoinnissa tietokoneohjelman tekstimuotoista ohjelmointikielistä kuvausta.

Lähdekoodina ohjelma on ohjelmoijien kirjoittamassa ja ylläpitämässä muodossa.
Lähdekoodia säilytetään yleensä versionhallintajärjestelmässä, jolloin kaikista muutoksista jää lokimerkintä ja eri versioihin on myöhemmin mahdollista palata muun muassa osana virheenjäljitystä ja laadunvarmistusta.
Jos lähdekoodi on kaikkien nähtävissä ja vapaasti jatkohyödynnettävissä, puhutaan avoimesta lähdekoodista tai vapaasta ohjelmistosta. Koska tietokoneen suoritin suorittaa vain konekieltä, ohjelman ajaminen vaatii lähdekoodin kääntämisen tai tulkkaamisen.

Määritelmiä
-----------

Richard Stallmanin määritelmä, joka muotoiltiin 1989 GPL-lisenssissä, ehdotti lähdekoodia millaiseksi muodoksi tahansa, jossa ohjelmistoa muokataan: 

> "Teoksen 'lähdekoodi' tarkoittaa teoksen valittua muotoa, johon muutoksia tehdään."
> 
> 

Jotkut klassiset lähteet määrittelevät lähdekoodin ohjelmointikielten tekstimuotona, esimerkiksi:

> Lähdekoodi on ohjelmiston versio siinä muodossa kuin se on alun perin kirjoitettu (Esim. syötetty tietokoneelle) ihmisen toimesta pelkkänä tekstinä (Esim. luettavina aakkos-numeerisina merkkeinä).
> 
> 

Määritelmä vastaa tosiasiaa, kun ohjelmien kääntäminen ilmestyi ensimmäisen kerran, silloiset ohjelmistotuotannon työkalut olivat tekstipohjaisia ohjelmointikieliä. Näin ollen lähdekoodi tarkoitti tekstikoodia, kun taas konekoodi oli kohdekoodi. Kuitenkin, kun ohjelmointiputket alkoivat sisällyttää enemmän väliasteen muotoja, osa kielistä, kuten JavaScript, voitiin kääntää joko lähde- tai kohdekoodiksi. Tämä johti siihen, että tekstikoodi ei enää vastannut lähdekoodin synonyymiä. 

Näin ollen Stallmanin määritelmä ottaa huomioon JavaScriptin ja HTML:n lähde-kohde-epäselvyyden sekä mahdolliset tulevaisuuden ohjelmistotuotannon muodot, kuten visuaaliset ohjelmointikielet tai koneoppimisessa käytetyt tietokannat.

Toiset laajemmat tulkinnat puolestaan katsovat lähdekoodin sisältävän konekoodin yhdessä kaikkien korkean tason kielten kanssa, jotka sitä tuottavat. Tämä määritelmä kumoaa alkuperäisen kone-teksti-erottelun pitämällä ohjelman kääntämisen jokaista vaihetta lähdekoodina.

> Selkeyden vuoksi "lähdekoodilla" tarkoitetaan mitä tahansa täysin suoritettavaa kuvausta ohjelmistojärjestelmästä. Näin ollen sen tulkitaan sisältävän konekoodin, erittäin korkean tason kielet sekä suoritettavat graafiset esitykset järjestelmistä. 
> 
> 

Tämä lähestymistapa mahdollistaa joustavamman tavan järjestelmän analysointiin, eikä vaadi suunnittelijaa julkaisemaan helppoa ymmärtämisen ja muokkaamisen muotoa. Sitä voidaan soveltaa myös tilanteisiin, joissa suunnittelijaa ei tarvita, kuten DNA:n tapauksessa. Kuitenkin tämä analyysin muoto ei ota huomioon kalliimpaa koneiden välistä koodianalyysiä verrattuna ihmisen ja koneen koodianalyysiin.

Kääntäminen
-----------

Useimmilla ohjelmointikielillä työskennellessä ohjelman lähdekoodi on käännettävä kääntäjäksi kutsutulla tietokoneohjelmalla ensin suoritettavaan muotoon ennen kuin se voidaan ajaa. Ennen varsinaista suorituskelpoista ohjelmaa lähdekoodi käännetään objektimuotoiseksi ohjelmaksi. Tähän objektimuotoiseen ohjelmaan linkitetään valmiit kirjastomoduulit ja tuloksena syntyy suorituskelpoinen ohjelma.

Tulkkaaminen
------------

Lähdekoodia voidaan suorittaa myös *tulkkausperiaatteella*. Tulkkauksessa lähdekoodia luetaan ja suoritetaan yksi lauseke kerrallaan. Tämä tapa on huomattavasti hitaampi suorituksessa, mutta etuna on aikaavievän käännöksen poisjäänti. Tulkkaavaa suoritusta voidaan käyttää ohjelman kehitystyössä ja protoilussa, jossa tärkeintä on valmiin toimivan prototyypin nopea kokeilutestaus kehityksen lomassa.

Esimerkkejä
-----------

### C-kieli

Tyyppiesimerkki C-kielisestä ohjelmasta:

```
 
 #include <stdio.h>
 int main(void)
 {
 puts("Huomenta maailma!");
 }

```

### Java

Alla esimerkki lyhyestä Java-kielisestä lähdekoodista:

```
 
 public class HeiMaailma {
 public static void main(String[] args) {
 System.out.println("Hei Maailma!"); 
 } 
 }

```

### PHP

PHP-lähdekoodin tarkasteleminen ei onnistu kuin muokatessa tiedostoa, koska PHP on kieli joka suoritetaan palvelimen puolella, joten lähdekoodia ei missään vaiheessa lähetetä käyttäjälle. PHP tulostuu lähdekoodiin HTML-kielenä.

Esimerkki PHP-kielisestä lähdekoodista:

```
<?php
echo ('Moikka Wikipedia!'); 
?>

```

Lähdekoodin muokkaus
--------------------

Lähdekoodia muokataan yksinkertaisella *editoriksi* kutsutulla tekstitoimittimella. Editorin tärkeimpiä ominaisuuksia on, että se ei lisää tavallisen tekstinkäsittelyohjelman ohjauskoodeja tekstin sekaan (joita kääntäjä ei osaa käsitellä).

Ohjelmakoodia kirjoitetaan myös ohjelmointiympäristöissä. Niissä on monia ohjelmointia helpottavia ja nopeuttavia automatisoituja rutiineja. Tällaisia ovat esimerkiksi virheiden paikallistaminen, kirjastomoduulien ennakoiva kirjoitus, debuggaus, versionhallinta ja suoritusnopeuden profilointi.

Katso myös
----------

* Välikieli

Lähteet
-------

1. ↑  lähdekoodi *Tietotekniikan termitalkoot*.  5.12.2014. Sanastokeskus TSK ry.  "ohjelma ohjelmoijien kirjoittamassa ja ylläpitokelpoisessa muodossa" Viitattu 30.6.2020.
2. ↑  Richard Stallman - 1989 - Announced through the GNU Bulletin and published with GNU software -
3. ↑  The Linux Information Project. "Source Code Definition"Arkistoitu 3. Lokakuuta 2017, Wayback Machine
4. ↑  "gnu.org". *www.gnu.org*. Arkistoitu alkuperäisestä teoksesta 3. Heinäkuuta 2017.
5. ↑  Stallman, Richard (15 Marraskuuta 2017). "The JavaScript Trap - GNU Project - Free Software Foundation". Gnu.org.
6. ↑  Why Source Code Analysis and Manipulation Will Always Be Important by Mark Harman, 10th IEEE International Working Conference on Source Code Analysis and Manipulation (SCAM 2010). Timișoara, Romania, 12.–13. Syyskuuta 2010.
7. ↑  SCAM Working Conference Arkistoitu 29. Syyskuuta 2017, Wayback Machine, 2001–2010.

Aiheesta muualla
----------------

* Kuvia tai muita tiedostoja aiheesta **Lähdekoodi** Wikimedia Commonsissa