Hvordan man maksimerer Computer Science-uddannelsen

De fleste moderne programmører har en universitetsuddannelse. Over tid vil dette ændre sig, men i øjeblikket er det sådan, at dygtige folk i IT-virksomheder stadig kommer fra universiteter. I dette indlæg fortæller Stanislav Protasov, direktør for Acronis' universitetsrelationer, om sine synspunkter på særegenhederne ved universitetsuddannelse af fremtidige programmører. Undervisere, studerende og dem, der ansætter dem, kan endda finde et par nyttige råd under kat.

Hvordan man maksimerer Computer Science-uddannelsen

I de sidste 10 år har jeg undervist i matematik, algoritmer, programmeringssprog og maskinlæring på forskellige universiteter. I dag er jeg, udover min stilling i Acronis, også næstformand for afdelingen for teoretisk og anvendt datalogi på MIPT. Fra min erfaring med at arbejde på gode russiske (og ikke kun) universiteter har jeg gjort nogle observationer om forberedelsen af studerende i computerfag.

Reglen om 30 sekunder fungerer ikke længere

Jeg er sikker på, at du har hørt om reglen om 30 sekunder, som siger, at en programmør skal kunne forstå formålet med en funktion efter et hurtigt kig på dens kode. Den blev opfundet for længe siden, og siden da er der kommet mange operativsystemer, sprog, hardware og algoritmer. Jeg har skrevet kode i 12 år, men for nylig så jeg kildekoden til et produkt, der ved første øjekast så ud som magiske formularer. I dag, hvis du ikke er dybt inde i området, fungerer reglen om 30 sekunder ikke længere. Ellers vil du ikke have nok tid, ikke blot 30 men også 300 sekunder, til at finde ud af, hvad der foregår.

For eksempel, hvis du ønsker at skrive drivere, skal du dykke ned i dette felt og læse tusindvis af linjer af specifik kode. Med en sådan tilgang til studiet af emnet får specialisten en 'flow-følelse'. Ligesom i rap, hvor følelsen af god rim og det rette tempo dukker op uden særlig rationalisering. På samme måde kan en velforberedt programmør nemt genkende ineffektiv eller simpelthen dårlig kode uden at skulle dykke ned i detaljerne omkring, hvor stilen blev brudt, eller hvor der blev brugt en suboptimal tilgang (men at forklare denne følelse kan ofte være ret svært).

Specialisering og stigende kompleksitet gør, at en bacheloruddannelse ikke længere giver mulighed for at studere alle retninger dybt nok. Men netop på dette uddannelsesniveau skal man opnå et bredt udsyn. Derefter, i kandidatuddannelsen eller på jobbet, skal man bruge tid på at dykke ned i problematikken og specialiseringsområdet, lære slang, programmeringsspråk og kollegers kode, læse artikler og bøger. Jeg mener, at det kun er sådan, at man kan 'træne stangen' til fremtiden med hjælp fra universitetet. T-formede specialister.

Hvilket programmeringssprog er bedst at undervise i på universitetet?

Hvordan man maksimerer Computer Science-uddannelsen
Til min glæde har universitetslærere allerede givet op på at finde det rigtige svar på spørgsmålet: 'Hvad er bedst at programmere med?'. Debatterne om, hvad der er bedre — C# eller Java, Delphi eller C++ — er næsten forsvundet. Fremkomsten af mange nye programmeringssprog og akkumulation af pædagogisk erfaring har ført til, at der i den akademiske verden er en forståelse af: hver sprog har sit eget niche.

Problemet med undervisning ved hjælp af et bestemt programmeringssprog er ikke længere en hovedprioritet. Det er ligegyldigt, hvilket sprog kurset undervises i. Det vigtigste er sprogets tilstrækkelige udtryksfuldhed. Bogen 'The Art of Multiprocessor Programming' er en god illustration af denne observation. I denne allerede klassiske udgivelse er alle eksempler givet på Java — et sprog uden pegere, men med Garbage Collector. Det er næppe nogen, der vil argumentere for, at Java er det optimale valg til at skrive højtydende parallel kode. Men til forklaring af de begreber, der er præsenteret i bogen, viste sproget sig at være passende. Et andet eksempel er den klassiske kursus i maskinlæring af Andrew Ng, undervist på Matlab-sproget i Octave-miljøet. I dag kunne man have valgt et andet programmeringssprog, men hvad betyder det i bund og grund, hvis ideerne og tilgange er vigtige?

Det er mere praktisk og nærmere virkeligheden.

Samtidig er der i de senere år blevet langt flere praktikere på universiteterne. Mens de russiske universitetsprogrammer tidligere ofte blev kritiseret for at være adskilt fra virkeligheden, kan man i dag ikke længere sige det samme om IT-uddannelsen. For 10 år siden var der næsten ingen undervisere med reel erhvervserfaring inden for branchen. Nu undervises der oftere på de relevante fag af praktiserende IT-specialister, der kun underviser 1-2 kurser i deres fritid. Denne tilgang viser sig effektiv i forhold til kvalitetsforberedelse af medarbejdere, opdatering af kurser, og naturligvis rekruttering af potentielle ansatte til virksomhederne. Jeg tror ikke, det er en hemmelighed, når jeg siger, at vi støtter den grundlæggende afdeling på MFTI og opbygger relationer med andre universiteter med det formål at forberede studerende, der kan starte deres karrierer hos Acronis.

Matematiker eller programmør?

Hvordan man maksimerer Computer Science-uddannelsen
De tidligere stridigheder om programmeringssprog er nu gået over i et filosofisk spor. Nu diskuterer de hypotetiske “programmører” og “matematikerne” indbyrdes. Disse skoler kunne principielt opdeles i to uddannelsesprogrammer, men branchen adskiller stadig ikke disse nuancer godt, og fra universitet til universitet har vi en lignende uddannelse med lidt forskellige fokus. Det betyder, at både studerende og den virksomhed, de senere skal arbejde i, bliver nødt til at supplere puslespillet med de manglende brikker af viden.

Fremkomsten af praktikere på universiteterne, som skriver industriel kode i forskellige sprog, giver studerende en bedre udviklingskompetence. Ved at være godt bekendt med implementeringer af standardbiblioteker, rammer og programmeringsmetoder, opdrager praktiserende programmører i studerende en stræben efter at skrive god kode hurtigt og effektivt.

Denne nyttige færdighed fører dog nogle gange til, at der opstår entusiaster for at opfinde cyklen på ny. Studerende-programmører tænker sådan: “Hvad koster det mig at skrive yderligere 200 linjer god kode, der direkte løser den stillede opgave?”.

Lærere med en klassisk matematisk uddannelse (f.eks. matematik eller anvendt matematik) arbejder ofte i et videnskabeligt miljø eller inden for data modellering og analyse. "Matematikere" ser problemerne i Computer Science fra en anden vinkel. De arbejder primært med algoritmer, teoremer og formelle modeller, ikke med kode. En vigtig fordel ved denne matematiske tilgang er den klare forståelse af, hvad der kan og ikke kan løses, samt hvordan man løser det.

Derfor præsenterer matematiklærerne programmering med fokus på teori. Studerende, der kommer "fra matematikken", foreslår ofte velgennemtænkte og teoretisk mere avancerede løsninger, men som regel er de ikke optimale i forhold til sproget og ofte bare skrevet klodset. En sådan studerende mener, at hans primære mål er at vise evnen til at løse sådanne opgaver i princippet, mens implementeringen kan haltere.

De elever, der i skolen eller på de første kurser er vokset op med programmører, bringer "meget smukke cykler" med sig, som dog typisk ikke fungerer særligt effektivt i asymptotisk forstand. De sætter derimod ikke sig selv som mål at teoretisere dybt og kigge i bøgerne efter optimale løsninger; de foretrækker smuk kode.

Jeg ser i forskellige universiteter normalt, hvilken "skole" der ligger til grund for en studerendes uddannelse, når jeg er til samtaler med dem. Og jeg har sjældent set en ideel balance i grunduddannelsen. Som barn kunne man i min by forberede sig til olympisk matematik, men der var ikke programmeringsklubber. Nu lærer børn i klubberne at programmere i de "populære" sprog Go og Python. Derfor er der allerede ved optagelsen til universiteterne forskelle i tilgange. Jeg mener, det er vigtigt at opretholde begge færdigheder på universitetet, ellers vil der komme en specialist med en utilstrækkelig teoretisk basis, eller en person, der ikke har lært og ikke ønsker at skrive god kode, til at arbejde i virksomheden.

Hvordan skal man egentlig "træne en bar" for fremtidige T-formede specialister?

Hvordan man maksimerer Computer Science-uddannelsen
Det er klart, at under sådanne forhold vælger en studerende blot det, de bedst kan lide. Underviseren videregiver blot den synsvinkel, der ligger dem nærmest. Men alle vinder, hvis både koden er velskrevet, og algoritmerne er klare, velbegrundede og effektive.

  • IT-indsigt. En bachelorafgang i Computer Science er allerede en færdiguddannet specialist med en veludviklet teknisk indblik, der sandsynligvis har valgt sin profil. Men i de første år ved vi ikke, hvad han eller hun vil beskæftige sig med. De kan gå ind i forskning eller analyse, eller måske skrive en stor mængde kode hver dag. Derfor skal studerende præsenteres for alle aspekter af arbejdet i IT-branchen og introduceres til alle værktøjer. Ideelt set burde undervisere fra de teoretiske kurser vise forbindelsen til praksis (og omvendt).
  • Vækstpunkt. At undgå at glide ud i ekstremiteter er i den studerendes interesse. At forstå, hvem du er — "matematiker" eller "programmerer" — er ikke svært. Det er nok bare at lytte til det første instinkt, når du løser en opgave: hvad vil du helst gøre — kigge i lærebogen efter den bedste tilgang eller skrive et par funktioner, der helt sikkert vil blive brugt senere? Baseret på dette kan man skabe en komplementær læringsbane videre frem.
  • Alternative videnskilder. Nogle gange er programmet godt balanceret, men "Systemprogrammering" og "Algoritmer" undervises af helt forskellige personer, og nogle studerende føler sig mere tiltrukket af den første underviser, mens andre foretrækker den anden. Men selv hvis du ikke kan lide professoren, er det ingen grund til at negligere nogle fag til fordel for andre. Selve bachelorerne er interesserede i at finde vilje til at arbejde med videnskilder og i ingen tilfælde stole på radikale synspunkter, såsom "matematik er videnskabernes dronning, det vigtigste er at kende algoritmer" eller "god kode kompenserer for alt andet."

For more in-depth knowledge of theory, one can turn to specialized literature and online courses. Students can improve their programming language skills on platforms like Coursera, Udacity, or Stepik, which offer a wide variety of courses. Often, students begin exploring hardcore courses in programming languages if they feel that the algorithm instructor is strong in mathematics but cannot answer complex implementation questions. Not everyone will agree with me, but in my experience, I have found this approach to be quite effective. the C++ specialization from Yandex, which systematically covers increasingly complex features of the language. Overall, choose a course with high ratings from reputable companies or universities.

Soft skills

Hvordan man maksimerer Computer Science-uddannelsen
When students from universities enter any company, from startups to large corporations, even those from top universities find themselves poorly adapted to the real working environment. The issue is that universities today often coddle students. Even after missing a lot of classes, failing to prepare in time for tests and exams, oversleeping, or arriving late to exams, anyone can still pass and even retake them — ultimately receiving a diploma.

Nevertheless, today there are ample opportunities to prepare students for adult life and independent professional activities. They will need not only to program but also to communicate. This aspect also requires training. Various programs exist in universities to enhance these skills, but unfortunately, they often do not receive the attention they deserve. Nonetheless, we have many opportunities at our disposal to acquire skills for effective teamwork.

  • Written business communication. Unfortunately, most professionals graduating from universities have no concept of correspondence etiquette. The specifics of communication in messengers include exchanging messages at night and during the day and using conversational style and informal language. However, written communication could be practiced through the interactions of students with their departments and the university.

    I praksis støder ledere ofte på behovet for at nedbryde et stort projekt i mindre opgaver. For dette er det nødvendigt at beskrive hver opgave og dens komponenter grundigt, så juniorudviklere forstår, hvad der forventes af dem. En dårligt formuleret opgave fører ofte til behovet for at lave om på noget, og derfor hjælper erfaring med skriftlig kommunikation kandidater med at arbejde i distribuerede teams.

  • Skriftlig præsentation af arbejdets resultater. For at præsentere deres undervisningsprojekter kan studerende på de sidste kurser skrive indlæg på Habr, videnskabelige artikler samt blot rapporter. Der er mange muligheder for dette — allerede fra andet år i nogle universiteter begynder kursusopgaver. Man kan også bruge essays som en kontrolform — de er normalt tættere på en journalistisk artikel i form. Denne tilgang er allerede implementeret ved HSE.

    Hvis virksomheden praktiserer en fleksibel tilgang til udvikling, skal resultaterne af ens arbejde præsenteres i mindre portioner, men oftere. Det er vigtigt at kunne kommunikere resultatet af arbejdet fra en specialist eller hele teamet kortfattet. Derudover afholdes der i mange virksomheder i dag 'revuer' — årlige eller halvårlige. Medarbejdere diskuterer resultater og fremtidige muligheder. En vellykket revue er hovedårsagen til karrieremæssig vækst, bonusser, for eksempel i Microsoft, Acronis eller Yandex. Ja, du kan programmere godt, men 'ved at sidde i hjørnet' vil selv en dygtig specialist altid tabe til en, der kan præsentere sin succes godt.

  • Akademisk skrivning. Det er særligt vigtigt at fremhæve akademisk skrivning. Studerende har gavn af at lære reglerne for at skrive videnskabelige tekster, bruge argumenter, finde information i forskellige kilder og formatere referencer til disse kilder. Det er ønskeligt at gøre dette på engelsk, da der i det internationale akademiske samfund findes betydeligt flere gode tekster, og for forskellige discipliner er der allerede etablerede skabeloner til præsentation af videnskabelige resultater. Selvfølgelig er færdigheder i akademisk skrivning nødvendige ved udarbejdelsen af russisk-sprogede publikationer, men der er langt færre eksempler på gode moderne artikler på engelsk. Disse færdigheder kan opnås i forbindelse med et relevant kursus, som nu indgår i mange uddannelsesprogrammer.
  • Afholdelse af møder. De fleste studerende har ikke lært at forberede sig til møder, føre protokollat og bearbejde data. Men hvis vi udvikler denne færdighed på universitetet, for eksempel ved at deltage i gruppeprojekter, kan vi undgå spild af tid på arbejdspladsen. Dette kræver kontrol over de studerendes projektarbejde for at lære dem effektivt at lede møder. I praksis koster det hver virksomhed mange penge — da hvis flere personer, der modtager en høj løn, tilbringer en time på et møde, ønsker man, at det skal give et tilsvarende udbytte.
  • Offentlig tale. Mange studerende står kun over for behovet for at tale offentligt ved forsvaret af deres afgangsprojekt. Og langt fra alle er klar til det. Jeg har set mange studerende, der:
    • står med ryggen til publikum,
    • vælger at vugge for at føre kommissionen ind i en trance,
    • bryder blyanter, kuglepennene og pegepindene,
    • går rundt,
    • kigger ned i gulvet.

    Det er normalt, når en person taler for første gang. Men med denne stress skal man begynde at arbejde tidligere — ved at forsvare kursusprojekter i en venlig atmosfære blandt medstuderende.

    Desuden er den standardpraksis i virksomheder at give medarbejdere mulighed for at foreslå ideer, få finansiering til dem, en position eller et dedikeret projekt. Men hvis man tænker over det — det er det samme som forsvaret af et kursusprojekt, blot på et højere niveau. Hvorfor ikke træne sådanne nyttige karriererelaterede færdigheder under studierne?

Hvad har jeg overset?

En af grundene til at skrive dette indlæg var en artikel, offentliggjort på Tyumen State Universitys hjemmeside,. Forfatteren af artiklen fokuserer kun på de mangler, som russiske studerende har, bemærket af udenlandske undervisere. Min erfaring som underviser på forskellige universiteter viser, at russisk grundskole- og videregående uddannelse giver et godt fundament. Russiske studerende er dygtige i matematik og algoritmer, og det er lettere at opbygge professionel kommunikation med dem.

For international students, on the contrary, the expectations of a Russian teacher may sometimes be overly high. For example, at the basic level of mathematical preparation, the Indian students I have encountered are similar to Russian ones. However, they sometimes lack specific knowledge when graduating from their bachelor's degree. Good European students are more likely to have a weaker mathematical background at the school level.

And if you are studying or working at a university, you can start improving your communication skills (yours or your students'), expanding your fundamental knowledge, and practicing programming right now. The Russian education system provides all the opportunities for this — you just need to make the right use of them.

I would be happy if you share your links to courses and methods in the comments of the post that help balance education, as well as other ways to enhance soft skills during university studies.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster