Programmering handlar inte om att trycka på tangentbordet och skriva så snabbt som möjligt. Det handlar inte om att religiöst memorera tangentbordsgenvägar och i slutändan göra musen föråldrad. Det handlar inte om att lära sig vartenda programmeringsspråk som finns, om det ens är möjligt överhuvudtaget. En bra programmerare definieras inte av vilken märke, pris, prestanda och operativsystem deras dator har, inte heller av deras preferenser när det gäller kodredigerare och IDEs – VS Code, Atom, IntelliJ IDEA, Vim, Notepad++ eller något annat. I motsats till vad många tror tack vare många Hollywoodfilmer är programmering definitivt inte liktydigt med hackning.
Det går dessutom längre än att memorera syntaxen och de inbyggda funktionerna i ett programmeringsspråk. Logik, villkor, if
påståenden och algoritmer – särskilt sorteringsalgoritmer – ger inte en fullständig bild av vad programmering verkligen är. Matematik, rekursion, datavetenskap och designmönster gör inte heller rättvisa åt det. Även om de utgör en stor del av vad programmering är, är de bara en pusselbit.
Design och planering
För att skriva en enda kodrad planeras ett projekts design och arkitektur noggrant för att säkerställa eller åtminstone öka sannolikheten för en smidig utvecklingscykel. Det är här som programvarudesign kommer in i bilden. Verktygskedjor, pipelines, abstraktionslager för offentliga och interna API:er, modularisering, objektrelationer och databasstrukturering planeras alla under detta utvecklingsskede.
Vi är levande, andas felsökare
Programmeringens konst kräver att vi tänker utanför boxen och löser problem med de mest pragmatiska, effektiva och genomförbara lösningarna. Detta är förmodligen anledningen till att vi oftast är hushållets ”IT-kille” eller ”kundsupport”. Det är praktiskt taget vårt jobb att laga det som är trasigt. Det är som om ”programmering” är ett glorifierat sätt att säga ”problemlösning”.
Med andra ord är vi levande, andas felsökare på och utanför våra datorer, och på grund av detta är det viktigt att vi vet hur man läser och skriver dokumentation. Korrekt dokumentation – som kommer i form av riktiga sidor med detaljerad dokumentation, eller så enkelt som att strö värdefulla kommentarer till kodbasen – fungerar som en av de viktigaste livlinorna för en programmerare. Utan den är vi vilse i mörkret och oförmögna att fullgöra våra uppgifter som felsökare. Vi kan inte göra några större framsteg, eftersom den största delen av vår tid går åt till att experimentera och undersöka hur ett ramverk eller en äldre kodbas fungerar. Sammantaget skulle det resultera i en fruktansvärt hemsk utvecklarupplevelse.
Överväg alla möjliga scenarier
Debuggning är redan svårt nog som det är. För att göra saken ännu värre är utförandet av kod vanligtvis inte linjärt. Stora projekt medför flera ”grenar” av möjliga exekveringsvägar på grund av programlogik med if
-angivelsen. Vi måste ta hänsyn till alla möjliga scenarier och fel, särskilt om det handlar om användarinmatning. Den kognitiva belastning som krävs för att hålla reda på varje möjlig exekveringsväg gör programmeringen ännu svårare.
Användarupplevelse
Steppande utanför utvecklingsvärlden fyller vi i en genomsnittlig användares skor. Förutom att tillhandahålla funktionalitet, lägga till nya funktioner, åtgärda fel och dokumentera vår kodbas, fokuserar vi också på hur en genomsnittlig användare interagerar med vår app eller programvara. Vi tar hänsyn till flera faktorer som leder till en bra användarupplevelse, t.ex. (men inte begränsat till) tillgänglighet, användbarhet, användarvänlighet och -upptäckbarhet, utformning av användargränssnittet, färgteman, funktionella animationer och prestanda.
Prestanda och optimering
Prestationer är en stor aspekt av programmering i sig själv. Vi, särskilt de som har en bakgrund inom datavetenskap, strävar efter att använda och skriva de mest tids- och utrymmeseffektiva algoritmerna. Vi är besatta av den outgrundliga tidsskalan mikrosekunder för att få ut så mycket som möjligt av vårt tillgängliga minne, CPU:er och GPU:er.
I samband med webbutveckling är nätverksoptimering ett viktigt begrepp att förstå. Vi gör allt för att minska och komprimera vår HTML, CSS och JavaScript bara för att minimera nyttolasten i ett svar från servern. Bilder och andra diverse resurser komprimeras också och lazy-loadas för att minimera mängden data som användaren måste ladda ner innan en sida blir meningsfull och användbar.
Det finns dock tillfällen då vi blir alltför besatta av prestanda. För tidig optimering blir ett problem när vi i onödan ägnar oss åt att optimera vissa delar av en kodbas i stället för att fokusera på vad som behöver göras för faktiska framsteg och produktivitet. I det fallet måste vi ha visdom nog att bedöma vilka delar av kodbasen som verkligen behöver optimeras.
Säkerhet
Bortom användargränssnittet och logiken i vår programvara är vi som programmerare ansvariga för våra användares säkerhet. I vår tid där data är mycket eftertraktade och kraftigt monetariserade är det viktigare än någonsin att se till att våra användares personliga information är säker. Vi vidtar extra åtgärder för att skydda privata uppgifter eftersom våra användare litar på vår programvara. Om vi inte upprätthåller det ansvaret är vi verkligen inte riktiga programmerare, inte ens på långa vägar.
Vi kan aldrig vara för säkra när vi närmar oss säkerhet. Som en allmän tumregel gäller att vi ”aldrig litar på användarinmatning”. Det kan till och med betraktas som en ”bästa praxis” att göra stora ansträngningar för att sanera data och användarinmatning. Vi utsätter inte bara vår programvara och infrastruktur för stora risker om vi inte är försiktiga med dem, vi riskerar också att äventyra känsliga användardata – samma data som vi lovar att skydda som programmerare.
Säkerhet är dock inte exklusivt för användardata och -inmatning. Virus, maskar, trojanska hästar, reklamprogram, tangentloggare, utpressningstrojaner och andra former av skadlig datormalware fortsätter att spridas och plåga miljontals och åter miljontals datorer och enheter runt om i världen. Även efter årtionden av tekniska förbättringar av hårdvara och mjukvara finns det inget osårbart system. Säkerhet är helt enkelt ett hantverk som ständigt finslipas men som aldrig kommer att fulländas eftersom det alltid kommer att finnas några få nyfikna personer som undersöker och letar efter alla möjliga sätt att ”hacka” ett system.
För detta ändamål, oavsett användningsområde och användarbas, utformar vi våra programvaror med säkerheten i åtanke som en av de högsta prioriteringarna, om inte den högsta prioriteringen. Vi gör detta för att skydda våra användare från de ovannämnda hoten som kan orsaka olägenheter som dataförlust, filkorruption och systemkrascher för att nämna några.
Lagarbete får drömmen att fungera
Även om det inte nödvändigtvis har med programmering att göra, spelar lagarbete en ytterst väsentlig roll i programvaruutveckling. Med all komplexitet och alla rörliga delar i ett stort projekt är det omöjligt för en enda person att utveckla programvara av hög kvalitet i den snabba takten av regelbundna iterationer eller under de strikta tidsfrister och tidsbegränsningar som en kund eller någon övervakande enhet har.
Detta är anledningen till att vi har olika team av människor som specialiserar sig på ett av de många facetterna av programmering. En person kommer aldrig att ha alla de färdigheter och kunskaper som krävs för att effektivt och sammanhängande limma ihop alla facetter. Ett team kan vara ansvarigt för UI-design och tillgänglighet medan ett annat kan arbeta med själva programvarans funktionalitet. Om alla kompetenser hos de olika specialiserade teamen kombineras kommer den resulterande programvaran att ha den bästa funktionaliteten, användarupplevelsen, prestandan och säkerheten som den kan ha inom ramen för ekonomiska och praktiska begränsningar.
För att klara tidshantering och hålla deadlines är organisation och automatisering av arbetsflöden av yttersta vikt. Vi tar oss tid att konfigurera våra byggverktyg och pipelines på rätt sätt eftersom detta kommer att spara oss mycket tid i framtiden. I allmänhet ökar avkastningen på investeringen ju längre tiden går.
Att arbeta bra tillsammans med andra
För att utveckla idén om lagarbete och samarbete etablerar vi sunda relationer med våra kollegor eftersom ett projekts framgång i slutändan i hög grad beror på framgången för laget bakom det. Vi anstränger oss för att skapa en stödjande arbetsmiljö där erfarna äldre personer vägleder nykomlingar på ett omdömesgillt sätt.
Då vi utvecklar mjukvara i team måste vi vara uppmärksamma på att andra läser vår kod. För att hålla utvecklingscykeln hållbar på lång sikt anses läsbarhet och underhållbarhet vara lika viktiga som ett projekts logik och funktionalitet. Vi skriver konsekvent bra, läsbar kod samtidigt som vi tillhandahåller informativa commit-meddelanden och dokumentation eftersom dessa definitivt kommer att hjälpa oss och andra att förstå vår kod bättre.
På tal om andra som läser vår kod är en kodgranskning ett utmärkt tillfälle att lära sig mer om bästa praxis inom programmering. Det är också ett annat sätt att bekanta oss med en kodbas och dess underliggande design och arkitektur. Även om konstruktiv kritik är obehaglig och svår att hantera i mottagarsidan är det viktigt att ta den som goda råd för att vi ska kunna förbättra oss som programmerare.
Programmering är svårt
Programmering omfattar många aspekter utöver funktionalitet, t.ex. användarupplevelse, prestanda, säkerhet och lagarbete. Det räcker inte att strikt fokusera på endast en aspekt och samtidigt utelämna de andra. För projekt av anmärkningsvärd storlek och betydelse är det inte så enkelt som att skriva några rader kod. Det krävs en hel del noggrann planering, utformning, överväganden och samarbete i teamet för att lyckas. Faktum är att man ägnar mer tid åt att tänka än att skriva när man programmerar, särskilt under långa sessioner av felsökning.
I slutändan handlar programmering verkligen om kontinuerligt och oavbrutet lärande. Anpassningsförmåga och ständigt lärande är nycklarna till att överleva i denna bransch. Vi kan inte förvänta oss att förbli relevanta om vi inte gör vår del för att fortsätta lära oss. I en så flyktig bransch med exponentiell teknisk förbättring måste vi hålla jämna steg med den snabba takten så att vi inte hamnar i stoftet.
Jag vill avsluta den här artikeln med att erkänna det hårda arbetet av alla utvecklare runt om i världen. För att skriva den här artikeln var jag tvungen att reflektera över det dagliga arbetsflödet i ett team av utvecklare. Jag var tvungen att titta på de många aspekter av programmering och mjukvaruutveckling som vanligtvis går obemärkt förbi. Sedan dess har jag fått en större uppskattning för all programvara som är installerad i min dator. Därför uppmanar jag alla att tacka en programmerare i dag, oavsett erfarenhet. Var skulle vi vara utan dem?
Ta aldrig deras hårda arbete för givet.