b'\n_START_ARTICLE_\nProgrammering\n_START_SECTION_\nOlika slags programmering\n_START_PARAGRAPH_\nProgrammering kan ske p\xc3\xa5 olika abstraktionsniv\xc3\xa5er. N\xc3\xa4rmast h\xc3\xa5rdvaran, f\xc3\xb6rutom maskinkod, ligger assemblerprogrammering d\xc3\xa4r man anv\xc3\xa4nder ett assemblerspr\xc3\xa5k. Ett s\xc3\xa5dant spr\xc3\xa5k har i det n\xc3\xa4rmaste en direkt\xc3\xb6vers\xc3\xa4ttning till maskinkod, det vill s\xc3\xa4ga de instruktioner man skriver motsvaras direkt av instruktioner i maskinkod, men anv\xc3\xa4nder en f\xc3\xb6r m\xc3\xa4nniskan mer l\xc3\xa4sbar form \xc3\xa4n maskinskodens ettor och nollor. Till exempel kan "SR 1,2" betyda "Subtrahera inneh\xc3\xa5llet i register nummer 1 med inneh\xc3\xa5llet i register nr 2". Assemblerspr\xc3\xa5ket, som oftast ocks\xc3\xa5 till\xc3\xa5ter makro-instruktioner, m\xc3\xa5ste \xc3\xb6vers\xc3\xa4ttas till maskinkod med hj\xc3\xa4lp av ett speciellt program: en assemblator eller n\xc3\xa5got liknande._NEWLINE_P\xc3\xa5 n\xc3\xa4sta niv\xc3\xa5 kommer allm\xc3\xa4nna programspr\xc3\xa5k (engelska: general purpose computer languages) som till exempel C, Pascal och Java. I ett s\xc3\xa5dant spr\xc3\xa5k motsvarar en sats eller instruktion normalt m\xc3\xa5nga instruktioner i maskinspr\xc3\xa5ket. Till exempel kan satsen "saldo = tidigaresaldo - uttag;" motsvara maskininstruktioner f\xc3\xb6r att h\xc3\xa4mta data fr\xc3\xa5n minnet till register, subtrahera inneh\xc3\xa5llet i register och skriva tillbaka resultatet till minnet. Ett s\xc3\xa5dant program \xc3\xb6vers\xc3\xa4tts, kompileras, till maskinkod av en kompilator eller interpreteras av en tolk. Ofta skiljer man ocks\xc3\xa5 h\xc3\xa4r mellan maskinn\xc3\xa4ra spr\xc3\xa5k som C och h\xc3\xb6gniv\xc3\xa5spr\xc3\xa5k d\xc3\xa4r en st\xc3\xb6rre del av funktionaliteten beskrivs abstrakt. H\xc3\xb6gniv\xc3\xa5spr\xc3\xa5k kan ocks\xc3\xa5 anv\xc3\xa4ndas som term f\xc3\xb6r spr\xc3\xa5k med h\xc3\xb6gre abstraktionsniv\xc3\xa5 \xc3\xa4n assembler._NEWLINE_Ytterligera en abstraktionsniv\xc3\xa5 uppn\xc3\xa5s n\xc3\xa4r man inte l\xc3\xa4ngre direkt beskriver hur n\xc3\xa5got ska utf\xc3\xb6ras utan snarare vad som ska utf\xc3\xb6ras. Detta f\xc3\xb6ruts\xc3\xa4tter att man begr\xc3\xa4nsat problemomr\xc3\xa5det p\xc3\xa5 n\xc3\xa5got s\xc3\xa4tt s\xc3\xa5 att tolkaren eller kompilatorn kan anv\xc3\xa4nda f\xc3\xa4rdiga dell\xc3\xb6sningar som s\xc3\xa4tts ihop till en totall\xc3\xb6sning f\xc3\xb6r det aktuella problemet. Exempel p\xc3\xa5 s\xc3\xa5dana spr\xc3\xa5k \xc3\xa4r RPG f\xc3\xb6r rapportgenerering. Ocks\xc3\xa5 allm\xc3\xa4nna programspr\xc3\xa5k kan vara konstruerade f\xc3\xb6r en viss uppgift, s\xc3\xa5som PostScript f\xc3\xb6r sidbeskrivning eller R f\xc3\xb6r statistiska problem._NEWLINE_Andra indelningar \xc3\xa4r de i spr\xc3\xa5k som skall tolkas eller kompileras och enligt programmeringsparadigm (funktionell, procedurell, objektorienterad programmering eller liknande)._NEWLINE_Programmering kan ocks\xc3\xa5 delas in efter vad programmet utf\xc3\xb6r. N\xc3\xa4rmast h\xc3\xa5rdvaran kommer h\xc3\xa4r styrning av h\xc3\xa5rdvarukomponenter genom mikroprogrammering, till exempel BIOS i en persondator eller drivrutiner f\xc3\xb6r olika utrustningar. N\xc3\xa4sta niv\xc3\xa5 \xc3\xa4r operativsystemet som f\xc3\xb6rdelar och administrerar datorns resurser och g\xc3\xb6r datorn allm\xc3\xa4nt tillg\xc3\xa4nglig f\xc3\xb6r m\xc3\xa4nniskan genom ett anv\xc3\xa4ndargr\xc3\xa4nssnitt. Slutligen kommer niv\xc3\xa5n med alla olika anv\xc3\xa4ndarprogram som ordbehandlare, webbl\xc3\xa4sare och datorspel. De f\xc3\xb6rsta typerna av programmering g\xc3\xb6rs av h\xc3\xa5rdvaruleverant\xc3\xb6rer, men operativsystem programmeras numera ocks\xc3\xa5 av frist\xc3\xa5ende programvaruleverant\xc3\xb6rer, som Microsoft, Apple Computer, Sun Microsystems, eller i distribuerade frivilligprojekt med \xc3\xb6ppen k\xc3\xa4llkod._NEWLINE_Ibland anv\xc3\xa4nder man ben\xc3\xa4mningen programvara (\xc3\xa4ven \xe2\x80\x9dmjukvara\xe2\x80\x9d) f\xc3\xb6r en samling program och deras tillh\xc3\xb6rande data.\n_START_SECTION_\nStrukturerad programmering\n_START_PARAGRAPH_\n1968 skrev Edsger Dijkstra en klassisk artikel Go to statement considered harmful som blev b\xc3\xb6rjan till det som kom att kallas strukturerad programmering. Dijkstra h\xc3\xa4vdade att ett oreglerat anv\xc3\xa4ndande av hopp-satser i ett program ledde till o\xc3\xb6verblickbara och ohanterliga program. Resultatet blev l\xc3\xa4tt vad man brukade kalla spagettiprogrammering med hopp fram och tillbaka och fel som var sv\xc3\xa5ra att sp\xc3\xa5ra. L\xc3\xb6sningen var att endast anv\xc3\xa4nda strukturerade satser som if-then-else och do-while ist\xc3\xa4llet f\xc3\xb6r explicita hoppsatser. Man visade ocks\xc3\xa5 att det alltid g\xc3\xa5r att omforma ett ostrukturerat program till ett strukturerat program med samma funktion. Dessa id\xc3\xa9er \xc3\xa4r numera allm\xc3\xa4nt accepterade och de flesta moderna programspr\xc3\xa5k saknar till och med explicita hoppsatser. Man kan nog s\xc3\xa4ga de problem som strukturerad programmering f\xc3\xb6rs\xc3\xb6kte l\xc3\xb6sa mycket h\xc3\xa4ngde ihop med de tidiga programspr\xc3\xa5ken som Fortran och COBOL och de m\xc3\xb6jligheter till spagettikodning som fanns i dessa.\n_START_SECTION_\nFunktionell programmering\n_START_PARAGRAPH_\nM\xc3\xa5nga id\xc3\xa9er uppstod ocks\xc3\xa5 om p\xc3\xa5 vilket s\xc3\xa4tt stora program skulle delas upp i mindre bitar, modulariseras, och hur dessa delar skulle till\xc3\xa5tas p\xc3\xa5verka varandra. En st\xc3\xa5ndpunkt representeras av funktionell programmering d\xc3\xa4r bitarna, funktionerna, inte kan p\xc3\xa5verka andra bitar \xc3\xb6ver huvud taget. M\xc3\xa5nga spr\xc3\xa5k r\xc3\xa4knas dock som funktionella trots att de inte har denna egenskap. Funktionell programmering bygger p\xc3\xa5 en matematisk grund, lambdakalkyl, vilket kan leda till \xc3\xb6kade m\xc3\xb6jligheter till automatisk analys av funktionella program, till exempel i syfte att bevisa att programmet har en viss egenskap eller att en viss optimering \xc3\xa4r giltig.\n_START_SECTION_\nObjektorienterad programmering\n_START_PARAGRAPH_\nAndra tidiga id\xc3\xa9er f\xc3\xb6r modularisering av program handlade om att dela in koden efter de begrepp eller data som programmet hanterade. F\xc3\xb6r vissa typer av problem \xc3\xa4r detta en mycket naturlig och intuitiv indelningsgrund. Ska man till exempel g\xc3\xb6ra ett program f\xc3\xb6r en bank \xc3\xa4r det naturligt att det finns en modul f\xc3\xb6r konto och en f\xc3\xb6r kontoinnehavare och s\xc3\xa5 vidare. N\xc3\xa4r dessa id\xc3\xa9er kopplades till id\xc3\xa9er om att information i en modul skulle inkapslas eller d\xc3\xb6ljas i s\xc3\xa5 stor utstr\xc3\xa4ckning som m\xc3\xb6jligt f\xc3\xb6r de andra modulerna s\xc3\xa5 fick man effekten att f\xc3\xb6r\xc3\xa4ndringar av programmet ofta kunde begr\xc3\xa4nsas till enstaka moduler och mindre ofta fick f\xc3\xb6r\xc3\xa4ndringarna of\xc3\xb6rutsedda effekter i andra delar av programmet. _NEWLINE_P\xc3\xa5 1980-talet tillkom id\xc3\xa9n att begreppen bakom modulerna inte var oberoende av varandra utan kunde ses som f\xc3\xb6rfiningar eller specialiseringar av ett grundbegrepp i olika niv\xc3\xa5er s\xc3\xa5 att man fick en hierarki av relaterade objekt d\xc3\xa4r egenskaper kunde \xc3\xa4rvas fr\xc3\xa5n \xc3\xb6verordnat till underordnat objekt. Exempelvis kunde ett bankkonto f\xc3\xb6rfinas i sparkonto och kreditkonto med n\xc3\xa5got olika egenskaper. De allra f\xc3\xb6rsta ursprungen till denna objektorienterade programmering hade kommit redan i slutet p\xc3\xa5 1960-talet med spr\xc3\xa5ket Simula 67 men det var f\xc3\xb6rst med programspr\xc3\xa5ket Smalltalk fr\xc3\xa5n Xerox omkring 1980 och C++ i slutet av 1980-talet som id\xc3\xa9erna fick st\xc3\xb6rre spridning. Id\xc3\xa9erna bakom objektorienterad programmering har, i likhet med den tidigare strukturerade programmeringen, f\xc3\xa5tt en mycket stor acceptans och st\xc3\xb6d f\xc3\xb6r denna paradigm finns i en eller annan form i de flesta av de nyare programspr\xc3\xa5ken. F\xc3\xb6rdelar som brukar framh\xc3\xa5llas \xc3\xa4r att funktioner som \xc3\xa4r gemensamma f\xc3\xb6r m\xc3\xa5nga olika slags objekt/begrepp bara beh\xc3\xb6ver kodas en g\xc3\xa5ng och kan \xc3\xa5teranv\xc3\xa4ndas av alla de objekt som beh\xc3\xb6ver dem. Endast de funktioner som verkligen \xc3\xa4r olika mellan olika underordnade objekt beh\xc3\xb6ver programmeras om. F\xc3\xb6r att skilja mellan objektorienterad programmering och det "gamla" s\xc3\xa4ttet att programmera myntades begreppet procedurell programmering f\xc3\xb6r det traditionella s\xc3\xa4ttet. En omdebatterad fr\xc3\xa5ga har varit om multipelt arv \xc3\xa4r n\xc3\xb6dv\xc3\xa4ndigt eller inte. Med detta menas att ett begrepp ibland kan ses som en specialisering av flera olika \xc3\xb6verordnade begrepp. Till exempel kan objektet Lejon betraktas b\xc3\xa5de som ett d\xc3\xa4ggdjur och som ett rovdjur. Multipelt arv inneb\xc3\xa4r vissa komplikationer som av vissa anses vara allvarligare \xc3\xa4n de f\xc3\xb6rdelar som m\xc3\xb6jligheten ger._NEWLINE_Starkt knutet till objektorientering \xc3\xa4r ocks\xc3\xa5 de id\xc3\xa9er om designm\xc3\xb6nster som utvecklades under senare delen av 1990-talet, med bland annat den epokg\xc3\xb6rande boken Design patterns, Elements of Reusable Object-Oriented Software av Erich Gamma, Richard Helm, Ralph Johnson och John Vlissides fr\xc3\xa5n 1995.\n_START_SECTION_\nLogikprogrammering\n_START_PARAGRAPH_\nEtt annat sp\xc3\xa5r inom programmering \xc3\xa4r logikprogrammering. H\xc3\xa4r ligger tyngdpunkten p\xc3\xa5 att samla fakta och regler. Genom deduktion eller induktion kan sedan olika resultat automatiskt h\xc3\xa4rledas. Logikprogrammering \xc3\xa4r n\xc3\xa4ra besl\xc3\xa4ktad med Artificiell intelligens (AI). Det mest k\xc3\xa4nda programspr\xc3\xa5ket f\xc3\xb6r logikprogrammering \xc3\xa4r Prolog.\n_START_SECTION_\nHistoria\n_START_PARAGRAPH_\n\xc3\x84ran som den f\xc3\xb6rsta programmeraren brukar tilldelas Ada Lovelace, dotter till Lord Byron. Hon hj\xc3\xa4lpte Charles Babbage i dennes arbete med den analytiska maskinen som brukar betraktas som det f\xc3\xb6rsta exemplet p\xc3\xa5 en dator, trots att den aldrig blev f\xc3\xa4rdigst\xc3\xa4lld. Programspr\xc3\xa5ket Ada \xc3\xa4r uppkallat efter henne.\n_START_SECTION_\nExempel\n_START_PARAGRAPH_\nF\xc3\xb6ljande \xc3\xa4r ett exempel p\xc3\xa5 hur en hemsida beskriven med HTML anv\xc3\xa4nder JavaScript f\xc3\xb6r att skriva ut "Klockan \xc3\xa4r nu hh:mm:ss":_NEWLINE_<html>_NEWLINE_  <head>_NEWLINE_    <title>Exempel - JavaScript</title>_NEWLINE_  </head>_NEWLINE_  <body>_NEWLINE_    <script type="text/javascript">_NEWLINE_      var tid = new Date(); // Ger aktuell tidsinformation_NEWLINE_      var timme = tid.getHours(); // Ger timmen fr\xc3\xa5n 0 till 23_NEWLINE_      var minut = tid.getMinutes(); // Ger minuten fr\xc3\xa5n 0 till 59_NEWLINE_      var sekund = tid.getSeconds(); // Ger sekunden 0 till 59_NEWLINE_      if (timme < 10) {_NEWLINE_          timme = "0" + timme; // G\xc3\xb6r h till hh_NEWLINE_      }_NEWLINE_      if (minut < 10) {_NEWLINE_          minut = "0" + minut; // G\xc3\xb6r m till mm_NEWLINE_      }_NEWLINE_      if (sekund < 10) {_NEWLINE_          sekund = "0" + sekund; // G\xc3\xb6r s till ss_NEWLINE_      }_NEWLINE_      document.write("Klockan \xc3\xa4r nu " + timme + ":" + minut + ":" + sekund); // skriv ut tiden_NEWLINE_    </script>_NEWLINE_  </body></html>_NEWLINE_Ett konsolapplikationsexempel i C++ f\xc3\xb6r Windows. Skriver som ovan ut "Klockan \xc3\xa4r nu hh:mm:ss" och inv\xc3\xa4ntar en knapptryckning f\xc3\xb6re avslut._NEWLINE_#include <iostream>#include <windows.h>using namespace std;_NEWLINE_ _NEWLINE_int main(){_NEWLINE_    SYSTEMTIME tiden;_NEWLINE_    GetLocalTime(&tiden);_NEWLINE_    int timme = tiden.wHour;_NEWLINE_    int minut = tiden.wMinute;_NEWLINE_    int sekund = tiden.wSecond;_NEWLINE_    cout << "Klockan \xc3\xa4r nu "_NEWLINE_         << setfill(\'0\') << setw(2)_NEWLINE_         << timme << ":" << minut_NEWLINE_         << ":" << sekund << endl;_NEWLINE_    cin.get(); //V\xc3\xa4ntar p\xc3\xa5 inmatning fr\xc3\xa5n anv\xc3\xa4ndaren s\xc3\xa5 att programmet inte st\xc3\xa4ngs ner direkt n\xc3\xa4r det k\xc3\xb6rs_NEWLINE_    return 0;}_NEWLINE_Liknande program i C, (ger utskrift i format "Dagnamn M\xc3\xa5nad Dagtal Timme:Minut:Sekund \xc3\x85rtal") och inv\xc3\xa4ntar nyradstecken eller annan signal (Ctrl-C etc)._NEWLINE_#include <stdio.h>#include <time.h>int main(void){_NEWLINE_    time_t t;_NEWLINE_    time(&t);_NEWLINE_    puts(ctime(&t));_NEWLINE_    getchar();_NEWLINE__NEWLINE_    return 0;}_NEWLINE_H\xc3\xa4r s\xc3\xa5 har man skrivit "Hello World" koden i Java._NEWLINE_public class Hello {_NEWLINE_    public static void main(String[] args) {_NEWLINE_      System.out.println("Hello World!");_NEWLINE_    }}'