Blog: De små svære problemer

»There are two hard problems in Computer Science: Cache invalidation, naming
things, and off by one-errors.« –Ukendt[citation needed]

De sværeste problemer er oftest dem man ikke er opmærksom på, men først meget
sent i et projekt viser sig som uforklarlige fejl eller kode der bare ikke
længere giver mening.

Ovenstående citat, som findes i mange varianter, nævner nogle af disse
problemer som man støder på igen og igen. Selv har jeg en liste af
problemtyper jeg altid frygter at finde når jeg begynder at kikke på en gammel
kodebase:

Tidspunkter og tidsrum

Håndteringen af tid er noget der på overfladen ser så let ud at man sjældent
specificerer det nærmere. Men på et eller andet tidspunkt bliver man ramt af
tidszoner, skift til og fra sommertid eller bare at brugerens opfattelse af
‘en måned’ ikke svare til de 2592 kilosekunder man brugt i sin kode. Helt
elendigt bliver det hvis man skal til at kommunikere med flere systemer
der håndterer tidszoner på helt forskellige måder.

Floatingpoint og præcision

Titalssystemet og implicitte afrundinger er så indgroet hos mange af os at vi
let bliver overrasket når computerens floating point ikke lige virker som vi
forventer. Se bare dagens historie om lommeregneren i Android
Lollipop
.

Ofte kan man let omgå alle problemerne ved at lave alle sine beregninger i
heltal. Hvis man for eksempel laver økonomiske beregninger er det måske nok at
regner i et helt antal øre istedet for vilkårligt præcise tal.

Tegnsæt og Unicode

I gamle dage var det let at håndtere tekst, men så begyndte folk at insistere
på at bruge andet end ASCII (jaja, glem lige ebcdic og andre obskuriteter).
Selv Latin-1 var til at håndtere især for os der valgte at ignorere alt andet.

I dag får jeg dog kuldgysninger hver gang jeg skal til at håndtere tegnsæt.
Mange internetprotokoller er fra før tegnsæt blev et problem man rigtigt
forsøgte at håndtere og så ender man oftest med at skulle gætte sig frem.

Unicode skaber sine helt egne problemer hvor samme tegn kan repræsenteres på
forskellige måder og vidt forskellige tegn kan se helt ens ud på brugerens
skærm. Længden af en tekststreng er pludselig et tvetydigt begreb alt efter om
man regner i glyffer eller bytes og hvis man sjusker i sin håndtering af UTF-8
kan man ende med et sikkerhedsproblem.

Og endelig er der kode der påstår at kunne håndtere Unicode, men aldrig er
prøvet med andet end ‘Basic Multilingual Plane’ og derfor går istykker på
mystisk vis første gang man forsøger at bruge det med Unicode Emoji.

Resten af listen

Listen af små problemer man ikke rigtig tænker på i tide er selvfølgelig meget
længere. Hvilke typiske problemer står på jeres liste af fejl I frygter at
finde i gammel uvedligeholdt kode?

Posted in computer.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>