Jeg er over halvvejs gennem Oregon State University’s post-bacc computer science program. Det er en (mildt sagt) opslidende gauntlet af 15 kurser, gjort mere opslidende af det faktum, at jeg har arbejdet fuldtid og taget to kurser pr. kvartal (med en undtagelse lavet for sidste sommer, da der kun var et kursus på skemaet for at give mig lidt tid til at blive gift 🙂 ). Til dato har jeg taget, eller er i gang med at tage, følgende kurser (i ingen bestemt rækkefølge):
- Introduction to Computer Science I
- Introduction to Computer Science II
- Discrete Structures in Computer Science
- Data Structures
- Web Development
- Introduction to Databases
- Introduction to Databases
- Computerarkitektur & Assembleringssprog
- Analyse af algoritmer
- Operationssystemer (i øjeblikket i gang)
- Software Engineering I (i øjeblikket i gang)
Og jeg har følgende fag foran mig:
- Software Engineering II
- Introduction to Usability Engineering
- Intro to Computer Networks
- Mobile and Cloud Software Development
- Software Projects (Program Capstone)
Som i ethvert program, der er designet til at undervise en forskelligartet gruppe af studerende, der alle har forskellige læringsstile og kommer fra forskellige baggrunde, varierer kvaliteten og sværhedsgraden af kurserne. Efter min vurdering har de mest interessante kurser også været de kurser, som jeg anser for at være de sværeste.
Introduction to Computer Science II var tilsyneladende designet til at frasortere studerende, der ikke var stærke programmører. Kurset var meget koncentreret om at skrive kode (C++ er det primære sprog, der bruges i OSU’s program, og det var stærkt repræsenteret her) med fokus på objektorienterede designmønstre.
Discrete Structures in Computer Science ville sandsynligvis have været lettere, hvis mine algebra- og bevisskrivningsmuskler ikke var så rustne. Når først man er blevet varmet op, er kurset dog en fascinerende øvelse i induktiv ræsonnement og en solid introduktion til mængdelære og grafteori. Dette kursus har vist sig at være særligt nyttigt, da jeg undersøger discipliner relateret til kunstig intelligens, som er tunge på de typer af symbolik, som man introduceres til i dette kursus.
Computerarkitektur & Assembly Language er en tur. Mens C++ udsætter dig for begreber som pointers og hukommelsesallokering – ting, som de fleste sprog abstraherer fra – er assembler et helt andet dyr. Her lærer du at flytte hukommelse rundt på CPU’en og se, hvordan sløjfer, betingede udsagn og funktioner er bygget op fra bunden. Du bliver også introduceret til den cyklus for hentning, afkodning og udførelse, som alle CISC’er benytter sig af. Kort sagt lærer du, hvad en computer er, og hvordan den gør alle de smukke ting, som vi tager for givet.
Analyse af algoritmer var konceptuelt set det sværeste kursus i programmet. Arbejdsbyrden var lettere end Introduction to Computer Science II, men sidste gang jeg kiggede på grænser og derivater var i college. Jeg fandt mig igen i at gå på Khan Academy i weekenderne for at genopfriske mine regnefærdigheder, men da jeg først havde lært det grundlæggende, var det bare at komme i gang. Dette kursus var det første, hvor jeg følte mig som en “datalog”, da begreberne kræver en abstrakt tankegang, der går ud over “bare” at programmere eller skrive software. Her kommer man til at se Big-O notation og algoritmeanalyse, dynamisk programmering, kompleksitetsteori, grafteori og algoritmer samt de klassiske søge- og sorteringsalgoritmer. Selve kursuskvaliteten lader noget tilbage at ønske, men emnerne er virkelig smukke.
De andre kurser er ikke “dårlige” i sig selv, men de mangler enten den samme stringens eller dybde som de andre kurser, eller også er tilrettelæggelsen/forelæsningen/kursusarbejdet så ringe, at det er distraherende. Når det er sagt, har hvert kursus sine egne guldkorn af interessant indhold, og vigtigst af alt, så er den fortsatte handling med at løse problemer nøglen til at lære at være en “udvikler”, “ingeniør”, “datalog” (eller hvad man nu vil kalde en person, der flytter bits rundt med høj hastighed).
Og nu er jeg på vej ind i målstregen! I løbet af de næste tre kvartaler vil jeg afslutte 7 kurser, hvor størstedelen af kurserne er tilbage (usability engineering, software engineering, cloud computing), alt sammen ting, der ligger i mit wheelhouse. Til august i år vil jeg være den stolte indehaver af en B.S. i C.S. fra Oregon State University og vil gå videre til Georgia Tech’s Master’s in C.S. program. Det tidsmæssige engagement i dette program har til tider været stressende, men jeg ville ikke bytte denne erfaring for noget som helst.