"hello, world" Brian Kernighan 1978an egindako programa informatikoa
**Programa informatiko** bat instrukzio sekuentzia bat da, gailu informatiko batek egikaritzean zeregin bat gauzatzen duena. Gailu informatiko gehienek programa informatikoen beharra dute ondo funtzionatzeko.

Programa informatikoen kodea progamazio lengoaia batean idazten dira, gehienetan programatzaile batek idatzita. Kode honi iturburu kodea deritzo, eta konpilatzaile batez konpilatu eta mihiztatu ondoren fitxategi egikarigarri batean bihurtzen da.

Programazio informatikoen multzoari, liburutegi eta datuekin batera, software deitzen zaio. Haien funtzioari erreparatuz bi mota daude: sistemako softwarea eta aplikazio softwarea.

Historia
--------

IX. mendean Al-Kindi matematikari arabiarrak kriptoanalisia definitu zuen analisi frekuentziala erabiliz, eta hau izan zen historiaren lehen kode algoritmoa.

### Lehenengo makina programagarriak

Lehenengo makina programagarriak ordenagailu digitalaren asmakuntzarekin etorri ziren. Hauek dira aipagarrienak:

* IX. mendean Banu Musa anaiek musika sekuentzagailu bat asmatu zuten.
* 1206an Al-Jazari ingeniari arabiarrak erritmo kutxa bat programatu zuen.
* 1801an Joseph-Marie Jacquardek ehungailu mekaniko bat asmatu zuen, txartel zulatuez baliatzen zena oihalean patroiak egiteko.

### Motore analitikoa

1837an Charles Babbage, Jacquarden ehungailuan inspiratuta, motor analitikoa sortzen saiatu zen. Txartel zulatuen bi atalekin programatua izan zen, bata operazioa egiteko eta bestea aldagaiak gordetzeko. Nahiz eta Erresuma Batuaren gobernuak 17.000 libra baino gehiago inbertitu, ez zen lortu dena ondo burutzea.

### Turing makina

Programa informatikoak gordetzeko erabiltzen ziren txartel zulatuak
1936an Alan Turingek Turing makina sortu zuen. Turing makina teorikoa zen eta edozein algoritmo simulatu ahal zuen.

### Lehen ordenagailu programagarriak

1941ean Konrad Zusek Z3 ordenagailu digital eta programagarria sortu zuen. Ordenagailu digitalek elektrizitatea erabiltzen dute osagai kalkulatzaile bezala. Z3 ordenagailuak 2400 errele zituen zirkuituak sortzeko eta zirkuitu hauek 9 instrukzio bitarreko ordenagailu bat osatzen zuten. Z3 ordenagailua programatzeko teklatu berezi bat eta txartel zulatu berezi bat erabili zuten.

1945ean ENIAC ordenagailua atera zen. ENIAC Turingen testa betetzen zuen, eta zirkuituak egiteko 17.468 balbula termoionikoak erabiltzen zituen ordenagailu bat zen. 30 tona pisatzen zituen eta 167m² okupatzen zituen. Gainera, $650 gastatzen zituen orduko. ENIAC programatzeko bi hilabete behar izan zituzten eta programa bat debugeatzeko aste bete bat behar zen. ENIAC programatu zutenak emakumeak ziren eta "ENIAC girls" deitzen zieten. 8 urte egon zen martxan, hidrogeno bonben aldagaiak kalkulatzen, eguraldiaren iragarpena egiten eta artilleria armak kontrolatzeko aginteak egiten.

1948an Manchester Baby izan zen sortua. Hau programatzeko ez zen behar kablerik mugitzea, izan ere programa memoria batean zenbaki bezala gordeta zegoen. 3 biteko instrukzioak soilik gorde ahal ziren, orduan 8 instrukzio bakarrik izan ahal zituen.

### Ordenagailu aurreratuagoak

1970era arte egindako ordenagailuek panel etengailuak erabiltzen zituzten programatzeko, hala ere, programa informatikoa paperean idazten zen erreferentzia izateko. Instrukzioak piztu/itzali erreferentzia bezala errepresentatzen ziren eta behin konfigurazioa eginda, exekuzio botoiari eman behar zitzaion. Prozesu hau behin eta berriz errepikatu behar zen. Garai honetako ordenagailu garrantzitsuenak hauek izan ziren:

* 1961ean Burroughs B5000 egin zen, ALGOL 60 programazio lengoaian programatzen zena. Kasu honetan, hardwarea zirkuituekin zetorren konpilatze fasea errazteko.
* 1964an IBM System/360 atera zen, sei ordenagailuen multzoa zena. Seiak arkitektura instrukzio berdinak zituzten. Hainbat modelo atera ziren, haietatik 30. modeloa zen txikiena eta merkeena. Gainera, kontsumitzaileek modelo batetik bestera eguneratu zezaketen aplikazio software berdina mantenduz.

Programazioa
------------

Programazioa iturburu kodea idaztearen edo editatzearen prozesua da. Programazioa egiten duen pertsona bati programatzailea deritzo. Gehienetan, programa bat programatzaile batek baino gehiagok egiten dute.

Batzuetan programa informatiko bat programatzearen prozesuari software garapena deitzen zaio. Prozesua ingeniaritza diziplina bezala ikusten hasi da, software ingeniaritza hain zuzen ere.

### Programazio lengoaiak

Programa informatikoak eginda izan diren programazio lengoaiaren arabera multzokatu ahal dira. Bi programazio lengoaia mota nagusi daude: inperatiboa eta deklaratiboa.

#### Lengoaia inperatiboak

Programa inperatiboak ordenagailuari ataza bat nola burutu behar duen esaten dioten agindu multzoz osatuta daude. Lengoaia inperatiboen adibide batzuk C, PHP, Python... dira.

#### Lengoaia deklaratiboak

Programazio deklaratiboa programazio inperatiboaren kontrakoa da. Programa garapenean oinarrituta dago, baldintzak, proposizioak, baieztapenak, mugak, ekuazioak edo aldaketak deklaratuta, problema deskribatzen eta konponbidea zehazten dutenak. Lengoaia deklaratiboen adibide batzuk Haskell eta SQL dira.

Programen egikaripena eta memoria
---------------------------------

Programa informatikoak, kasu gehienetan, memoria ez-hegazkorrean daude gordeta, erabiltzaileak, zuzenki edo ez-zuzenki, deitzen dion arte. Hori gertatzen denean, sistema eragileak RAM memorian kargatzen du, prozesadore zentralak programaren atzipena izateko. Ondoren, prozesadore zentralak programa egikaritzen du prozesu izena hartuz. Bukaera hiru motakoa izan daiteke: normal amaitzen delako, erabiltzaileak bukatzeko esaten diolako edo errore bat gertatzen delako.

### Aldibereko egikaripena

Sistema eragile askok multiataza pairatzen dute, hau da, aplikazio informatiko batean, aldi berean, hainbat programa exekuzioan egon. Horretarako, sistema eragileak prozesuen planifikazioaz baliatzen da.

### Bere burua aldatzen duten programak

Normalean, programa informatiko bat banatuta dago aldatzen dituen datuengan. Hala ere, batzuetan, programa berak bere burua aldatzen du. Kasu hauetan, aldatuta dagoen programa, programa berdinaren barruan egikaritzen da subsekuentziaz.

Kategoria funtzionalak
----------------------

### Aplikazio softwareak

Mota asko daude:

* App: Aplikazio hitzaren laburdura bat da. Hainbat plataformentzat diseinatu dira, baina lehen agerpena mobiletan izan zen. Hala ere, web app, telebistako app, etab. badaude ere.
* Aplikazioen bilduma: Hainbat programa informatikoen multzoa da. Adibidez Microsoft Office, LibreOffice...
* Erakunde aplikazioak: Saltzaileei, erosleei eta langileei laguntzeko diseinatuta dauden aplikazioak dira. Adibidez enpresa baliabideen plangintza (ERP), bezeroekiko harremanak kudeatzeko sistemak (CRM)...
* Jolas software: Bideo-joko aplikazioak, musika aplikazioak edo bideo aplikazioak izan ahal dira.

### Programa baliagarriak

Gailu informatikoak analizatzen, konfiguratzen, optimizatzen eta mantentzen laguntzen duten programak dira.

### Sistema eragilea

Sistema eragilea gailu informatiko baten software nagusia da, hardwarea eta erabiltzailea lotzen duena.

### Abio programa

Abio programak ROM memorian daude gordeta eta gailu informatikoa hasieratzen dute.

Erreferentziak
--------------

1. ↑   Dooley, John, 1952-. *A brief history of cryptology and cryptographic algorithms.*  ISBN 978-3-319-01628-3. PMC 860897407. (Noiz kontsultatua: 2019-11-21).
2. ↑   McCartney, Scott..  (1999). *ENIAC, the triumphs and tragedies of the world's first computer.*  Walker ISBN 0-8027-1348-3. PMC 40534855. (Noiz kontsultatua: 2019-11-21).
3. ↑   Akter, Shameem..  (2006). *Multi-core programming : increasing performance through software multithreading.*  Intel Press ISBN 9780976483243. PMC 183266834. (Noiz kontsultatua: 2019-11-21).

Kanpo estekak
-------------

|  |  |
| --- | --- |
| Autoritate kontrola | 
* **Wikimedia proiektuak**
* Wd Datuak: Q40056
* Commonscat Multimedia: Software

---

* **Identifikadoreak**
* BNE: XX526558
* GND: 4047394-6
* LCCN: sh85029524
* NKC: ph124516
* NARA: 10675392
* **Hiztegiak eta entziklopediak**
* Britannica: url

 |

* Wd Datuak: Q40056
* Commonscat Multimedia: Software