Jag bodde och arbetade i en liten stad i nordvästra Tyskland innan covid-pandemin slog till. Jag jobbade på en liten startup. Jag var en av 7 ingenjörer på företaget. Trots att vi är ett väldigt litet team var mina medarbetare några av de smartaste människorna jag någonsin har arbetat med. Vi byggde en inbyggd skrivbordsapplikation som används av maskiningenjörer för att designa delar. Dessa delar var sådana som gick in i bilar och flygplan och så. Det var ett 3d-modelleringsprogram (CAD) så naturligtvis, när vi anställde en ny ingenjör eller hade en praktikant, föredrog vi personer som var bra på matematik, geometri, skriva lågnivå högpresterande kod etc. När vi intervjuade kandidater fick jag ansvaret för att göra den tekniska intervjun. Jag hade förberett några programmeringsuppgifter som speglade de färdigheter vi vill ha hos en kandidat. Jag skulle be kandidaten att lösa problemet och prata igenom sin tankeprocess. Även om de inte är klara med lösningen på 45 minuter, var det ett användbart sätt att lära sig vad de vet och hur de tänker. Andra medlemmar i mitt team intervjuade kandidaterna för andra kriterier som personlighet etc. Detta hade fungerat riktigt bra och vi hade anställt några riktigt duktiga och motiverade ingenjörer. Vi var alla ganska bra på det vi gjorde och vi respekterade varandra.
I början av 2020 fick vi en sistaårsstudent från det lokala universitetet att kontakta oss och bad om en praktikplats. Jag tog en välbehövlig semester och åkte till Berlin ett par veckor. Så jag var inte i närheten för att göra den tekniska intervjun. Min chef och resten av teamet var superimponerade av studenten under intervjun, och hans CV var exceptionellt. Vi hade aldrig haft en praktikant tidigare. Min chef tyckte att en teknisk intervju kunde vara onödig för en praktikant. Så han bestämde sig för att låta honom börja arbeta med oss utan en teknisk intervju. Jag kom tillbaka från min semester och fick veta om den nya praktikanten som skulle börja veckan efter. Jag var tvungen att övervaka den här praktikantens arbete. I grund och botten, se till att han förstod vad som måste göras, svara på eventuella frågor, avblockera honom på alla möjliga sätt. Vi hade redan lagt upp de problem som vi ville att praktikanten skulle arbeta med. Från och med nu kommer jag att referera till praktikanten som Stefan. Vid den här tiden pratades det mycket om att Corona-viruset spred sig i Tyskland. Det var överallt i nyheterna. Vi var ett litet team och vi var vana vid att arbeta på nära håll, ställa frågor till varandra, brainstorma på vita tavlor etc. Men tyvärr, exakt en dag innan Stefan kom till oss, gick Tyskland i full lockdown. Vi började alla jobba på distans hemifrån. Vi kämpade med distansarbete under de första veckorna. Eftersom jag är handledare för Stefans projekt, sa jag till honom att han kan nå mig med allt han behöver för att komma igång. Om jag var borta eller upptagen hoppade andra teammedlemmar gärna in och hjälpte Stefan.
Vår kodbas var en blandning av C# och C++. Alla våra användare var på Windows, så vi skrev frontend och allt annat som inte var prestandakritiskt i C#. Alla våra numeriska algoritmer, 3d-rendering och allt som var prestandakritiskt skrevs i C++. De flesta av våra teammedlemmar var skickliga i båda språken, några specialiserade på det ena eller det andra. Stefan påstod sig vara mycket skicklig i både C# och C++. På hans första dag var jag på jour med Stefan i flera timmar och förklarade vår kodbas för honom, och fixade allt på sin lokala maskin så att han kan komma igång. Stefan var lite nervös och sa att det var ett tag sedan han skrev C++ eller använde Windows. Stefan körde dagligen en Linux-maskin. Han verkade kämpa för att skriva C++. Jag tänkte att han var lite bortskämd med att behöva arbeta i en ny miljö, ny kodbas och bestämde mig för att hjälpa honom tills han kommer igång. Så vi parar programmerade för de kommande timmarna. Han behövde mig för att hjälpa honom att skriva kod en rad i taget. Han fortsatte att göra dumma misstag i sin kod och behövde att jag skulle rätta dem och visa honom det rätta sättet att göra saker. Jag tyckte det här var lite konstigt men bestämde mig för att ge honom en chans ändå. Jag hoppades att Stefan vid slutet av vårt samtal visste tillräckligt för att fortsätta arbeta på egen hand.
Till min glädje hörde jag inte från Stefan dagen efter. Jag skickade ett meddelande till honom och han sa att han gör framsteg och att han inte behövde något från mig. Det blev jag glad över att höra. Jag kunde fokusera på mitt eget arbete. Men dagen efter nådde Stefan ut till mig igen och bad om hjälp. För att bidra till vår ansökan var Stefan tvungen att skriva både C# och C++. Han var tvungen att skriva den numeriska delen av algoritmen i C++ och koppla upp den med fronten och göra några andra saker i C#. När Stefan kontaktade mig dag 3 hade han inte gjort några framsteg med sin C++-kod. Det var mest där vi slutade i slutet av dag 1. Men han gjorde stora framsteg med sin C#-kod. Han attackerade uppgiften från båda sidor samtidigt. Stefan visade mig stolt sakerna han skrev i C# dag 2 utan min hjälp. Jag läste igenom koden och blev imponerad av den. Koden var av riktigt hög kvalitet. Det var kortfattat, elegant och effektivt. Stefan var faktiskt riktigt duktig tyckte jag. Kanske var han verkligen lite rostig med C++-syntax och språkdetaljer, men hans C#-kod visade att han generellt sett var en bra programmerare. Jag tänkte att detta var ett gott tecken och att han sannolikt kommer att förbättra sin C++-kod väldigt snabbt. Detta uppmuntrade mig att hjälpa honom med hans C++. Jag tillbringade återigen flera timmar på dag 3 med att para ihop med Stefan och hjälpa honom med hans C++-kod. Denna cykel upprepades en gång till. Stefan gick iväg på egen hand och skrev C#-kod dag 4, och kom tillbaka till mig och bad om hjälp med C++ på dag 5. Vid det här laget började jag bli misstänksam. Nivån på vilken han behövde hjälp med sin C++-kod stämde inte överens med den högkvalitativa C#-koden han skrev. I C++ verkade han kämpa med grundläggande begrepp, hur datorer fungerar, hur minne fungerar etc. Uppenbarligen är C# ett skräpsamlat språk och du behöver inte kunna minneshantering, men något kändes inte rätt och jag kunde inte riktigt sätta fingret på det.
En hel vecka hade gått. Som ett team som var vana vid att arbeta på kontoret hatade vi alla att jobba på distans. Vid den här tiden under inlåsningen fick vi samlas i grupper om 7 eller färre personer. En arbetskamrat, låt oss kalla honom David, bjöd in mig och ett par andra kollegor till hans hus för en grillfest under helgen. Han bodde inte så långt ifrån mig och vi hade gjort sånt här förut. Vädret var fint, vi hängde på Davids bakgård med hans fru och 3-åriga dotter. Vi grillade och åt kött och grönsaker, tog några öl och stämningen var väldigt mild. Davids 3-åriga dotter serverade oss smuts i små plastmuggar och låtsades att det var glass. Det behöver inte sägas att jag föll inte för det. David tog upp ämnet Stefan och samtalet gick ungefär så här:
David: Hur går det med Stefan? Han hade nått ut till mig och bett om hjälp några gånger under den senaste veckan.
Jag: Åh, ja, jag hjälpte honom också ganska mycket. Han har precis börjat så jag hade inget emot att hjälpa honom. Vad tycker du om honom?
David: Ja. Jag var ganska imponerad av hans arbete. Han skriver kod av riktigt hög kvalitet och verkar veta vad han gör i C++, men kämpar för att skriva bra C#-kod. Jag har hjälpt honom att skriva C#-kod.
Jag frågade David: "Vänta, menar du det tvärtom? För jag tycker att hans C# är väldigt bra men han suger på C++." Så fort jag avslutat meningen förstod vi båda vad som pågick. Jag hade skedmatat Stefan C++-kod, som han visade David som sin egen. Och varannan dag matade David Stefan C#-kod med sked som han visade mig som sin egen. Jag blev imponerad av kvaliteten på Davids C#-kod, och David var imponerad av min C++-kod. Å ena sidan hade David och jag det här vackra brosögonblicket om hur vi beundrade varandras kod. Men det ögonblicket överskuggades av det faktum att vi båda blev lurade av Stefan. Det här var direkt ur en berättelse, men hände i verkligheten. Det var som historien om den där killen som inte visste hur man spelar schack, men som lyckas dra partier med två stormästare genom att spela dem mot varandra. Stefan gjorde det här i verkligheten. Stefan visste inte ett skit. Vi hatade oss själva för att vi tog en vecka att inse det. För att vara rättvis, hade vi varit på kontoret hade det här tricket inte fungerat. Vi föll för detta på grund av hur dåliga vi var på att kommunicera när vi arbetade från våra hem.
När vi kom tillbaka till jobbet nästa måndag sa jag till Stefan att inte besvära David och bara be mig om hjälp. Det blev snart riktigt uppenbart att Stefan inte kunde så mycket om programmering, matematik eller geometri. Det var tydligt att hans CV var full av lögner. Han råkar bara vara en väldigt smidig pratare och har en talang att låta som vet mycket. Den färdigheten gav honom jobbet och lurade oss i en hel vecka. Ju mer jag arbetade med Stefan, desto mer jag granskade hans kod, desto mer inkompetent blev han. Jag såg äntligen vem Stefan verkligen var, hans sanna programmeringskunskaper. Jag är inte säker på om inkompetent är rätt ord. Stefan skrev dålig kod, men den var dålig på ett konstigt sätt. När jag frågade honom om det gav han konstiga svar. Här är ett exempel som verkligen hände. Jag sa en gång till Stefan något i stil med: "... Så du vill få det här heltalsvärdet, och om det värdet ligger mellan den nedre gränsen och den övre gränsen, borde du kalla den här andra funktionen ... Är det klart?". Stefan försäkrade mig att han förstod vad som måste göras. När jag tittade på hans PR dagen efter såg jag något sånt här:
int value; // Assigned from somewhere. for (int i = lower_bound; i <= upper_bound; ++i) { if (value == i) { do_stuff(...); } }
Jag blev blåst. Det här var inte bara dålig kod, det här var något annat. Jag minns att jag var ung och var dålig på att koda, men min dåliga kod var aldrig så här. Detta var ytterligare en dimension av konstigheter. Även som nybörjare som programmerare skulle jag aldrig ha tänkt på att skriva kod så här. Valet att loopa över alla heltal mellan gränserna var märkligt nog, men det som verkligen fick mig att göra var det faktum att även när han hittar en matchning och anropar funktionen, bryter han sig aldrig ur loopen. Han fortsätter att kontrollera de återstående värdena. Hur? Jag frågade Stefan varför han inte helt enkelt gjort:
if (value <= upper_bound && value >= lower_bound) { do_stuff(...); }
Efter att ha fått mitt förslag att använda enkla ojämlikheter istället för att jämföra med varje heltal i ett intervall som kan vara 10- eller till och med 100-tals tusentals långa, berömde Stefan mig för att jag kom på en så bra idé och drev den nya förändringen till PR. Varje gång Stefan kämpade för att göra något, gav vi honom något lättare att göra. Överraskande nog skulle han misslyckas med det också. Det var en kort praktik, så vi tjatade inte så mycket med Stefan. Efter en tid slutade han med att göra icke-programmeringsuppgifter, hantera saker i kalkylblad och andra ad hoc-uppgifter som behövde göras. De ursprungliga projekten han satte sig för att arbeta med visade sig vara långt bortom hans kompetens. På något sätt hade Stefan slutfört sin 3 månader långa deltidsbetalda praktik. Han ville fortsätta jobba för oss under sommaren. Han hade lagt fram ett nytt forskningsprojekt som skulle vara användbart för vårt företag. När min chef frågade mig om jag ville fortsätta jobba med Stefan i ytterligare 3 månader sa jag NEJ. Jag påminde min chef om hur hemskt hans arbete de senaste tre månaderna hade varit. Men min chef var optimist. Han trodde på människor. Han bad mig tänka på mig själv när jag var Stefans ålder, på college och lära mig saker för första gången.
Min chef bad mig tänka om och bad mig överväga att ge Stefan en ny chans. I ärlighetens namn, när jag var i Stefans ålder, skrev jag 2D-spel i JavaScript med hjälp av den nya fangles (på den tiden) HTML5-duken. Stefan var verkligen inkompetent, även efter att ha anpassat sig efter sin ålder och erfarenhet. Men mycket värre än hans inkompetens var hans oärlighet. Jag ville i alla fall inte ta lätt på det här beslutet. Å ena sidan kanske Stefan är kapabel att lära sig, men å andra sidan är han oärlig. Jag läste igenom förslaget han skrev ner för det nya forskningsprojektet. Idén var väldigt ny, och om den fungerar skulle den vara mycket användbar för vårt företag. Det var verkligen imponerande. Men så fick jag ett ögonblick av klarhet där min cynism tog över den optimism som min chef försökte ingjuta i mig. Jag blev fixerad vid ett ord från Stefans forskningsförslag: '2-grenrör'.
Efter att ha arbetat med honom visste jag hur inkompetent Stefan verkligen var, och det finns inget jävla sätt att han visste vad en 2-grenare betydde. Jag kopierade inklistrade Stefans forskningsförslag till en plagiatkontroll på nätet. Det var år sedan och jag glömde vilken det var. Jag sökte bara på google och använde ett av de bästa resultaten. Plagiatgranskaren hittade en 97% matchning med en forskningsartikel och gav en länk till originalet. Stefan hade kopierat det hela. Nästa morgon pratade jag med Stefan om hans forskningsförslag. Så fort han började prata var det tydligt att han inte förstod vad han pratade om, och det hela var bara en ordsallad. Han var en charlatan igen. Jag lät min chef veta och detta bröt till slut hans tilltro till Stefan. Stefan jobbade inte för oss igen.
Det enda Stefan var bra på var att sälja sig själv, och att verka som om han visste vad han pratade om. Jag förstår att det finns yrken där dessa färdigheter kan ta dig ganska långt, t.ex. försäljning. Men jag tyckte att det var konstigt för någon att försöka skita sig igenom en teknisk karriär som mjukvaruutveckling.