Att anlita en ny teammedlem kan vara svårt om man inte har tydliga mål eller steg för anställningsprocessen. Om man förbereder sig blir det enklare, effektivare och billigare att anlita rätt person. Därför hjälper vi er att ta reda på när och varför ni behöver en C#-utvecklare samt hur ni kan gå tillväga för att kvalitetssäkra kandidaterna och undvika att anlita en okvalificerad person.
Om C#
C# är ett komponentorienterat, typsäkert och objektorienterat programmeringsspråk från 2000 som skapades av Anders Hejlsberg för Microsoft. Den första officiella versionen av C# godkändes som internationell standard av Ecma 2002 (ECMA-334) och ISO/IEC 2003 (ISO/IEC 23270).
C# är också djupt integrerat med .NET Framework eftersom alla C#-program byggs och körs på .NET. C# används främst för Windows, men går även att använda för macOS, Linux, Android och iOS.
När det gäller användningsområden är C# populärt för att skapa skrivbords-, webb- och mobilappar, programvara för företag, VR och spel, molnbaserade tjänster, webbplatser, webbtjänster och data apps.
Med det här språket får man alltid en tydlig programstruktur och kod som kan återanvändas. Det är dessutom mycket likt Java (vad gäller syntax) och C++. C# är oerhört populärt bland utvecklare just eftersom det är så praktiskt – koden kan återanvändas, det har en tydlig struktur och det är smidigt att byta mellan olika språk.
C# bör dock inte förväxlas med andra C-språk. Så här hänger det ihop: efter att programmeringsspråket C hade tagits fram (på 70-talet) lanserades ytterligare två språk, C++ och C#, och de är alla olika och separata från varandra. C är ett procedurspråk medan C# och C++ är två olika objektorienterade språk.
C#-program körs på CLR (common language runtime) medan C++-program körs på maskinkod.
C# kan användas i följande ramverk
-
.NET Core – (plattformsoberoende med stöd för Linux, Mac och Windows) används främst för utveckling av RESTful-tjänster, företagssystem och webbappar.
-
.NET Framework – (endast med Windows) liknar .NET Core, men har fler funktioner som enbart fungerar med Windows.
-
Unity – Den mest använda spelmotorn för att utveckla spel för Sony, PC, Xbox med flera.
-
.NET Standard – med ett bibliotek i .NET Standard kan man använda det med allt som nämns ovan.
-
Xamarin – används för att utveckla nativa mobilappar för Mac, Android och iOS.
C#-utvecklarens grundläggande kunskaper och färdigheter
En C#-utvecklare måste besitta specifika tekniska kunskaper för att kunna sköta sitt jobb väl. Er nästa C#-utvecklare bör därför:
- Ha en utbildning inom IT eller programmering
- Ha minst tre års arbetserfarenhet
- Ha utmärkta kunskaper inom C#, dvs.: kunna skriva ren och tydlig kod i C#, ha en utmärkt förståelse för C# concurrency patterns, ha erfarenhet av att skriva C#-bibliotek som kan återanvändas
- Helt och hållet förstå och behärska .NET Framework och .NET Core
- Ha erfarenhet av andra programmeringsspråk (Java, PHP, C, C++)
- Ha lång erfarenhet av verktyg för versionskontroll (TFVC (Team Foundation Version Control), Mercurial, Git och SVN)
- Vara mycket kunnig inom objektorienterad programmering (OOP, Object-Oriented Programming)
- Ha god förståelse för de principer som rör design av skalbara appar
- Ha expertis inom databasdiagram för en affärsprocess
- Förstå och behärska CI/CD
- Ha fördjupade kunskaper om alla delar av CLR (common language runtime)
- Helt och hållet förstå och behärska arkitektur- och designmönster
- Kunna använda enhetstester och plattformar för automatiserad testning
- Kunna använda integreringstester
Meriterande färdigheter:
- Utmärkta kunskaper om Relationsdatabaser (MSSQL, PostgreSQL)
- Helt och hållet förstå och behärska Mono-ramverket
- God förståelse av Windows Presentation Framework
C#-utvecklarens arbetsuppgifter
En skicklig C#-utvecklare bör besitta de tekniska kunskaper som beskrivs ovan och kunna sköta vissa regelbundna uppgifter. Här nedan beskrivs några vanliga arbetsuppgifter för en C#-utvecklare.
- Skapa, bygga och sköta C#-kod som är både pålitlig, effektiv och återanvändbar
- Skapa appar via .NET Framework eller .NET Core
- Omvandla storyboards för appar
- Implementera use cases med Unit/integreringstester
- Utveckla olika lösningar för C#, .NET eller .NET Core
- Debugga kod
- Se till att appar håller hög kvalitet, svarar snabbt och fungerar som de ska
- Lösa problem för projekt i .NET eller .NET Core
- Identifiera buggar, tekniska fel och flaskhalsar samt åtgärda dem
Mjuka färdigheter
För att vara en skicklig utvecklare krävs mer än bara tekniska färdigheter och erfarenhet listad i ett CV. Man måste även ha goda mjuka färdigheter för att framstå som professionell och ha en god kommunikationsförmåga. När rekryterare och chefer som anlitar ny personal ser sådana mjuka färdigheter under intervjun kan de avgöra om den kandidaten är rätt för tjänsten.
Först och främst måste kandidaten vara väl förberedd och i god tid till intervjun. Om intervjun sker digitalt ska kandidaten vara punktlig, ha fungerande teknisk utrustning och befinna sig i ett rent och prydligt rum för att ge ett bra första intryck.
För det andra måste utvecklaren vara skicklig på engelska och ha en god kommunikationsförmåga. Detta behövs för en god förståelse mellan båda sidor. Utvecklaren behöver vara duktig på att både lyssna och prata för att skapa ett produktivt, trevligt samtal. Detta kan till och med vara avgörande eftersom det avslöjar hur kommunikationen med utvecklaren kommer att vara om ni anlitar den personen.
För det tredje är det viktigt att ha en nyfiken och positiv inställning för att bidra till ett lyckat samarbete på sikt. Utvecklaren bör visa att hen verkligen är intresserad av tjänsten och fråga vilka arbetsuppgifter som ingår i projektet, samt ta reda på företagets och projektets övergripande uppdrag och mål. Det är också viktigt att vara lösningsorienterad och ha förmågan att tänka kritiskt eftersom det är en stor fördel vid många arbetsuppgifter.
Generellt kommer vissa mjuka färdigheter alltid att vara viktigare när ni väljer rätt kandidat. Sefa Teyek, Tech lead och C#-utvecklare, säger:
”Utvecklaren måste vara mycket lösningsorienterad och ha förmågan att tänka kritiskt. Men det är också viktigt att kunna lyssna och kommunicera. Hen måste också kunna planera sin tid effektivt då det är väsentligt inom utveckling. Sist men inte minst är det viktigt att ha empati och förståelse för både sin kund och sin chef.”
Sefa Teyek
Teknisk kompetens
Sefa har även tagit fram en lista över vad C#-utvecklare måste veta och kunna, samt vilken teknisk kompetens som krävs.
- Lång erfarenhet av WCF (Windows Communication Foundation)/Webb-API för att bygga webbtjänster med SOAP eller RESTful.
- Fördjupade kunskaper i OOD (objektorienterad design) och OOA (objektorienterad analys)
- Fördjupade kunskaper i SOLID (designprinciper för objektorienterad utveckling)
- Goda kunskaper i versionshanteringssystem (Git, Stash)
- God kännedom om databaser (MSSQL, PostgreSQL, Mongo)
- Goda kunskaper i Docker (en plattform med öppen källkod för att utveckla och köra appar)
Vidare finns det vissa verktyg och bibliotek som en C#-utvecklare måste känna till väl:
- Visual Studio
- Visual Studio Code
- AutoMapper
- JSON.NET
- Git
- MSBuild
- Azure DevOps
- ReSharper
- Docker
- Cloud (Azure, AWS, eller Google)
”Och om C#-utvecklaren vill göra ett bra jobb måste hen också försöka använda olika mönster och hålla koll på alla uppdateringar när de släpps – särskilt för .NET Core, .NET, Docker och Azure.”
Sefa Teyek
Vad är skillnaden mellan en bra och en jättebra C#-utvecklare?
Bland de C#-utvecklare som passar för tjänsten brukar det alltid finnas någon som sticker ut ur mängden.
En viktig del är att personen skriver högkvalitativ kod och ger ett proffsigt intryck.
”En riktigt skicklig C#-utvecklare ska kunna skriva ren kod, dvs. inga dubbletter och ingen dålig kod. De måste dessutom kunna tillämpa mönster i projektet utan spaghettikod.”
Sefa Teyek
Men det finns även andra saker som får duktiga C#-utvecklare att sticka ut. Utvärderingsprocessen består av mer än bara hög kvalitet på koden. Vissa utvecklare har till exempel bättre kommunikationsförmåga. Ur en techleads perspektiv lägger Sefa till några andra väsentliga egenskaper som C#-utvecklaren måste ha:
”Mjuka färdigheter är viktigare för mig – att kunna lyssna, göra sig förstådd och dessutom förstå instruktioner snabbt. Utvecklaren bör också kunna förklara i detalj vilka delar av C# som hen behärskar. Det är viktigt att hen kan förklara sina tidigare projekt, inbegripet tekniska detaljer. Till exempel: vad använde utvecklaren i projektet, varför valde hen att använda detta, hur användes det, och liknande.”
Sefa Teyek
Frågor att ställa under intervjun
När ni ska intervjua en C#-utvecklare rekommenderar vi att ni ställer följande frågor (både enkla och mer avancerade).
1. Berätta mer om startpunkten vad gäller programsammanhang, plats och tid.
Förväntat svar: Den primära metoden för C# Windows-appen eller C#-konsolen är startpunkten. Den finns i varje körbart program. Det är där programkontrollen startar och slutar. Det kan bara finnas en startpunkt i ett C#-program.
2. Definiera C#-klasser.
Förväntat svar: Klasser används väldigt mycket inom C# eftersom det är ett objektorienterat programmeringsspråk. Klassen är ett slags grund (eller ritning) för att definiera ett programs struktur, hantering och datalagring. Metoderna och egenskaperna är de viktigaste delarna i en klass. Dessa kallas klassmedlemmar. Klassmedlemmarna kan vara private eller public. Private klassmedlemmar kan endast nås av just den klassen. Public klassmedlemmar kan nås även från andra delar av programmet.
3. Beskriv de grundläggande principerna för objektorienterad programmering.
Förväntat svar: I ett objektorienterat språk bryts ett problem ner i flera mindre objekt (entiteter). Därefter bygger man funktioner och data för entiteterna. De fyra grundläggande principerna för objektorienterad programmering är:
-
Abstraktion (när man gömmer all data som inte är relevant för ett objekt)
-
Inkapsling (när man bundlar data och metoder avsedda att fungera med specifik data från en enda entitet)
-
Arv (återanvändning av kod från andra klasser, dvs. när en subklass (child) får specifika egenskaper från en basklass (parent). De ärvda egenskaperna från basklassen är alla skyddade och public egenskaper och metoder.)
-
Polymorfism (enkelt förklarat är det en egenskap med många former. Det innebär tillgång till olika typer av objekt men genom samma gränssnitt)
4. Berätta mer om åtkomstmodifierare i C#.
Förväntat svar: Det finns fyra åtkomstmodifierare i C#. Det är nyckelord som används för att ange deklarerad åtkomst för en medlem eller en typ.
De fyra typerna är:
-
Public (metoder och attribut som blir markerade public kan nås överallt)
-
Private (endast kod inifrån själva klassen kan nå klassens metoder och attribut som är markerade privata)
-
Internal (fungerar som publikt men hindrar åtkomst om det sker från ett annat projekt eller en annan applikation)
-
Protected (skyddar alla metoder och attribut så att endast klassen och dess subklasser kan använda dem)
5. Jämför Response.Redirect och Server.Transfer.
Förväntat svar: När man vill skicka användare från en sida till en annan använder man både Response.Redirect och Server.Transfer. Med Response.Redirect når man en helt ny sida och adressfältet uppdateras. Detta går att se i webbläsarens historik. Med Server.Transfer är adressfältet oförändrat, men man kan inte ”gå tillbaka” om det behövs.
6. Beskriv filhanteringen i C#.
Förväntat svar: När man öppnar, skriver, lägger till eller läser filer kallas det för filhantering. Två vanligt förekommande typer av filhantering är att skriva och läsa. Man konverterar filens data till en bytestream med dessa två. När man sedan använder utströmmen betyder det att man skriver till en specifik fil. När man använder inströmmen läser man från en specifik fil. Man måste använda namespace System.io för att komma åt statiska metoder avsedda för filhantering.
7. Definiera LINQ.
Förväntat svar: LINQ står för Language Integrated Query, en frågesyntax i VB.NET och C#. Det är en enhetlig frågesyntax och används för att hämta data från olika format och källor. Man kan använda den integrerad i C# eller VB.NET för att undvika att databaser och språk inte matchar. Den kan även användas för att skapa ett query-gränssnitt för olika datakällor.
8. Berätta mer om nullbara typer.
Förväntat svar: När man ser en underliggande värdetyp finns det också ett odefinierat värde där. För att representera det odefinierade värdet används en typ som kan ha värdet null. Man måste använda antingen ”?”eller nyckelordet Nullable för att tilldela värdet. Om man har en VarType-variabel kan man dock inte använda nullbara typer.
9. Berätta mer om God Object (alt. God Class).
Förväntat svar: Ett så kallat God Object är ett objekt som antingen gör för mycket eller vet mer än det borde. Detta gör koden mycket svår att följa och underhålla. God Objects är till för att spåra omfattande information och effektivt bryta ner en app. En enda kodändring påverkar resten av delarna avsevärt, som en dominoeffekt. Det resulterar i en komplex röra av kod som man måste försöka underhålla. God Objects bör därför undvikas så gott det går.
10. Beskriv vad ett C# Lock Statement är.
Förväntat svar: ”Lock” i C# nyttjas för att låsa en funktion på ett nyckelord. Nyckelordet låser ett kodblock för ett givet objekt och när kodblocket är färdigexekverat lyfts låset. Om funktionen då anropas två gånger samtidigt kommer det ena anropet att pausas tills dess att det andra anropet är färdigt med kodblocket. I början av kodblocket skrivs ”Enter” och i slutet skrivs ”Exit".
11. Jämför parametrarna ”ref” och ”out”.
Förväntat svar: För att skicka argument till metoder som referenstyp används nyckelordet ”out” i C#. Detta används i allmänhet när en metod returnerar flera värden.
För att skicka argument per referens använder man nyckelordet ”ref”. Detta används också när det finns förändringar i en metod som återspeglar den specifika variabeln, men bara när kontrollen återgår till anropsmetoden endast för detta argument.
12. Berätta skillnaderna mellan ”konstanter” och ”read-only”.
Förväntat svar: Ett ”const-fält” kan bara initieras i fältets deklaration. ”Const”-variabler deklareras i metoder. Det går inte att använda ”const”-fält med static-modifierare. ”Const”-fältet representerar även en kompileringskonstant.
Ett ”read-only”-fält kan initieras antingen i deklarationen eller i en konstruktor. Man kan använda ”read-only” med en statisk modifierare, och de går att använda enbart för runtime-konstanter.
13. Förklara skillnaden mellan värdetyper och referenstyper.
Förväntat svar: Värdetyper allokeras i stacken och referenstyperna är allokerade på heapen. En värdetyp innehåller direkt sitt värde. En referenstyp innehåller endast referensen till objektets plats på den hanterade heapen.
14. Berätta lite om ”protected internal”.
Förväntat svar: Nyckelordskombinationen ”protected internal” är en åtkomstmodifierare för medlemmar. Man kan komma åt den genom vilken kodassembly som helst som deklarerar detta, eller genom den härledda klassen från en annan assembly.
15. Förklara skillnaden mellan ”interface” (gränssnitt) och ”abstrakt klass”.
Förväntat svar: En klass kan ärva från en abstrakt klass, men även från flera interface. Ett interface ärver däremot bara från ett annat interface. Dessutom deklarerar ett interface bara metoder och egenskaper, men en abstrakt klass kan ha implementerade metoder och egenskaper.
De abstrakta klasselementen kan ha åtkomstnivåer precis som den vanliga klassen, men det kan inte ett interface eftersom det inte har den funktionen.
När man lägger till den funktionen i den abstrakta klassen kan man automatiskt tillämpa metoden på alla subklasser. Men när man lägger till en metod i ett interface ska man implementera detta till varje subklass.
Den abstrakta klassen innehåller en konstruktor. Det gör inte ett interface. Ett interface är inte en klass, och den abstrakta klassen är en av klasstyperna.
Varför behöver ni anlita en C#-utvecklare?
Nedan listar vi några anledningar till varför det är ett bra val att använda C# i ert företag.
- Det är ett säkert språk. Eftersom C# är baserat på objektorienterad programmering är det garanterat säkert. Utvecklarna kan enkelt definiera strukturen och datatypen innan de tillämpar vissa funktioner på detta. Alla appar kan enklare delas upp i mindre delar eftersom det är effektivt att överföra data till objekt inom objektorienterad programmering. Dessa mindre appdelar hanteras och kombineras sedan mycket enklare. Appar som produceras med objektorienterat programmeringsspråk är läsbara och lättare att testa.
- Det erbjuder ett omfattande urval av .NET-ramverk och körtider över plattformar. C# är begränsat till Windows, men med .NET breddas användningen för fler plattformar. C#-utvecklare använder de olika typerna av runtime-miljöer från .NET, som Microsoft CLI och Mono.
En annan nämnvärd fördel är interoperabilitet, dvs. att en kod i C# enkelt interagerar med appar som utvecklare skriver i bland annat F# eller C++. Många klassbibliotek och komponenter är dessutom anpassningsbara.
- Det är lätt att komma ihåg och förstå. Syntaxen i C# gör det till ett unikt språk eftersom det är lätt att läsa och förstå. Precis som syntax för mänskliga språk gör detta C# till ett läsbart programmeringsspråk. Utvecklare gillar att arbeta med sådana språk just eftersom syntaxen gör dem mer begripliga.
- Det gör inlärning av andra språk enklare. Språken i C-familjen är sammankopplade med C# så att om en utvecklare behärskar C#, blir det också enklare att förstå och arbeta med Java, C eller C++.
- Man får bättre underhåll av prestanda. C# har en inbyggd skräpinsamling (garbage collector) som hanterar allokering och frigörande av minne för ett program och därmed förbättrar prestandan. När utvecklare kan använda automatisk minneshantering behöver de inte längre skriva ytterligare specialkommandon för att göra anspråk på oanvända objekt. De behöver dessutom inte heller längre rensa minnet.
- Detaljerad dokumentation. C# kommer med omfattande och detaljerad dokumentation, som .NET. Microsoft tillhandahåller en uppgraderad, lättsam dokumentation med de förbättringar som gjorts för utgåvorna av .NET under åren. Detta inbegriper informationsvideor, tutorials och detaljerade förklaringar och svar som gör utvecklarens jobb enklare och effektivare.
- Det är typsäkert och dynamiskt. Med C# kommer variabeln att förbli med en oförändrad typ i koden, och dess beteende kommer att vara förutsägbart. Detta resulterar i en källkod som är mycket mindre benägen för fel vid senare tillfällen. Med den dynamiska typningen i C# kan utvecklaren lätt och snabbt hitta fel som uppstår vid körning.
- Brett stöd från ett stort community. Eftersom C# är sammankopplat med .NET fördubblas gemenskapen. Detta ger både bättre support och en möjlighet att samarbeta och diskutera idéer.
Vad får ni när ni använder C# för ert företag?
När ni väl anlitar utvecklare som kommer att använda C# för ert företag kan ni förvänta er följande:
- Höghastighetsappar med öppen källkod. Tack vare alla lösningar för programunderhåll och alla verktyg som finns tillgängliga för C# kommer utvecklarna att kunna arbeta mycket bättre och få mer stöd.
- Appsäkerhet. Eftersom utvecklarna inte behöver göra någon ”typkonvertering” med C# kan de spåra data bättre och se till att inget går förlorat någonstans.
- Logiska strukturer. Med C# är strukturerna alltid logiska och välorganiserade. All information följer en ren hierarki, vilket ger ett snyggt uppbyggt dokument.
- Skalbarhet och enkel uppdatering. C# är lätt att använda och uppdatera, och dessutom skalbart.
Det är oerhört fördelaktigt att använda C#, både för utvecklare och företag. Sefa bekräftar det från sin egen erfarenhet av att använda detta språk:
”Med C# kan du förvänta dig hög säkerhet tack vare det objektorienterade programmeringsspråket och det är dessutom lätt att förstå. Det är funktionellt, körs på fler plattformar och har många användbara .NET-ramverk (inbegripet .NET Core). Visual Studio som native IDE (Integrated Development Environment) är också ett stort plus, tillsammans med hanteringen av minnesallokering och det stora communityt."
Sefa Teyek
Populära varumärken som använder C#
Många kända varumärken förlitar sig på C# i sitt arbete, till exempel
- Microsoft
- Stack Overflow
- Service Titan
- Trustpilot
- Venmo
- Alibaba Travels
- Test Gorilla
- City National Bank
- Accenture
- Deezer
Olika branscher och tillämpningar av C#
Många branscher och företag använder C# i sitt arbete, men enligt Sefa sticker några ut.
”Först och främst ser vi användningen av C# i Microsoft-produkter och SaaS-plattformar för samarbete, som t.ex. Stack Overflow. Men C# används också för omdömesplattformar, applikationer inom turismsektorn samt inom finans- och banksektorn.”
Sefa Teyek
Möjliga utmaningar när ni anlitar en C#-utvecklare
Anställningsprocesser kan alltid vara utmanande, och så är även fallet när man vill anlita nya utvecklare. Utmaningarna kan skilja sig något mellan olika branscher men de överlappar i de flesta fall, särskilt inom IT.
Inledningsvis kan man ha många arbetssökande utvecklare att välja mellan, men de flesta är förmodligen okvalificerade för tjänsten. Det stora antalet sökande kan göra det svårt att sålla mellan olika kandidater för att hitta rätt person med rätt meriter.
Även om det finns många sökande kanske bara ett fåtal är kompetenta C#-utvecklare. Det kan ta lång tid och behövas många intervjuer för att hitta de skickligaste utvecklarna. Därför bör ni vara förberedda på att det kan bli en utdragen process. En annan sak som ni bör tänka på är att ju färre välkvalificerade utvecklare det finns, desto högre är chansen att de ber om en högre lön. Sällsynt och efterfrågad kompetens går ofta hand i hand med högre lön just eftersom efterfrågan är stor, men det finns endast ett begränsat antal kompetenta utvecklare.
När det kommer till utgifter bör man absolut hålla koll på alla rekryteringskostnader. När man rekryterar med hjälp av intern personal blir processen ofta längre. En utdragen rekryterings- och intervjuprocess kostar i slutändan mer pengar, och trots det finns det ingen garanti att man hittar rätt kandidat.
Ett annat möjligt scenario är att era konkurrenter kan erbjuda mer än vad ni kan för tjänsten. Utöver en högre lön kanske de kan erbjuda fler förmåner för att locka kandidaten till deras företag. Försök att läsa på så mycket som möjligt om arbetsmarknaden och om rekrytering av C#-utvecklare. Man kan till exempel besöka professionellt inriktade plattformar och sociala medier för att upptäcka trender och läsa om andras anställningsmetoder.
Den goda nyheten är att det finns en smart lösning för alla dessa utmaningar. Lösningen är ett bemanningsföretag som kan säkerställa att ni sparar både tid och pengar, och samtidigt erbjuda kompetenta och skickliga utvecklare för är rätt för ert företag.
Sammanfattning
När ni är mer pålästa om själva anställningsprocessen kan ni förbereda er mycket bättre för eventuella utmaningar som brukar dyka upp i samband med rekrytering av C#-utvecklare. Ni har dessutom bättre koll på vad ni kan förvänta er när ni anlitar en C#-utvecklare – och vilka fördelar det kan ha för både teamet och företaget, även på lång sikt.