I IN1910 skal vi dekke en bred rekke med emner innenfor programmering for naturvitenskapelige anvendelser med Python og C++. Det finnes ingen bok som dekker alle de temaene vi skal innom på veien. Istedet vil vi utvikle forelesningsnotater som dekker det dere skal lære. Disse vil deles gjennom et github repository og kan også leses gjennom Jupyterhub. Disse finner dere på følgende sider (dere må logge inn med deres UiO-bruker på begge sidene)
Det er forelesningsnotatene som definerer og dekker pensum. I tillegg kommer vi til å anbefale forskjellig tilleggslitteratur. Dette er ment for de som ønsker å gå mer i dybden på et tema, eller som ønsker et alternativ til forelesningsnotatene. Tilleggslitteraturen henvises til i forelesningsnotatene, og er stort sett kilder som er åpent tilgjenglig på nett.
I tillegg anbefaler vi bruk av A Primer on Scientific Programming with Python, Fifth Edition av Hans Petter Langtangen som referanseverk for Python. Boken dekker også flere deler av pensum i IN1910, og dette er kapitler som ikke er dekket av IN1900 i særlig stor grad. Boka anbefales også for de som ikke har mye erfaring med Python fra før, og som en repetisjon til de som ikke har brukt Python på en god stund.
Liste over tema som dekkes i IN1910
Objekt-orientert Programmering
- Lage klasser i Python og C++
- Arv og hierarki, Polymorfisme, Interfaces, abstrakte klasser, virtuelle metoder
Versjonskontroll, validering,
- Versjonskontroll med Git
- Enhetstesting med pytest
C++
- Skrive, kompilere og kjøre C++ kode
- Forstå og forklare grunnleggende forskjeller mellom Python og C++
- Datastrukturer i C++ (arrays, structs, klasser)
- Enkel blandet programmering med Python og C++
Datastrukturer og Algoritmer
- Dynamiske arrays, lenkede lister og binære søketrær
- Algoritmeanalyse og Big Oh-analyse
Stokastiske simuleringer og tilfeldighet
- Psuedotilfeldige tallgeneratorer
- Random walks, markovkjeder
- Monte Carlo integrasjon
Profilering og optimalisering
- Profilering og benchmarking
- Algoritmeanalyse og optimalisering
- Kort innføring i parallelitet