Peter S. Magnusson
Programering är en blandning av vetenskap, konst, och fackkunskap. Algoritmer är vetenskap, data strukturer är konst, och detaljerna i en effektiv implementation är fackkunskap. Orden är inte mina, utan Charles Simonyis, chefsarkitekten bakom bland annat Microsoft Word och Excel.
Högskolorna är idag duktiga på att lära ut algoritmer, hyfsade på data strukturer, och urusla på fackkunskap. Det finns ett brett ointresse, inte bara hos högskolan, utan även inom industrin. I högskolan anses fackkunskap inte fint nog. Algoritmer och högnivåspråk är fina saker, och dessutom populära inom forskning. Implementation är ju vanligt ingenjörsarbete.
Som Simonyi påpekar så handlar fackkunskap till stor del om effektivitet. Med effektiv programering menar man det arbete som ligger mellan algoritm och kompilator. Givet en för uppgiften lämplig algoritm med tillhörande datastrukturer, är uppgiften att uttrycka algoritmen i ett högnivåspråk på sådant sätt att kompilatorn genererar effektiv binärkod.
Själv fick jag min första inblick i prestandaproblem för snart tio år sedan. Först var det ett avancerat 4GL-system på en stordator som skulle analysera tidsskrivning. Det gick inte, indata var för stort. En långhårig hackerkollega skrev nattetid ett pascalprogram som gjorde förarbetet på några sekunder. Men Pascal var ju ett föråldrat och utdöende 3GL-språk, så detta sedelärande exempel talade man tyst om.
Historian är inte ovanlig, tvärtom. Dylika prestandaproblem är i praktiken ett stort problem. Ibland är det uppenbart, som när programmet helt enkelt är för långsamt för att lösa problemet. Ofta är det mera subtilt --- med dålig prestanda lämnas mindre utrymme för annorlunda lösningar, som bättre felhantering eller bättre gränssnitt.
Det som är anmärkningsvärt är vilken låg status som dylik problemlösning har i högskolanÑoch inte bara i Sverige, för den delen. Området kallas idag "programming in the small".
€ldre textböcker har en mer praktisk ton. Donald Knuths epos, The Art of Computer Programming (vol 1-3) använder ett eget assemblerspråk, MIX, för att illustrera realistiska implementationer. Moderna böcker om algoritmer nöjer sig med högnivåbeskrivning i något algol-liknande språk. Budskapet är att det är endast algoritmen som är viktig --- det är "Ordo"-förbättringar som räknas. Implementationen kan "endast" påverka konstanten.
Detta är inte bara en arrogant inställning, utan direkt missvisande. För att komma närmare sanningen kan man anta motsatta ståndpunktenÑalgoritmer är ointressanta eftersom de redan är lösta. Måste alla datatekniker som tar examen utveckla egna, intressanta algoritmer för att praktisera sin yrkeskunskap? Naturligtvis inte; ytterst få programerare vare sig kan eller behöver bidra med nytänkande inom algoritmer. De flesta programerare jobbar till vardags med konstanten.
Festligt nog finns det en liten motståndsrörelse. Futurist programmers kallar sig några programerare som inspirerats av futurismen inom konsten i Italiens tidiga 1900-tal. Futuristerna revolterar mot vad de kallar religösa dogmer om programering, och förkastar dagens förväxta system (Windows, Unix) som oförlåtligt resurskrävande. Bland deras hjältar märks namn som Bill Atkinson, Henry Massalin, och Jon Bentley. De förordar mindre teori och mer praktisk övning.
Jon Bentley har skrivit den enda generella boken om effektiv programering som jag känner till, Writing Efficient Programs. Boken skissar en praktisk metodik för att förbättra prestanda hos program, med riktiga exempel på varje delprincip. Rekommenderad läsning av futuristerna, och jag instämmer.
Futuristerna föreslår att det i datatekniska utbildningar borde ingå studier av klassiska exempel på små, effektiva, och eleganta program. Programering är konst, och det är av mästarna man lär sig.
Bra idé. Varför inte dissikera Bill Atkinssons ursprungliga Quickdraw, själva grunden till hela Macintosh-revolutionen? Att Apple var först med ett fönsterbaserat system till en rimlig kostnad berodde just på att man bemästrade ``programming in the small''.
Peter S. Magnusson