Hur man får ut det mesta av utbildningen i datavetenskap

De flesta moderna programmerare fick sin utbildning vid universitet. Med tiden kommer detta att förändras, men nu är det så att bra personal i IT-företag fortfarande kommer från universiteten. I det här inlägget berättar Stanislav Protasov, Acronis Director of University Relations, om sin vision om funktionerna i universitetsutbildning för framtida programmerare. Lärare, elever och de som anställer dem kan till och med hitta några användbara tips under snittet.

Hur man får ut det mesta av utbildningen i datavetenskap

De senaste 10 åren har jag undervisat i matematik, algoritmer, programmeringsspråk och maskininlärning vid olika universitet. Idag är jag, utöver min tjänst på Acronis, även biträdande chef för avdelningen för teoretisk och tillämpad datavetenskap vid MIPT. Från min erfarenhet av att arbeta på bra ryska (och inte bara) universitet, har jag gjort några observationer om förberedelser av studenter inom datordiscipliner.

30 sekunders regeln fungerar inte längre

Jag är säker på att du har stött på 30 sekunders regeln, som säger att en programmerare ska förstå syftet med en funktion efter en snabb titt på dess kod. Det uppfanns för länge sedan, och sedan dess har många operativsystem, språk, hårdvara och algoritmer dykt upp. Jag har skrivit kod i 12 år, men relativt nyligen såg jag källkoden för en produkt, som vid första anblicken verkade som magiska besvärjelser för mig. Idag, om du inte är fördjupad i ämnesområdet, slutar 30 sekunders regeln att fungera. Annars räcker inte bara 30, utan även 300 sekunder för att du ska ta reda på vad som är vad.

Om du till exempel vill skriva drivrutiner måste du dyka in i det här området och läsa tusentals rader med specifik kod. Med detta tillvägagångssätt för att studera ett ämne, utvecklar en specialist en "känsla av flöde." Som i rap, när känslan av ett bra rim och den rätta rytmen dyker upp utan särskild rationalisering. Likaså kan en välutbildad programmerare lätt känna igen ineffektiv eller helt enkelt dålig kod utan att gå in i en detaljerad studie av var en stilöverträdelse inträffade eller ett suboptimalt tillvägagångssätt användes (men denna känsla kan vara mycket svår att förklara).

Specialisering och växande komplexitet leder till att en kandidatutbildning inte längre ger möjlighet att studera alla områden tillräckligt fördjupat. Men det är just på denna utbildningsnivå som man behöver skaffa sig en syn. Efteråt, i forskarskolan eller på jobbet, kommer du att behöva ägna lite tid åt att fördjupa dig i ämnesområdets problem och detaljer, studera slang, programmeringsspråk och kollegors kod, läsa artiklar och böcker. Det verkar för mig att detta är det enda sättet att med hjälp av universitetet "pumpa upp ribban" för framtiden T-formade specialister.

Vilket programmeringsspråk är bäst att lära ut på universitetet?

Hur man får ut det mesta av utbildningen i datavetenskap
Till min glädje har universitetslärare redan gett upp sökandet efter rätt svar på frågan: "Vilket är det bästa språket att programmera i?" Debatten om vilket som är bättre - C# eller Java, Delphi eller C++ - har nästan försvunnit. Framväxten av många nya programmeringsspråk och ackumuleringen av pedagogisk erfarenhet har lett till en etablerad förståelse i den akademiska miljön: varje språk har sin egen nisch.

Problemet med att undervisa med ett eller annat programmeringsspråk har slutat att prioriteras. Det spelar ingen roll vilket språk kursen undervisas på. Det viktigaste är tillräcklig uttrycksförmåga hos språket. Bok "Konsten att programmera flera processorer” är en bra illustration av denna observation. I denna numera klassiska utgåva presenteras alla exempel i Java – ett språk utan pekare, men med Garbage Collector. Knappast någon skulle hävda att Java är långt ifrån det optimala valet för att skriva högpresterande parallellkod. Men språket var lämpligt för att förklara de begrepp som presenteras i boken. Ett annat exempel - klassisk maskininlärningskurs Andrew Nna, undervisade i Matlab i Octave-miljön. Idag skulle man kunna välja ett annat programmeringsspråk, men vilken skillnad gör det egentligen om idéerna och tillvägagångssätten är viktiga?

Mer praktiskt och närmare verkligheten

Samtidigt har det de senaste åren blivit många fler utövare vid universiteten. Om tidigare ryska universitetsprogram aktivt kritiserades för att vara skilda från verkligheten, kan man idag inte säga detsamma om IT-utbildning. För 10 år sedan fanns det nästan inga lärare på universiteten med riktig branscherfarenhet. Nuförtiden, allt oftare, undervisas klasser på en specialiserad avdelning inte av heltidsanställda lärare i datavetenskap, utan av praktiserande IT-specialister som undervisar endast 1-2 kurser på fritiden från sitt huvudsakliga arbete. Detta tillvägagångssätt motiverar sig ur synvinkeln av högkvalitativ personalutbildning, uppdatering av kurser och naturligtvis sökandet efter potentiella medarbetare i företaget. Jag tror inte att jag kommer att avslöja hemligheten genom att säga att vi stödjer en grundläggande avdelning på MIPT och bygger relationer med andra universitet, inklusive för att förbereda studenter som skulle kunna börja sina karriärer på Acronis.

Matematiker eller programmerare?

Hur man får ut det mesta av utbildningen i datavetenskap
Heliga krig, som tidigare kretsade kring programmeringsspråk, har rört sig i en filosofisk riktning. Nu bråkar de så kallade "programmerarna" och "matematikerna" med varandra. I princip skulle dessa skolor kunna delas upp i två utbildningsprogram, men branschen är fortfarande dålig på att separera sådana finesser och från universitet till universitet har vi liknande utbildningar med lite olika inriktning. Det innebär att både eleven och företaget som han ska fortsätta arbeta i kommer att behöva komplettera kunskapspusslet med de bitar som saknas.

Framväxten av utövare på universitet som skriver industriell kod på olika språk ger eleverna bättre utvecklingsförmåga. Genom att vara väl förtrogen med implementeringar av standardbibliotek, ramverk och programmeringstekniker, ingjuter praktiserande programmerare en önskan att skriva bra kod, att göra det snabbt och effektivt.

Denna användbara färdighet leder dock ibland till uppkomsten av de som gillar att uppfinna hjulet på nytt. Programmeringsstudenter tänker så här: "Ska jag skriva ytterligare 200 rader bra kod som kommer att lösa problemet direkt?"

Lärare som har fått en klassisk matematisk utbildning (till exempel från Matematiska fakulteten eller Tillämpad Matematik) arbetar ofta i en pseudovetenskaplig miljö, eller inom området modellering och dataanalys. "Matematiker" ser olika problem inom området datavetenskap. De arbetar i första hand inte med kod, utan med algoritmer, satser och formella modeller. En viktig fördel med det matematiska förhållningssättet är en tydlig grundläggande förståelse för vad som kan och inte kan lösas. Och hur man löser det.

Följaktligen talar matematiklärare om programmering med en partiskhet mot teori. Elever som kommer från ”matematisk bakgrund” kommer ofta på genomtänkta och teoretiskt överlägsna lösningar, men oftast suboptimala ur språklig synvinkel och ofta helt enkelt slarvigt skrivna. En sådan elev tror att hans främsta mål är att visa förmåga att lösa sådana problem i princip. Men genomförandet kan vara halt.

Barn som fostrats upp som programmerare i skolan eller under sina första år har med sig en ”mycket vacker cykel”, som dock vanligtvis inte fungerar särskilt effektivt asymptotiskt. Tvärtom ger de sig inte uppgiften att djupt teoretisera och vända sig till läroböcker på jakt efter optimala lösningar, utan föredrar vacker kod.

På olika universitet brukar jag under studentintervjuer se vilken ”skola” som ligger till grund för hans utbildning. Och jag har nästan aldrig stött på en perfekt balans i grundutbildningen. Som barn kunde man i min stad förbereda sig för matte-olympiader, men det fanns inga programmeringsklubbar. Nu, på klubbar, lär sig barn att programmera i "fashionabla" Go och Python. Därför finns det skillnader i tillvägagångssätt även på nivån för antagning till universitet. Jag tror att det är viktigt att behålla båda kompetenserna på ett universitet, annars kommer antingen en specialist med otillräcklig teoretisk grund, eller en person som inte har lärt sig och inte vill skriva bra kod, att jobba på företaget.

Hur man "pumpar upp ribban" för framtiden T-formade specialister?

Hur man får ut det mesta av utbildningen i datavetenskap
Det är klart att under sådana förhållanden väljer eleven helt enkelt det han gillar bäst. Läraren förmedlar helt enkelt den synvinkel som ligger honom närmare. Men alla kommer att tjäna på om koden är vackert skriven, och ur algoritmens synvinkel är allt tydligt, rimligt och effektivt.

  • IT-horisonter. En kandidatexamen i datavetenskap är en färdig specialist med utvecklad teknisk syn som förmodligen har valt sin profil. Men i junioråret vet vi inte vad han eller hon kommer att göra. Han kan gå in på vetenskap eller analys, eller tvärtom kan han skriva en enorm mängd kod varje dag. Därför behöver eleven visas alla aspekter av att arbeta inom IT-området och introduceras till alla verktyg. Helst ska lärare från teoretiska kurser visa ett samband med praktiken (och vice versa).
  • Tillväxtpunkt. Det ligger i elevens eget intresse att inte tillåta sig att gå till ytterligheter. Att förstå om du är en "matematiker" eller en "programmerare" är inte svårt. Det räcker med att lyssna på den första impulsen när du löser ett problem: vad vill du göra - titta i läroboken på jakt efter det optimala tillvägagångssättet eller skriv ett par funktioner som definitivt kommer att vara användbara senare? Baserat på detta kan du bygga ytterligare en kompletterande bana för ditt lärande.
  • Alternativa kunskapskällor. Det händer att programmet är välbalanserat, men "Systemprogrammering" och "Algorithms" lärs ut av helt olika människor, och vissa elever är närmare den första läraren och andra - till den andra. Men även om du inte gillar professorn, är detta inte en anledning att försumma vissa ämnen till förmån för andra. Kandidater är själva intresserade av att hitta viljan att arbeta med kunskapskällor och litar inte i något fall på radikala åsikter som "matematiken är vetenskapernas drottning, det viktigaste är att känna till algoritmerna" eller "bra kod kompenserar för allt annat."

Du kan fördjupa dina kunskaper i teorin genom att vända dig till specialiserad litteratur och onlinekurser. Du kan förbättra dina kunskaper i programmeringsspråk på Coursera, Udacity eller Stepik, där många olika kurser presenteras. Studenter börjar också ofta titta på hårda språkkurser om de känner att algoritmläraren kan matematik väl, men inte kan svara på komplexa implementeringsfrågor. Alla kommer inte att hålla med mig, men i min praktik har det visat sig väl specialisering i C++ från Yandex, där fler och mer komplexa egenskaper hos språket analyseras sekventiellt. Välj i allmänhet en kurs med höga betyg från välrenommerade företag eller universitet.

Mjuka färdigheter

Hur man får ut det mesta av utbildningen i datavetenskap
När de kommer från universitet till arbete i vilket företag som helst, från en startup till ett stort företag, finner studenter från till och med toppuniversitet att de är dåligt anpassade till den verkliga arbetsmiljön. Faktum är att universitet idag "barnvaktar" studenter mycket. Även efter att ha missat många lektioner, inte förberett sig för prov och prov i tid, sovit för mycket eller kommit för sent till ett prov, kan alla klara och göra om det igen - och i slutändan ändå få ett diplom.

Men idag finns alla förutsättningar för att eleverna ska vara förberedda för vuxenliv och självständig yrkesverksamhet. De måste inte bara programmera, utan också kommunicera. Och detta måste också läras ut. Universiteten har olika format för att utveckla dessa färdigheter, men tyvärr får de ofta inte tillräckligt med uppmärksamhet. Däremot har vi många möjligheter att skaffa oss effektiva lagarbetsförmåga.

  • Skriftlig affärskommunikation. Tyvärr har de flesta utexaminerade som lämnar universitetet ingen aning om korrespondensetikett. Det specifika med kommunikation i snabbmeddelanden är utbyte av meddelanden natt och dag och användningen av konversationsstil och informella ordförråd. Däremot skulle det vara möjligt att träna skriftligt tal när studenten kommunicerar med institutionen och universitetet.

    I praktiken ställs chefer ofta inför behovet av att bryta ner ett stort projekt i små uppgifter. För att göra detta måste du tydligt beskriva varje uppgift och dess komponenter så att juniorutvecklare förstår vad som krävs av dem. En dåligt definierad uppgift leder ofta till att något måste göras om, varför erfarenhet av skriftlig kommunikation hjälper akademiker att arbeta i fördelade team.

  • Skriftlig presentation av resultatet av ditt arbete. För att presentera sina utbildningsprojekt kan seniorstudenter skriva inlägg om Habr, vetenskapliga artiklar och även bara rapporter. Det finns många möjligheter till detta - kursarbetet börjar under andra året vid vissa universitet. Du kan också använda uppsatser som en form av kontroll – de ligger oftast närmare en journalistisk artikel. Detta tillvägagångssätt har redan implementerats vid National Research University Higher School of Economics.

    Om ett företag tillämpar ett flexibelt förhållningssätt till utveckling måste det presentera resultatet av sitt arbete i mindre portioner, men oftare. För att göra detta är det viktigt att kortfattat kunna förmedla resultaten av en specialists eller hela teamets arbete. Dessutom genomför många företag idag "recensioner" - årliga eller halvårsvis. Medarbetarna diskuterar resultat och arbetsutsikter. Framgångsrik granskning är den främsta orsaken till karriärtillväxt, bonusar, till exempel i Microsoft, Acronis eller Yandex. Ja, du kan programmera bra, men "att sitta i hörnet" kommer även en cool specialist alltid att förlora mot någon som vet hur man presenterar sin framgång bra.

  • Akademiskt skrivande. Akademiskt skrivande förtjänar särskilt omnämnande. Det är användbart för eleverna att bekanta sig med reglerna för att skriva vetenskapliga texter, använda argument, söka information i olika källor och formatera referenser till dessa källor. Det är lämpligt att göra detta på engelska, eftersom det finns många fler bra texter i det internationella akademiska samfundet, och för olika discipliner finns det redan etablerade mallar för att presentera vetenskapliga resultat. Naturligtvis behövs akademiska skrivkunskaper även när man utarbetar ryskspråkiga publikationer, men det finns mycket färre exempel på bra moderna artiklar på engelska. Dessa färdigheter kan förvärvas genom en lämplig kurs, som nu ingår i många utbildningsprogram.
  • Leda möten. De flesta elever vet inte hur man förbereder sig för möten, tar protokoll och bearbetar data. Men om vi utvecklar denna färdighet på college, till exempel genom att delta i teamprojekt, kan vi undvika att slösa tid på arbetsplatsen. Detta kräver handledning av studenters projektarbete för att lära dem hur man effektivt genomför möten. I praktiken kostar detta varje företag mycket pengar - trots allt, om flera personer som får en hög lön spenderar en timmes arbetstid på ett rally, vill man att det ska få en motsvarande avkastning på det.
  • Tala inför publik. Många studenter står inför behovet av att bara tala offentligt när de försvarar sin avhandling. Och alla är inte redo för detta. Jag har sett många elever som:
    • stå med ryggen mot publiken,
    • svajande, försöker introducera kommissionen till transen,
    • bryta pennor, pennor och pekare,
    • gå i cirklar
    • titta på golvet.

    Detta är normalt när en person uppträder för första gången. Men du måste börja arbeta med denna stress tidigare - genom att försvara dina kurser i en vänlig atmosfär, bland dina klasskamrater.

    Dessutom är standardpraxis i företag att ge en anställd möjlighet att föreslå en idé och få finansiering, en position eller ett dedikerat projekt för den. Men om du tänker efter så är detta samma skydd av kurser, bara på en högre nivå. Varför inte öva på sådana användbara karriärfärdigheter medan du studerar?

Vad missade jag?

En av anledningarna till att skriva detta inlägg var artikeln, publiceras på Tyumen State Universitys webbplats. Författaren till artikeln fokuserar bara på bristerna hos ryska elever som uppmärksammats av utländska lärare. Utövandet av min undervisning vid olika universitet tyder på att rysk skola och högre utbildning ger en bra grund. Ryska elever är kunniga i matematik och algoritmer, och det är lättare att bygga professionell kommunikation med dem.

När det gäller utländska studenter, tvärtom, kan förväntningarna på en rysk lärare ibland vara för höga. Till exempel, på nivån för grundläggande utbildning i termer av matematik, liknar de indiska eleverna jag träffade ryska. Men ibland saknar de specialiserade kunskaper när de tar examen från sina grundutbildningar. Bra europeiska elever har sannolikt mindre stark matematikbakgrund på skolnivå.

Och om du studerar eller arbetar på ett universitet kan du nu arbeta med kommunikationsförmåga (din egen eller dina studenters), utöka din grundläggande bas och träna på programmering. För detta ändamål ger det ryska utbildningssystemet alla möjligheter - du behöver bara använda dem korrekt.

Jag blir glad om du i kommentarerna till inlägget delar dina länkar till kurser och metoder som hjälper till att jämna ut balansen i utbildningen, såväl som andra sätt att förbättra mjuka färdigheter när du studerar på ett universitet.

Källa: will.com

Lägg en kommentar