Introduksjon til programmering og programmeringsspråk Henrik Lieng Høgskolen i Oslo og Akershus https://code.org/
Veldig høy-nivå programmering med Scratch
End-user programming Overtone, Tidal, etc., bygger på idéen live coding. Dvs. programmer som endres on-the-fly mens programmerer lager programmet. I live musikkprogrammering er idéen at musikere, med kjennskap til litt koding, spiller musikk ved å programmere den. Eks: https://www.youtube.com/watch?v=s_uzxmtmene
Raspberry Pi Raspberry Pi ble laget for å få barn mer interessert i programmering. Systemet tilbyr et enkelt programmeringsmiljø, med Python, der kommunikasjon til enheter, som I/O, er rett-frem. PS: ikke bare for barn Eksempel: https://www.youtube.com/watch?v=navzmgxbe9c
Hva er et språk? Hvert språk har en formell beskrivelse av grammatikken til språket. Dette deles inn i to kategorier: 1. Systaks: beskriver strukturen til teksten if(true) System.out.println(); er lov, mens if true, System->println() ikke er lov 2. Semantikk: beskriver meningen med ulike tegn og symboler hva skjer her? if(false) domethod1(); else domethod2();
Spesifikke språk Mainstream språk har generell programutvikling som hovedmål. Spesifikke språk har spesifikke domener som mål. Eksempler: HTML for nettsideformatering Mathematica for matematikk SQL for databasekommunikasjon Bash for Linux skallprogrammering UnrealScript for dataspillutvikling GLSL for dataprosessering på grafikkprosessor
Hvor mange språk finnes det? Det blir oppfunnet tusenvis av språk hvert tiår. De fleste dør ut Et nytt språk dekker et nytt behov Java: skriv kode en gang, kjør på hvilken som helst maskin C: muliggjør utvikling av store systemer uten Assembly kode (UNIX) C++: C med klasser (språket het først C with Classes ) Behov i dag: samtidighetsstøtte sikkerhet naturlige språk
Hvilket språk er best? Ingen språk dekker alle behov Ikke bruk C/C++ fordi de er usikre Ikke bruk Java fordi du får dårlig ytelse Ikke bruk Python fordi det er for light-weight MEN, noen språk kan være bedre på spesifikke ting: C for operativsystemer Java for web- og apputvikling Matlab for matematikk Javascript for dynamiske websider
PYPL- PopularitY of Programming Language Index
Ikke-kompilerte språk Java er et kompilert språk: kildekoden kompileres slik at maskinen kan utføre instruksjonene til programmet. Det finnes imidlertid språk som ikke trenger kompilering. Her blir kildekoden istedenfor tolket av en tolk. Eksempler: JavaScript: tolkes av nettleser (som Google Chrome) PHP: tolkes av en PHP tolk (eget program typisk installert på en server) Python: tolkes av en Python tolk (kan konvertere til maskinkode) De fleste deklarative språk (eks. HTML, XML)
Python Verdens enkleste programmeringsspråk å lære Enkel syntaks, ikke C-syntaks (som Java) Prosedyre-basert, med svekket støtte for objekter Støtter ikke objekt-orientert programmering 100 %, som Java
Java Høy-nivå språk over C Kjører på en «virtuell maskin» Fordel: samme kode fungerer på alle typer maskiner (så lenge den støtter Java). Dette er ikke tilfellet med C/C++. Ulempe: Java vil alltid ha dårligere ytelse enn tilsvarende C/C++ programmer på grunn av prosessering av den virtuelle maskinen. Hovedprinsipper: sikkert (stol ikke på programmerer) enkelt (tilby abstraksjoner over C) objekt-orientert («alt» i Java er klasser) Les Wikipedia siden for historie/mer info.
C++ C++ er en utvidelse av C. C++ støtter objekt-orientert programmering. Ligger veldig nærme maskinvaren. C++ støtter all funksjonalitet tilgjengelig i C (men ikke motsatt).
«Medium»-nivå: C C er et høynivå-språk som ligger «nærme» maskinvaren. Å konvertere fra C til maskinkode/assembly er relativt «lett». C er verdens mest distribuerte språk. Så å si alle datamaskinarkitekturer støtter språket. C er prosedyre-basert, dvs. at programmet er delt inn i mindre prosedyrer. C programmer er ofte skrevet i en stor fil (med mange prosedyrer). Java er hovedsakelig implementert i C. C brukes i flere teoretiske eksempler i dett faget, der Java ikke «strekker til».
Lav-nivå språk: maskin- og assemblykode
Lav-nivå språk og spagettikode Assembly kode formateres som en sekvens av instruksjoner som direkte avbildes til maskinkode. For mer avanserte algoritmer vil dette føre til spagettikode, som gjør strukturen til algoritmen/programmet veldig vanskelig å forstå for mennesker. For å unngå slik spagettikode, har det blitt utviklet programmeringsspråk som tilbyr en mer strukturert form for kode. Java er et (av mange) språk som er strukturert
Deklarativ vs. Imperativ programmering Deklarativ Beskriver hva som skal gjøres, men ikke hvordan Programmer ofte delt inn i matematiske funksjoner (funksjonell programmering) Dette semesteret: HTML Imperativ Beskriver både hva og hvordan Programmer delt inn i en sekvens av instruksjoner «Oppskrifter» på løsninger Dette semesteret: Java
Deklarativ programmering - HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>hello</title> </head> <body> <p>hello, world!</p> </body></html>
Kategorisering av programmeringsspråk? Deklarativ vs. imperativ Statisk vs. dynamisk Lav nivå vs. høy nivå Kompilert vs. tolket Generell vs. spesifikk