Kunsten i programmering ligger i hvordan den som lager programmet, klarer å få endene til å møtes ved å uttrykke sin kreativitet gjennom å kanalisere denne med programmeringsspråket, slik som forfattere gjør når når de skriver romaner.
De fleste kjenner til definisjonen av et språk. Norsk er eksempelvis et språk som nordmenn bruker for å kommunisere seg imellom i dagligtale, mens matematikk er et svært presist språk som matematikere og andre bruker for å diskutere konsepter og sammensetninger av tall. Et programmeringsspråk1 er imidlertid et kunstig språk for å styre og kontrollere datamaskiner. Med å uttrykke et slikt språk, klarer ikke programmereren bare å få en datamaskin til å kommunisere med andre datamaskiner, men også å få datamaskiner til å samarbeide med mennesker.
I følge Wikipedia finnes det i underkant av 700 forskjellige programmeringsspråk. Blant disse finner vi C, C++, C#, Dart, Java, Kotlin, JavaScript, TypeScript, Swift, Objective-C med flere. Det er ikke noe fasitsvar på hvilket språk som er best, da alle har sine bruksområder med både fordeler og ulemper. Vi skal imidlertid se litt nærmere på det som nettstedet Github i 2020 kåret til verdens nest mest populære programmeringsspråk, nemlig Python.
Hva er Python?
Python er et programmeringsspråk som i år fyller 30 år. Mer spesifikt kan vi si at Python har egenskapene til et objektorientert høynivå programmeringsspråk. Dette kan defineres slik:
- Om et språk er høynivå eller ikke sier noe om hvor lesbart det er. Motsetningen til et høynivåspråk er lavnivåspråk, som ofte kalles assemblerspråk. Store Norske Leksikon (SNL) definerer forskjellen med “[...] Høynivåspråk ble laget for at programmeringen skulle kunne gjøres uavhengig av prosessorens instruksjonssett, og i stedet gjenspeile problemene som skulle løses”. Enkelt forklart innebærer det at program som er skrevet i høynivåspråk, vil bli tolket likt uavhengig av typen datamaskin.
- Et programmeringsspråk faller inn under ett av to paradigmer; nemlig proseduralt eller objektorientert. At språket er objektorientert innebærer at språket lar deg definere såkalte objekter som du senere kan gjenbruke flere ganger i logisk forstand. Avhengig av problemet som skal løses med språket, vil bruken av objekter i mange tilfeller gi programmereren flere fordeler. Det samme gjelder om man skal løse et problem som er best egnet med prosedurale språk.
Python er videre kjent for å være allsidig, og for å ha en lettlest og klar syntaks som deler kodeblokker opp etter innrykk, og ikke med spesialtegn som {} (krøllparantes) som andre C-lignende programmeringsspråk. Eksempelvis vil dette programmet vise meldingen “Hallo fra Digin!” hver gang det kjøres
print(“Hallo fra Digin!”)
Programmer som er laget i Python kan kjøres på alle populære operativsystem inklusive Windows, Mac OS og Linux-baserte operativsystemer. Det får også plass i en såkalt container hvis du vurderer å bruke det sammen med Docker og mikrotjenester i en skytjeneste som Microsoft Azure.
Med Python kan du blant annet:
- Styre maskiner, roboter og elektronikk.
- Lage nettsider.
- Implementere maskinsyn (f.eks. med OpenCV).
- Lage programmer med grafisk brukergrensesnitt (f.eks. med PyQT).
- Gjøre analyse på datasett (f.eks. med Pandas, NumPy og SciPy).
- Visualisere matematiske funksjoner (f.eks. med Matplotlib)
- Utføre avansert maskinlæring (f.eks. med TensorFlow eller PyTorch)
- Programmere interaktivt samtidig som du skriver pen dokumentasjon (f.eks. med Jupyter Notebook).
Hvorfor bruker man Python fremfor andre språk?
Primært fordi Python er lettlest. Generelt sett trengs det også få linjer med kode for å få fram resultater. Det gjør at du kan lage prototyper fort, som igjen kan holde utviklingstiden nede. Dette kan derfor gi god kost-nytte hos arbeidsgivere som lønner softwareutviklere. Standardbiblioteket i Python er også svært robust, og det følger med testrammeverk som gjør at utviklere kan lage trygg og stabil kode som lett kan vedlikeholdes.
Python har de siste 30 årene også blitt svært utbredt. Argumentene nevnt over bidrar til at det blir anbefalt til dem som aldri har programmert tidligere. Det kan også brukes som et skriptspråk og til automatisering av ulike oppgaver.
I tillegg til hos programmerere, er Python også populært blant systemadministratorer, sikkerhetstestere og de som driver med DevOps. Hvis du for eksempel bruker Jenkins, og ønsker å oppdatere en Jira ticket etter at en build ble vellykket, så kan Python hjelpe deg i mål. Eller hvis du jobber som en sikkerhetstester og trenger å hente en fil fra en maskin du nettopp har klart å bryte deg inn på (med gode hensikter), så kan Python hjelpe deg med å sette opp en ad-hoc webserver med denne kommandoen:
python -m http.server
I dette tilfellet vil du nå kunne hente ut filer fra denne maskinen over nettverket med en vanlig nettleser.
Python er dessuten populært i akademiske kretser, både i virket til forskere og blant dem som underviser. Flere universiteter bruker Python for å lære studenter grunnleggende programmering.
Populariteten har dermed ført til at det har bygget seg opp et stort økosystem rundt språket:
- Utviklerne av språket har bidratt til å utvikle svært gode biblioteker som er godt dokumentert, og enkle å bruke.
- Engasjerte individer har produsert innhold på Youtube som hjelper nybegynnere i gang.
- Sponsorer, og firma som Google har tatt initiativ til å utvikle biblioteker som TensorFlow for bruk til maskinlæring, som senere har blitt fritt tilgjengelig for allmennheten til utvikling av kunstig intelligens.
- Flere store firmaer rundt i verden har tatt i bruk Python i sine løsninger, som Facebook, Spotify, Netflix, Reddit og Dropbox med flere.
Og når bør man da ikke bruke Python?
Dette kan det være flere grunner til, avhengig av omstendighetene.
- Hvis fagmiljøet på arbeidsstedet ditt bruker utelukkende C#, så skal du ha gode argumenter for å erstatte eksisterende kodebase med Python. Selv om du kanskje er en ekspert i språket selv, så må kollegaene også bruke tid på å lære seg dette og forstå hvordan det brukes. Dette kan skape en unødvendig kostnad for arbeidsgiveren. I de tilfellene kan det være bedre å bruke Python som et supplement. For eksempel hvis du arbeider i et team med C#-utviklere, og skal lage maskinlæringslogikk som skal kjøre i Microsoft Azure - så er Python ofte det rette valget allikevel. Selv om resten av kodebasen er i C#.
- Hvis du skal lage en algoritme, eller et dataspill som krever mye prosessering og ressurser av datamaskinen, så er Python sjeldent det rette valget. Python-kode kjøres i en såkalt tolk, og tolken er et dataprogram som oversetter Python-koden til maskinkode som datamaskinen forstår. Denne tolkningen er et arbeid i seg selv som går ut over datakraften du har tilgjengelig. Slike utfordringer løses som oftest i stedet med programmeringsspråk som C++ hvor kildekoden gjennom en prosess kalt kompilering gjøres om til maskinkode, slik at den kan kjøres uten tolk.
Men også her finnes det unntak. Hvis du gjør C++ dataprogrammet ditt om til et bibliotek som Python kan forstå, så kan du kommunisere med C++-programmet fra Python. Da kan du oppnå det beste fra begge verdener. Eller hvis du klarer å gjennomføre de ressurskrevende operasjonene med biblioteker som kan nyttiggjøre seg av datakraften til et grafikkort, så kan du bruke biblioteker som TensorFlow, som har støtte for å snakke direkte med skjermkortet via CUDA.
I dette tilfellet kan man si at du bør bruke Python der man kan, og C++ der man må. - Hvis du skal lage en mobilapplikasjon med Python, er det utviklet rammeverk som BeeWare og Kivy som hjelper deg med å få det til å kjøre på tvers av Android- og Apple-enheter. Andre alternativer er å ta i bruk kryssplattform-løsninger som Microsoft Xamarin hvis du er dreven i C#, React Native hvis du heller foretrekker JavaScript, eller Flutter-rammeverket fra Google dersom du vil bruke programmeringsspråket Dart.
- I forbindelse med web, så er Python godt egnet til backend utvikling , og frontend på statiske nettsider. Trenger du nettsider hvor frontend skal være dynamisk, kommer du ikke utenom å bruke språk som JavaScript eller tilhørende superset som TypeScript i tillegg.
Mine erfaringer
Vegard Haugland (avbildet), seniorkonsulent i Webstep, Sørlandet, deler sine erfaringer med Python.
Python gjør det lett å prototype idéer og få gjort dem om til brukbare applikasjoner. Om Python er det rette programmeringsspråket for deg i en gitt situasjon kommer dermed an på en rekke faktorer.
Når du skal velge et programmeringsspråk vil jeg si at det rette valget er det som gir mest verdi til brukeren av programmet. Hvis brukeren er ikke-teknisk, og ikke har noe forhold til språket som er brukt, kan det da være utviklingstiden eller tilgjengelige biblioteker som gjør Python til det rette valget. Hvis brukeren er utvikleren selv, en systemadministrator eller øvrig IT-tekniker som er kompetent i språket, vil det gjerne være det naturlige valget - ettersom de kan bruke Python til både utvikling og scripting. Jobber du i et team med andre som skal bruke og vedlikeholde applikasjonen dere skal lage, må du vektlegge hva kollegaene dine kan og nytten som arbeidsgiveren sitter igjen med når utviklertimene for hele året skal summeres i regnskapet.
Profesjonelt har jeg brukt Python til flere scripting- og automatiseringsoppgaver, utvikling av nettsider og utvikling av elektroniske veiskilt. Akademisk har jeg brukt det i forbindelse med bachelor- og masteroppgave, og til hobbybruk har jeg blant annet laget dataspill, utført reverse engineering av radioer og styring av garasjeporter, visning av noter fra et MIDI-piano på et digitalt noteark, og til å styre en robot som du kan kan spille tripp-trapp-tresko mot.
Python gir deg mulighetene, men bare du vet om det er det rette valget for deg i konteksten du har tenkt å bruke det i. Har du aldri programmert tidligere, er Python et svært godt sted å starte. Dersom du allerede kan programmere og vurderer å bruke Python i ditt neste prosjekt - så gjelder det å tenke gjennom om du da bruker rett verktøy til rett jobb.
Kilder:
- https://no.wikipedia.org/wiki/Programmeringsspråk
- https://en.wikipedia.org/wiki/List_of_programming_languages
- https://octoverse.github.com/
- https://snl.no/programmeringsspråk
- https://snl.no/objektorientert_programmering
- https://no.wikipedia.org/wiki/Python
- https://en.wikipedia.org/wiki/Docker_(software)
- https://azure.microsoft.com/nb-no/solutions/microservice-applications/
- https://www.uia.no/studieplaner/programme/INGDATA
- https://www.uib.no/emne/INF100
- https://www.ntnu.no/studier/emner/TDT4110
- https://docs.python.org/3/library/
- https://www.tensorflow.org/
- https://realpython.com/world-class-companies-using-python/
- https://snl.no/kompilere_-_IT
- https://realpython.com/python-bindings-overview/
- https://developer.nvidia.com/how-to-cuda-python
- https://beeware.org/
- https://kivy.org/
- https://docs.microsoft.com/en-us/xamarin/get-started/what-is-xamarin
- https://reactnative.dev/
- https://flutter.dev/
- https://flask.palletsprojects.com/
- https://www.djangoproject.com/