Joel on Software

Joel on Software Joel om mjukvara

 

Användargränssnitt för programmerare
Kapitel1
Kapitel2
Kapitel3
Kapitel4
Kapitel5
Kapitel6
Kapitel7
Kapitel8
Kapitel9

Andra "Joel on Software"-artiklar på svenska

Andra "Joel on Software"-artiklar på engelska

Skicka e-post till författaren (enbart engelska)

 

Användargränssnitt för programmerare
Kapitel1: Du är nöjd när du har kontroll över situationen


Av Joel Spolsky
Översatt av Lennart Pettersson
24 oktober 2001

De flesta inbitna C++-programmerare jag känner hatar att programmera användargränssnitt. Det förvånar mig, eftersom det i grunden är både lätt, roligt och rakt på sak att programmera gränssnitt.

Det är lätt därför att du för det mesta inte behöver göra mer komplicerade beräkningar än att centrera en rektangel inuti en annan. Det är rakt på sak eftersom alla misstag du gör syns direkt så att du kan korrigera dem. Och det är roligt eftersom det ger direkt visuell återkoppling. Det känns som att sitta och skulptera programmet.

Jag antar att programmerare fruktar gränssnittsprogrammering därför att de inte känner sig kapabla att designa gränssnitt. De tror att gränssnitt är som grafisk design: en mystisk process som bäst sköts av kreativa, latte-drickande, svartklädda människor som har coola ringar på udda ställen. Programmerare ser sig själva som analytiska och logiska tänkare, bra på att dra slutsatser men inte på att göra estetiska avvägningar, och som alltså inte kan designa gränssnitt.

Själv har jag kommit fram till att gränssnittsdesign är både lätt och logiskt. Det krävs varken examen från en konstskola eller en förkärlek för neonrosa hår. Det finns enkla, logiska regler som du alltid kan använda för att förbättra användargränssnittet i de program du arbetar på.

Det här ska inte bli någon "Zen och konsten att göra ett gränssnitt", eftersom gränssnittskonstruktion varken är konst eller buddism, utan en uppsättning regler. Ett sätt att tänka rationellt och metodiskt.

Den här boken är skriven för programmerare. Alltså antar jag att du inte behöver veta hur du gör en meny, snarare behöver du fundera på vad som ska stå där (eller om du över huvud taget ska ha en). Det finns en grundläggande regel för all bra gränsnittskonstruktion som jag vill lära ut och som inte är särskilt svår att ta till sig.

Mitt första riktiga arbete var i ett stort bageri. Det var tänkt att ha sex produktionslinor för bröd med en degmixer per två linor. Mixern producerade deg i 180-kilosklumpar omväxlande på höger och vänster lina:

Så var det åtminstone tänkt; i verkligheten fanns inte mixer C och inte heller linorna 3 och 5. Så det såg ut så här:

Nu undrar nog den vakne läsaren "hur kom degen från mixer B till lina 6"? Jo, det var där lille Joel kom in i bilden. Min uppgift, tro det eller ej, var att stå till vänster om B-mixern och fånga 180-kilosklumparna av deg i något som mest liknade ett rullande badkar, rulla över karet till lina 6 och, med hjälp av en vinsch, häva upp degen på bandet. Och det skulle jag göra var tionde minut, från tio på kvällen till fyra på morgonen.

Och det är inte slut med det: lina 6 kunde egentligen inte ta emot 180 kilo deg på en gång, så jag skulle kapa degklumpen i ett tiotal bitar med hjälp av en gigantisk kniv. Jag tänker inte ens försöka förklara hur knepigt det var.

De första dagarna klarade jag naturligtvis inte alls av jobbet. Det verkade helt omöjligt. Varenda ben i kroppen värkte. Mina blåsor fick egna blåsor och jag fick träningsvärk på ställen där jag inte visste att jag hade muskler.

Till att börja med kunde jag inte förse lina 6 med deg tillräckligt fort. Varje gång det blev avbrott i degmatningen blev det förstås tomt på en del av bandet. När tomrummet nådde ugnen blev det för hett där inne (ugnen spenderade en konstant mängd energi på en reducerad mängd deg) och brödet brändes vid. Det hände också att lina 6 stannade men mixern fortsatte att producera deg, och jag riskerade att få slut på rullande badkar att lagra degen i. I sådana situationer skulle jag skrubba och olja in en del av golvet, och dumpa degen där tills vidare. Inte för att det fungerade särskilt bra, om degen fick ligga längre än 30 minuter började den jäsa och då var den inte längre bra att göra bröd på. Om det hände skulle jag hacka den i femkilosbitar som kunde blandas in i kommande klumpar.

Efter en vecka eller så blev jag så bra på handgreppen att jag, om jag minns rätt, hade två minuter ledigt i varje tiominutersintervall. Jag räknade ut ett precist schema och lärde mig säga till mixern att hoppa över en laddning deg om produktionslinan stannade.

Och jag började fundera på varför vissa dagar är bättre än andra.

En dag när jag grubblade på det, noterade jag att ett av badkaren hade dåliga hjul som inte ville rulla. Ibland stack det badkaret iväg åt ett helt annat håll än jag ville, så att det körde på saker. Det var ett litet bekymmer. Ibland, när jag halade in kedjan för att vinscha upp badkaret, rev jag mig - bara lite, men ändå - på en flisa som stack ut från kedjan. Ännu ett litet bekymmer. Och när jag sprang med ett tomt badkar för att fånga en degklump innan den föll ut ur mixern halkade jag på det oljiga golvet. Inte tillräckligt för att ramla, märk väl, men ännu en mikroskopisk sak att reta sig på.

Sen fanns det dagar då jag kunde notera små segrar. Jag lärde mig att tajma degproduktionen så att ny, färsk deg kom precis sekunderna innan den gamla var slut. Det gav färskast möjliga deg och därmed också bäst bröd. Andra segrar var ännu obetydligare: jag kunde få syn på en liten degklump som kastats ut ur mixern och fastnat på väggen, och tänka YES! för mig själv när jag skrapade ner den och kastade den i soppåsen. Ibland kändes det ovanligt lätt att skära den stora degklumpen i tiokilosbitar. Ögonblick av tillfredsställelse när jag lyckades kontrollera min omgivning, även om det handlade om småsaker.

Så gick mina dagar. En hög med små missöden, en med små segrar, som staplades på varandra. Även små, till synes obetydliga händelser påverkar humöret; det tycks inte bry sig om en händelses vikt, bara om dess kvalitet.

Och jag började inse att de dagar när jag kände mig lyckligast var de där segrarna var många och missödena få.

Åratal senare, när jag började på college, fick jag lära mig om ett fenomen som psykologerna kallade Inlärd hjälplöshet. Idén, som har verifierats av åtskilliga års forskning, är att depressioner ofta växer ur en känsla av hjälplöshet: känslan av att inte ha kontroll över omgivningen.

Ju mer du känner att du har kontroll, och att det du gör faktiskt fungerar, desto bättre mår du. När du känner dig frustrerad eller arg är det sannolikt för att något har hänt som du inte kunde kontrollera. Mellanslagstangenten kanske inte fungerar som den ska, så att orden klumpas ihop när du skriver. Eller så är det låset till ytterdörren där hemma som är trögt: du försöker vrida om nyckeln men ingenting händer. Sådana saker läggs ihop och bidrar till att du känner dig deppig när dagen är slut. Även om de verkar för obetydliga för att hänga upp sig på (jag menar, folk svälter i Afrika, vem orkar bry sig om mellanslagstangenter?) påverkar de humöret.

Men vi kanske ska prata datorer ett tag istället?

Tänk er en typisk Windowsexpert, vi kan kalla honom Pete. (När du funderar på användargränssnitt är det nyttigt att uppfinna tänkta användare. Ju mer realistiska de är, desto bättre kommer du att kunna föreställa dig hur de använder din produkt.) Pete arbetar på ekonomiavdelningen på ett förlag, och han har använt Windows i jobbet i sex år plus en hel del hemma. Han är både kunnig och teknisk, han installerar program själv och han läser PC Magazine och har till och med programmerat några enkla Wordmakron för att sekreterarna ska kunna skicka ut fakturor lite lättare. Han har kabelmodem hemma. Men Pete har aldrig använt en Macintosh. "De är för dyra" brukar han säga, "man kan köpa en 700 MHz PC med 128 Meg minne för ...". OK, Pete, vi hajar.

En dag behöver hans vän Gena hjälp med ett datorproblem. Gena har en Macintosh Ibook, eftersom hon älskar den genomskinliga plasten. När Pete slår sig ner och börjar knappa på Macen blir han snabbt frustrerad. "Jag avskyr de här burkarna", säger han. Till sist lyckas han lösa Genas problem, men han är retlig och irriterad. "Macintosh har så klumpigt användargränssnitt!"

Klumpigt? Hallå? Alla vet att en Mac har ett elegant gränssnitt, eller hur? Den är själva symbolen för "lättanvänd".

Här är min analys av vad som hände.

När du vill flytta ett fönster på en Macintosh kan du ta tag i vilken kant som helst med musen och dra. I Windows måste du ta tag i namnlisten, om du drar i en kant ändrar fönstret storlek istället. När Pete hjälpte Gena försökte han utvidga ett fönster genom att dra i högra kanten, men hela fönstret följde med och han blev irriterad.

I Windows kan en dialogruta stängas med endera Enter eller mellanslag. På Mac fungerar inte mellanslaget. Varje gång Pete såg en dialogruta försökte han stänga den med ett mellanslag, som han har gjort på reflex i sex år. Ingenting hände. Och utan att ens tänka på det tryckte han fler gånger, hårdare och hårdare, eftersom han utgick från att problemet var att Macen inte registrerade hans tryckningar. Men det gjorde den - problemet var att den inte brydde sig om dem. Till sist fick han klicka bort dialogrutan med musen. Ännu en detalj att reta sig på.

Pete är också van att använda alt-F4 för att stänga fönster. I Macintosh används det kommandot för att justera volymen. Så när Pete behövde klicka på Explorer-ikonen på skrivbordet och den var delvis gömd under ett fönster tryckte han på alt-F4 och dubbelklickade snabbt där ikonen borde vara. Men alt-F4 skruvade upp volymen, inte stängde fönstret, så hans dubbelklick träffade Hjälp-knappen i det fönster han ville stänga, vilket i sin tur öppnade ett nytt hjälpfönster. Så helt plötsligt har han två öppna fönster som måste stängas.

En obetydlig detalj till. Men gissa om detaljerna läggs på varandra. När jobbet är klart är Pete missnöjd, han har försökt ta kontroll över datorn men ingenting har fungerat som han tänkte sig. Mellanslagstangenten och alt-F4 är "trasiga" - de gör ju inte vad de ska. Fönstret vägrar att lyda honom när han vill göra det bredare, spelar honom ett spratt och flyttar på sig istället. Elaka fönster. Kedjan är klar, även om det mesta sker omedvetet: känslan av att inte ha kontroll ger en känsla av hjälplöshet som i sin tur leder till missnöje. "Jag gillar min dator", konstaterar Pete. "Jag har ställt in den så att den fungerar precis som jag vill ha den. Men de här Macarna är klumpiga och svåra att använda, de gör mig bara frustrerad. Om Apple hade förbättrat MacOS istället för att hålla på och strula med Newton i flera år så hade deras operativsystem inte varit så rörigt."

Visst, Pete. Men vi vet bättre: han är frustrerad trots att Macen faktiskt är väldigt lätt att använda - för den som är van vid en Macintosh. Det spelar ingen som helst roll vilken tangent man använder för att stänga ett fönster. Microsofts programmerare, som antagligen satt och kopierade Mac-gränssnittet, tyckte säkert att de la till en tjusig finess när de lät dig ändra storlek på fönster genom att dra i kanterna. Programmerarna som skrev MacOS 8.0 tyckte säkert att det var en tjusig finess att flytta fönstret genom att dra i kanterna.

De flesta urspårade diskussioner om användargränssnitt hänger upp sig på fel saker. Windows är bättre för att det ger dig fler sätt att ändra storlek på fönstret. Jaha, och? Det är helt irrelevant. Den viktiga frågan är om gränssnittet reagerar på det sätt som användaren förväntar sig? Om inte så kommer användaren att känna sig hjälplös och utan kontroll, precis som jag gjorde när hjulen på badkaret vägrade gå åt det håll jag ville och jag körde in i väggen. Bonk.

Användargränssnitt är viktiga därför att de påverkar både känslor och humör hos dina användare. Om gränssnittet är felkonstruerat och användarna känner att de inte har kontroll kommer de bokstavligen att bli olyckliga, och de kommer skylla det på ditt program. Om gränssnittet är bra och saker och ting fungerar som väntat kommer de å andra sidan att bli glada varje gång de uppnår sina mål. Ha! Jag rippade en CD! Det fungerade! Juste program!

Konsten att göra folk glada är att ge dem en känsla av kontroll. För att åstadkomma det måste du tolka deras agerande på ett korrekt sätt. Gränssnittet måste bete sig på det sätt som användarna förväntar sig.

Således, kardinalregeln för all gränssnittsdesign:

Ett användargränssnitt är välgjort om programmet beter sig precis så som användaren förväntar sig att det ska bete sig.

 

Som rabbi Hillel en gång sade: allt annat är kommentarer. Alla andra regler för gränssnittskonstruktion följer ur den här.



> Kapitel2

Originalartikelns engelska titel är User Interface Design for Programmers Chapter 1: Controlling Your Environment Makes You Happy  

Joel Spolsky driver Fog Creek Software, ett litet programvaruföretag i New York. Han har examen från Yale och har arbetat som programmerare och i chefsbefattning på Microsoft, Viacom och Juno.


Innehållet på dessa sidor representerar en enskild persons åsikter.
Allt innehåll är Copyright ©1999-2005  Joel Spolsky. Alla rättigheter är reserverade.

FogBUGZ | CityDesk | Fog Creek Software | Joel Spolsky