kompetanseguiden
Hva er Python?
Hva er Python – og hvor kan du lære det? I denne artikkelen får du en rask introduksjon til hva Python er og hvordan det brukes, mens du i verktøyet øverst kan finne ut hvor og hvordan du kan lære det – basert på dine egne kriterier for læringen.
Tilbake til kompetanseguidens hovedside
Python er et objektorientert programmeringsspråk som er kjent for å være lettlest og lettlært. Det blir blant annet brukt til dataanalyse og maskinlæring.
Pål Grønås Drange er fagleder for programvareutvikling i Equinor, og bruker Python mye i jobben. Han gir oss en liten introduksjon til språket.
Hva er det overordnede bruksområdet for Python i 2020?I Equinor bruker vi Python over alt. Vi bruker Python til vitenskapelige beregninger, dataanalyse, maskinlæring, i tillegg til nettsideutvikling (spesielt på backend), devops (automatisering, orkestrering, kontinuerlig deploy), skripting og til og med en del innenfor robotikk og såkalt tingenes internett.
Spesielt fremtredende her er Python hovedspråket for maskinlæring.
Hva er fordelen med Python?Språket ble laget for å være intuitivt og kraftfullt, lett å lese og å forstå. En programmerer kan sette seg inn i Python som et nytt språk på bare noen timer, og lage sitt første skikkelige dataprogram på bare noen dager.
Python har et enormt miljø, spesielt innenfor vitenskapelig beregning og dataanalyse og -behandling, og det aller meste er fri programvare. Hvis du legger til at Python er et språk som er veldig lett å lære og å komme i gang med, så kan man forstå hvorfor det er så populært. Man kan gjerne påstå at Python er de moderne programmereres lingua franca.
I Equinor er Python et språk som muliggjør samarbeid mellom forskjellige fagfelt i en helt ny grad.
Hva er ulempene eller begrensningene?Språket er tregt. Dersom man gjør beregninger på en naiv måte i Python kan man lett få et program som er 100 ganger så tregt som dersom man hadde gjort tilsvarende i C eller C++. Det er derfor en avveiing mellom å skrive et program kjapt, og å skrive et kjapt program.
I Equinor har vi flere ganger utnyttet det beste av to verdener ved at vi begynner å skrive alt i Python, for deretter å lokalisere de elementene i programmet som er for tregt. Disse kan da ofte byttes ut med C++-komponenter.
Som Donald Knuth sa, «prematur optimering er kilden til alt ondt»; dersom man prøver å gjette seg til hvilke deler av koden som kommer til å være flaskehalsen, risikerer man at man bruker for mye tid på optimering som i etterkant kan vise seg å være unødvendig, og i noen tilfeller føre til at programmet er mindre fleksibelt enn det kunne ha vært.
Hva er typisk å utvikle med Python, og hvilke teknologier er vanlig å bruke for å oppnå det?Vi bruker som nevnt Python i nesten ethvert domene, men det er nok definitivt mest brukt til vitenskapelige beregninger. Det høres kanskje paradoksalt ut ettersom jeg nettopp påstod at Python er så tregt, men det fine er at det eksisterer en haug biblioteker for å gjøre beregninger raskt, og de fleste av disse er skrevet i C.
Typisk er pakker som Numpy (for numerikk), Pandas (for jobbing med tabulære data), Matplotlib (for plotting og visualisering), Scikit-learn (maskinlæring) brukt, og alle disse bibliotekene er både fri programvare og har sitt opphav i en organisasjon kalt Scipy.
I tillegg til disse pakkene, er det mange som bruker såkalte notatblokker (Jupyter Notebook), en interaktiv Python-tolker for å jobbe med dataanalyse og eksperimentering. Dette er et typisk prototyp-verktøy hvor man «leker seg litt», før man gjerne skriver prototypen om til «ekte» kode.
Det finnes nesten ingenting i teknologiverdenen i dag som ikke har elementer av Python i seg
Hva er kjente eksempler på populære programmer, nettsider eller funksjoner som er utviklet med Python?Det finnes nesten ingenting i teknologiverdenen i dag som ikke har elementer av Python i seg, og vi ser at flere og flere av operativsystemene i bruk tar i bruk Python for applikasjonsutvikling. Men bruken av Python skjer i stor grad «under panseret», så mest berømte frontend-applikasjoner er nok Dropbox, og en mengde applikasjoner på Ubuntu og Redhat, og webtjenerne Django og Flask.
Men nesten samtlige store teknologiselskaper er i dag avhengig av Python. For å nevne noen er Spotify, Netflix, Instagram, Uber, Discus, og ikke minst Tesla store brukere, og dette for ikke å nevne de store monstrene som Google, Amazon og Facebook. Tesla bruker for eksempel Python i arbeidet rundt selvkjørende biler.
Hvilke teknologier eller verktøy er det viktig å mestre for å utnytte potensialet i Python?Det fine med Python er som sagt at det er veldig lett å lese, å forstå og å lære, og det eneste man trenger er en såkalt Python-tolker. Mange foretrekker som nevnt å eksperimentere i såkalte notatblokker, men det fine er nettopp at det skal så lite til for å komme i gang.
Å mestre Python er vel ikke stort annerledes enn andre ting man skal mestre, øving, og mer øving. Og ikke minst å lese andres kode. Samt øving.
Hvilke språk ligner, eller er nært knyttet til Python?Det som kanskje ikke alle vet er at Python er omtrent 30 år gammelt, og har derfor sitt opphav i ganske tidlige programmeringsspråk, som Lisp, ALGOL og Modula/Pascal. En god del både filosofi og syntaks har også blitt hentet direkte fra Haskell. Python kom altså før språk som Java, C#, Visual Basic, PHP, Ruby, Javascript, Lua, R, med flere.
Python er dynamisk typet. Løst sagt betyr dette at typen til et navn avgjøres mens programmet kjøres, og ikke i en kompileringsfase slik C++ og Java gjør. Dette har fordeler og ulemper: Fordelen er at man veldig raskt kommer i gang med å faktisk kjøre programmet, og programmet kjører helt til det krasjer eller avsluttes normalt.
I C++ og Java, derimot, må man først få programmet til å kompilere før man kan kjøre det. Fordelen med statisk typete språk er at man har mange ekstra garantier. Igjen kan man se forskjellen på å kjapt skrive et program versus å bruke litt mer tid på å skrive programmet og sitte igjen med visse garantier.
Python skiller seg også fra vanlige språk ved at Python bruker kolon og indentering for å markere kodeblokker, i motsetning til de andre nevnte språkene som bruker krøllparenteser for å markere kodeblokker. Dette vil si at Python er sensitiv til antall mellomrom i starten av en linje. Dette kan være uvant for mange nye Python-programmerere og kan skape en god del trøbbel før man venner seg til det.
Men når det er sagt, så leses Python overraskende likt som Javascript og de andre språkene. Også moderne C++ (C++17 og C++20) går i en retning til å bli mer og mer lik Python.
Hvordan er vanskelighetsgraden og læringskurven? Hvilke forkunnskaper er det en eventuelt en fordel å ha?Det er alltid en fordel å ha en bakgrunn i informatikk når man skal programmere, i hvert fall når man skal skrive applikasjoner som skal brukes til å basere avgjørelser på. Dette gjelder spesielt på forståelsen av samspillet mellom algoritmer, kompleksitet og korrekthet, samt ingeniør-siden av programvareutvikling, nemlig å holde kompleksiteten av koden så lav som mulig.
Med det sagt, så er Python et veldig lett språk å forstå, og det er nok grunnen til at flere og flere høyskoler og universiteter går mot Python som første programmeringsspråk.
Hvis du sammenligner Python:
print ("Hallo, digi.no!")
med tilsvarende eksempel i Java:
class HalloDigiPrinter {
public static void main (String args[]) {
System.out.println ("Hallo, digi.no!");
}
}
så ser man veldig kjapt at en student kan komme i gang med Python mye raskere enn med Java. Ett av problemene med Java i undervisningssammenheng er nemlig at det er mange deler av eksempelkoden man ikke kan lære hva egentlig betyr før mange måneder senere, og det gjør at studenten vil måtte lære seg å akseptere at det er noe man ikke forstår.
Kan du si noe om utviklingen og forhistorien til Python?
Jada! Språket begynner som nevnt å bli ganske gammelt, med omtrent 30 års fartstid. Det er jo selvsagt oppkalt etter komikergruppen Monty Python, ettersom opphavspersonen Guido van Rossum er en stor fan. Python-bruken har virkelig eksplodert de siste ti årene, men det har ikke vært en uproblematisk vei.
I 2008 ble Python 3 lansert, og det medbrakte en splittelse i Python-miljøet mellom dem som ønsket å forbli på Python 2 og dem som ønsket å gå videre til Python 3. Grunnen til at man måtte velge var at Python 3 ikke er bakoverkompatibelt, som alltid medfører mye smerte for utviklere (og dermed også sluttbrukere).
Spol frem 10–12 år og Python 2 har gått ut av support, og de aller, aller fleste prosjekter har blitt omskrevet til å fungere med Python 3, men det har ikke vært lett. I Equinor har vi også noen prosjekter som fortsatt kjører på Python 2, og det er en utfordring vi jobber med på daglig basis, men vi har heldigvis klart å slutte med å utvikle ny programvare i Python 2.
Python var lenge drevet ene og alene av den «livsvarige velvillige diktatoren» (BDFL) Guido van Rossum. I fjor brøt en stor krangel ut i miljøet om hvorvidt man skulle innføre den såkalte hvalross-operatoren «:=» i språket. Da trakk van Rossum seg som leder, og en styringskomité ble opprettet.
I dag lanseres nye versjoner hver 12. måned (Python 3.9 i slippes i høst), og Python-miljøet er sunnere og mer positivt enn noensinne.
Hvilke råd kan du gi til en som ønsker å lære seg Python?Ha det gøy. Se gjerne en Monty Python-sketch i ny og ne.