Etikettarkiv: programmering

Felaktiga antaganden programmerare gör om namn

(Shamelessly appropriated from this article and expanded upon and swedified.)

I nästan alla sammanhang förekommer det att man skall fylla i sitt namn i olika system. Dessa system är skrivna och baserade på ett antal antaganden, många av dessa antaganden är ofta helt felaktiga men vi är så vana vid att det skall se ut på ett visst sätt att vi inte tänker på att utmana våra antaganden.

Som alla vet, antaganden leder ofta till grova fel i program, det är bättre att man kontrollerar hur det bör vara. Här har jag sammanställt en lista på vanligt antaganden runt just namn som programmerare bör vara observanta på och se till att försöka undvika åtminstone de värsta fällorna.

  1. En människa har endast ett korrekt namn
  2. En människa har ett fullständigt namn som de kallas
  3. En människa har, just nu, ett fullständigt namn
  4. En människa har ”n” antal namn (för valfritt värde på ”n”)
  5. En människa har ett riktigt namn och kanske ett eller flera smeknamn
  6. En människas namn ryms inom ett visst antal tecken
  7. En människas namn ändras inte
  8. En människas namn ryms på en rad
  9. En människas namn har mer än ett tecken, glyf eller symbol
  10. En människas namn kan ändras, men bara vid vissa tillfällen
  11. Ett förnamn/efternamn/mellannamn etc har inga mellanrum
  12. En människas namn kan uttryckas med ASCII-tecken
  13. En människas namn uttrycks bara inom en viss teckenuppsättning
  14. En människas namn kan alltid uttryckas inom ramen för Unicode
  15. En människas namn är känsligt för teckenskift (stora/små bokstäver)
  16. En människas namn är inte känsligt för teckenskift
  17. En människas namn har ibland prefix eller suffix men man kan strunta i dem
  18. En människa har bara ett prefix till sitt namn (ex. herr, doktor, esq. osv)
  19. En människas namn innehåller inte siffror
  20. En människas namn skrivs inte med BARA VERSALER
  21. En människas namn är inte skrivet enbart med gemener
  22. En människas namn har en särskild ordning, om två system ordnar namnen efter samma algoritm kommer namnen i båda systemen vara identiska
  23. En människas förnamn och efternamn är aldrig likadana
  24. En människa har ett efternamn, familjenamn eller släktnamn eller dylikt som känns igen av dennes släktingar
  25. En människas namn är globalt unikt
  26. En människas namn är nästan globalt unikt
  27. En människas namn är i alla fall tillräckligt unikt att det inte finns miljoner andra med samma namn
  28. Mitt system kommer aldrig behöva hantera kinesiska namn
  29. …eller japanska, koreanska, singalesiska, engelska, svenska, botswana eller klingonska eller på urdu, fenicianska eller …
  30. Åtminstone personer inom samma etniska grupp har en samsyn på hur namn uttrycks
  31. En människa får sitt namn vid födseln
  32. En människa får sitt namn strax efter födseln
  33. En människa får sitt namn inom 1, 5, 10 … år efter födseln
  34. En människa skriver in sitt namn likadant i två olika system
  35. En människas namn innehåller inga skiljetecken annat än apostrofer
  36. En människas namn är det som skattemyndigheten har registrerat
  37. En människas namn är det som står i folkbokföringen
  38. En människa har ett förnamn
  39. En människa har ett efternamn
  40. En människa har ett namn

Swapping variables

Swappa variabler är ju något som kan vara användbart i flera sammanhang. Det klassiska exemplet brukar ges med att man har ett värde i A och ett värde i B (som kan vara likadant men inte nödvändigtvis) och sedan gör man följande operationer:

C = A
B = A
A = C

Detta sätt kräver dock extra datalagring i form av variabeln C och kan eventuellt undvikas med diverse trick. Det man bör tänka på är dock att vissa av tricken inte är helt rumsrena och har problem i vissa fall, antingen när någon av A eller B är noll eller om A = B.

Variant med addition/subtraktion:

A = A + B
B = A – B
A = A – B

Man kan vara uppmärksam på vad som händer när talen A eller B närmar sig MAX_INT det största talet som kan hanteras. När A eller B är > MAX_INT/2 kommer man få en överflödniong vid additionen och ett lån vid subtraktionen. På de flesta system fungerar detta men inte nödvändigtvis alla, det finns säkert system som är trasiga i den aspekten.

Farlig variant med XOR:

A = A ⊕ B
B = B ⊕ A
A = A ⊕ B

Men, det här blir inte så bra om A = B och det bör man i så fall försäkra sig aldrig händer.  Sker det förstörs innehållet i båda registren. Därför bör man villkora att man inte utför operationen om båda registren innehåller samma värde. Det innebär dock fler operationer.

Muahaha

World domination in 12 easy steps.

SAP? ZAPP!

Först var det försäkringskassan som behövde ett nytt ekonomisystem. Man valde SAP och efter att ha spenderat 10 miljarder svenska kronor har man ändå inte fått det system man ville ha eller de funktioner man egentligen behöver för att kunna sköta sitt uppdrag ordentligt med ett bra IT-stöd.

Sedan har vi försvaret som vill införa ett gemensamt ekonomisystem och man väljer SAP. Man budgeterar för ungefär 500 miljoner kronor men när projektet når 1,1 miljarder, alltså 120% över budget ja då börjar man reagera. 600 miljoner över budget är inte småpotatis för ett ekonomistöd.

Det tredje exemplet är Axfood som tillverkar Müsli och andra livsmedel. Man ser sig om efter ett nytt ekonomisystem och hittar då… SAP – budgeten för systembytet läggs till 600 miljoner kronor och det skall ta mellan fem och sex år att genomföra.

Av de här tre så är nog troligen de enda som kommer kunna använda sitt system Axfood.

SAP är konstruerat för tillverkningsindustri och att anpassa det till försvarsmaktens krav och uppgifter eller försäkringskassans något unika verksamhet lär inte vara enkelt.

Med de här pengarna som det handlar om är det möjligt att starta och driva hela programmerarföretag som specialskriver programvara som passar perfekt för verksamheten. Men det är inte rätt väg politiskt utan offentlig verksamhet skall bara agera beställare.

Smaka på pengarna igen, det har kostat över 10 miljarder för försäkringskassan. Om man räknar på att ett normalt företag behöver fakturera ca 3 miljoner för att ha råd med en kompetent programmerare så kan man på 10 000 miljoner ha hundra man i 30 års tid. Eller tre hundra man i tio års tid. Axfood kunde ha anställt 40 programmerare i fem år för att genomföra sitt projekt.

Hur i hela friden kan detta vara ekonomiskt och politiskt korrekt?