Večina sodobnih programerjev je izobražena na univerzah. Sčasoma se bo to spremenilo, a trenutno je tako, da dobri kadri v IT podjetja še vedno prihajajo z univerz. V tem prispevku Stanislav Protasov, direktor Acronis za povezave z univerzami, deli svoje poglede na posebnosti univerzitetne izobrazbe prihodnjih programerjev. Učitelji, študenti in tisti, ki jih najemajo, lahko pod katom najdejo tudi nekaj koristnih nasvetov.
V zadnjih 10 letih poučujem matematiko, algoritme, programske jezike in strojno učenje na različnih univerzah. Danes poleg svoje vloge v Acronis tudi služim kot namestnik vodje oddelka za teoretično in aplikativno informatiko na MFTI. Iz izkušenj pri delu na dobrih ruskih (in ne le) univerzah sem pridobil nekaj opazovanj o pripravi študentov za računalniške discipline.
Pravilo 30 sekund več ne deluje
Prepričan sem, da ste se srečali s pravilo 30 sekund, ki pravi, da mora programer razumeti namen funkcije po kratkem pogledu na njen kodo. Uvedeno je bilo davno, od takrat pa se je pojavilo mnogo operacijskih sistemov, jezikov, strojne opreme in algoritmov. Kodo pišem že 12 let, a sem sorazmerno nedavno videl izvorne kode enega proizvoda, ki so mi na prvi pogled delovale magično. Danes, če niste potopljeni v predmetno področje, pravilo 30 sekund preneha delovati. V nasprotnem primeru vam ne bo dovolj niti 30, ampak niti 300 sekund, da se razjasnite, kaj se dogaja.
Na primer, če želite pisati gonilnike, se bo treba poglobiti v to področje, prebrati tisoče vrstic specifične kode. S takim načinom učenja o predmetu se pri strokovnjaku pojavi 'občutek toka'. Kot pri rapu, ko se občutek dobre rime in pravega ritma pojavi brez posebne racionalizacije. Tudi dobro izobražen programer lahko enostavno prepozna neučinkovito ali preprosto slabo kodo, ne da bi se poglobil v podrobnosti o tem, kje je prišlo do kršenja sloga ali je bil uporabljen neoptimalen pristop (pojasniti to občutek pa je lahko precej težko).
Specialization and increasing complexity mean that a bachelor's degree no longer provides the opportunity to study all areas deeply enough. However, at this level of education, it's essential to acquire a broad perspective. Later, during master's studies or at work, one will need to spend some time diving into the issues and specifics of the subject area, learning the jargon, programming languages, and colleagues' code, as well as reading articles and books. It seems to me that this is the only way, with the help of the university, to build a strong foundation for the future. .
Which programming language is best to teach at a university?

To my delight, university teachers have already abandoned the quest for the right answer to the question: “What is the best programming language?”. Debates about whether C# or Java, Delphi or C++, are better have largely subsided. The emergence of numerous new programming languages and the accumulation of pedagogical experience have led to a consensus in the academic community: each language has its own niche.
The issue of teaching with a specific programming language has ceased to be the primary concern. It doesn't matter which language the course is conducted in. The key is the language's expressiveness. The book “” is a good illustration of this observation. In this now-classic publication, all examples are presented in Java — a language without pointers but with a Garbage Collector. It is unlikely that anyone would argue that Java is far from the optimal choice for writing high-performance parallel code. However, for explaining the concepts laid out in the book, the language proved to be suitable. Another example is the by Andrew Ng, taught in Matlab in the Octave environment. Today, one could choose another programming language, but what difference does it make if the ideas and approaches are what matter?
More practical and closer to reality
Hkrati se je v zadnjih letih na univerzah močno povečalo število praktikantov. Če so prejšnje ruske univerzitetne programe aktivno kritizirali zaradi njihove odtujenosti od realnosti, pa se danes tega za IT-izobraževanje ne da več trditi. Pred 10 leti skoraj ni bilo učiteljev z resničnimi izkušnjami iz industrije. Danes vse pogosteje na strokovnih katedrah predavanja vodijo ne redni učitelji računalniških znanosti, temveč praktični IT-specialisti, ki predavajo le 1-2 predmeta v prostem času od glavnega dela. Tak pristop se izkazuje za upravičenega z vidika kvalitetne priprave kadrov, posodabljanja tečajev in seveda iskanja potencialnih zaposlenih v podjetjih. Ne mislim, da razkrivam skrivnost, ko povem, da podpiramo osnovno katedro na MFTI in vzpostavljamo odnose z drugimi univerzami tudi zato, da pripravimo študente, ki bi lahko začeli svojo kariero v Acronisu.
Matematik ali programer?

Spori, ki so se nekoč vrtele okoli programskih jezikov, so prešle v filozofske razprave. Zdaj se med seboj sporejo t.i. "programerji" in "matematiki". V načelu bi se ti šoli lahko ločili v dva izobraževalna programa, vendar industrija še vedno slabo ločuje takšne nianse, in od univerze do univerze imamo podoben izobraževalni sistem z nekoliko drugačnim poudarkom. To pomeni, da bosta tako študent kot podjetje, v katerem bo kasneje delal, morala dopolniti sestavljanko znanj z manjkajočimi koščki.
Pojav praktikantov na univerzah, ki pišejo industrijsko kodo v različnih jezicih, daje študentom bolj kakovostno znanje razvoja. Ker so dobro seznanjeni z izvedbami standardnih knjižnic, okvirji in programerskimi tehnikami, praktiki programerji v študentih vzgajajo željo pisati dobro kodo ter to početi hitro in kakovostno.
Ta koristna veščina pa vendarle včasih privede do pojava ljubiteljev izumljanja kolesa. Študenti-programerji razmišljajo takole: "Kaj mi škodi napisati še 200 vrstic dobre kode, ki bo neposredno rešila postavljeno nalogo?".
Učitelji, ki so prejeli klasično matematično izobrazbo (na primer na matematični fakulteti ali na področju aplikativne matematike), pogosteje delujejo v okolju bližnjem znanosti ali na področju modeliranja in analize podatkov. "Matematik" drugače vidi probleme na področju računalništva. Oni najprej delujejo ne s kodo, temveč z algoritmi, teoremi in formalnimi modeli. Pomembna prednost matematičnega pristopa je jasno načelno razumevanje, kaj je mogoče in kaj ni mogoče rešiti. In kako to rešiti.
Zato učitelji matematike govorijo o programiranju z nagibom k teoriji. Študenti, ki prihajajo "iz matematike", pogosto ponujajo dobro premišljene in teoretično bolj napredne rešitve, vendar so običajno suboptimalne z vidika jezika in pogosto preprosto slabo napisane. Tak študent meni, da je njegov glavni cilj pokazati sposobnost reševanja takšnih nalog v načelu. Uresničitev pa lahko šepa.
Fantje, ki so jih v šoli ali na prvih letnikih vzgajali programerji, prinašajo s seboj "zelo lep kolo", ki pa običajno ne deluje preveč učinkovito asimptotično. Oni, nasprotno, ne postavljajo pred seboj nalog globoko teoretizirati in se obračati k učbenikom v iskanju optimalnih rešitev, temveč dajejo prednost lepemu kodu.
Na različnih univerzah pri razgovorih s študenti običajno vidim, katera "šola" leži v ozadju njihove izobrazbe. In redko sem se srečal z idealno ravnotežjem v osnovni izobrazbi. V otroštvu je bilo v mojem mestu mogoče pripravljati se na olimpijsko matematiko, a krožkov programiranja ni bilo. Zdaj pa se otroci v krožkih učijo programirati v "modernih" Go in Python. Zato že na ravni vpisa na univerze obstajajo razlike v pristopih. Menim, da je na univerzi pomembno podpirati obe veščini, sicer bo v podjetje prišel delavec z nezadostno teoretično podlago ali oseba, ki se ni naučila in noče pisati dobrega kode.
Kako pa "nabrati mišice" za prihodnje

Seveda, v takšnih razmerah študent preprosto izbere tisto, kar mu najbolj ustreza. Učitelj pa preprosto prenese stališče, ki mu je bližje. Vsi pa bodo imeli koristi, če bo koda napisana lepo, hkrati pa bodo algoritmi jasni, utemeljeni in učinkoviti.
- IT-obzorje. Diplomant dodiplomskega študija na področju računalništva je že pripravljen strokovnjak z razvitim tehničnim obzorjem, ki je verjetno izbral svojo specializacijo. Vendar pa na nižjih letnikih ne vemo, s čim se bo ukvarjal. Lahko se odloči za znanost ali analitiko, ali pa preprosto vsak dan piše ogromne količine kode. Zato je treba študentu predstaviti vse vidike dela v IT-sferi in ga seznaniti z vsemi orodji. Idealno bi bilo, če bi učitelji iz teoretičnih tečajev prikazovali povezavo s prakso (in obratno).
- Rastna točka. Preprečiti skakanje v ekstremne primere je v interesu samega študenta. Razumeti, ali ste 'matematik' ali 'programer', ni težko. Zadošča, da prisluhnete prvemu notranjemu nagibu pri reševanju naloge: kaj želite narediti - pogledati v učbenik v iskanju optimalnega pristopa ali napisati nekaj funkcij, ki bodo zagotovo koristne? Na podlagi tega lahko gradite nadaljnjo komplementarno pot svojega učenja.
- Alternativni viri znanja. Včasih je program dobro uravnotežen, a 'Sistemsko programiranje' in 'Algoritmi' poučujeta povsem različni ljudje, in nekaterim študentom je bližji prvi učitelj, drugim pa drugi. Toda tudi če vam profesor ni všeč, to ni razlog, da zanemarite en predmet v prid drugim. Sami diplomanti so zainteresirani, da v sebi najdejo voljo za delo z viri znanja in nikakor ne zaupajo radikalnim mnenjem, kot so 'matematika je kraljica znanosti, najpomembneje je poznati algoritme' ali 'dober koda kompenzira vse ostalo'.
Poglobite svoje znanje o teoriji s pomočjo specializirane literature in spletnih tečajev. Svoje znanje programskih jezikov lahko nadgradite na platformah, kot so Coursera, Udacity ali Stepik, kjer je na voljo veliko različnih tečajev. Študenti pogosto začnejo razumeti resne tečaje o jezikih, kadar menijo, da učitelj algoritmov dobro obvlada matematiko, a ne zna odgovoriti na zapletena vprašanja o implementaciji. Morda se z mano ne bodo vsi strinjali, a v moji praksi se je izkazalo, da je , na kateri se zaporedno obravnavajo vse bolj zapletene značilnosti jezika. Na splošno izberite tečaj z visokimi ocenami, od uglednih podjetij ali univerz.
Mehke veščine

Ko študentje prihajajo iz univerz v delo v katerokoli podjetje, od startupa do velike korporacije, se tudi študenti najuglednejših univerz slabo prilagodijo realnemu delovnemu okolju. Dejstvo je, da se danes univerze preveč 'šopirijo' s študenti. Tudi če številne lekcije zamudijo, se ne pripravijo pravočasno na kontrolne in izpite, zaspijo ali zamudijo na izpite, vsak lahko opravi in nato spet ponovi — in na koncu še vedno dobi diploma.
Kljub temu pa danes obstajajo vsi pogoji za to, da bi študente pripravili na odraslo življenje in samostojno poklicno delovanje. Ne le, da bodo morali programirati, temveč se bodo morali tudi komunicirati. Tudi tega se je treba naučiti. Na univerzah obstajajo različni formati izboljševanja teh veščin, vendar, na žalost, jim pogosto ni namenjena dovolj pozornosti. Kljub temu imamo v naši opremi številne možnosti za pridobitev veščin učinkovitega timskega dela.
- Pisna poslovna komunikacija. Na žalost večina strokovnjakov ob izhodu z univerze nima pojma o etiketi pisanja. Specifika komunikacije v sporočilih z aplikacijami, pri izmenjavi sporočil ponoči in čez dan ter uporabi pogovornega sloga in neformalne leksike. Vendar pa bi lahko trenerski pisni govorec bil izboljšan s komunikacijo študenta s katedro in univerzo.
V praksi se vodje pogosto srečujejo s potrebo po razdelitvi obsežne naloge na manjše naloge. Za to je treba vsako nalogo in njene sestavine dobro opisati, da mlajši razvijalci razumejo, kaj se od njih zahteva. Slabo zastavljena naloga pogosto vodi do potrebe po predelavi, zato izkušnje v pisni komunikaciji pomagajo diplomantom delati v razpršenih ekipah.
- Pisna predstavitev rezultatov svojega dela. Za predstavitev svojih šolskih projektov lahko študentje višjih letnikov pišejo objave na Habr, znanstvene članke ter enostavne poročile. Obstaja veliko možnosti — že v drugem letniku nekaterih fakultet se začenjajo seminarske naloge. Eseje je prav tako mogoče uporabiti kot obliko kontrole — običajno so po obliki bližje publicističnim člankom. Takšen pristop je že uveljavljen na NIO VŠE.
Če podjetje prakticira fleksibilen pristop k razvoju, je treba rezultate svojega dela predstaviti v manjših odmerkih, vendar pogosteje. Pomembno je znati kratko predstaviti rezultat dela enega strokovnjaka ali celotne ekipe. V mnogih podjetjih danes potekajo tudi 'pregledi' — letni ali polletni. Zaposleni razpravljajo o rezultatih in možnostih dela. Uspešen pregled je glavni razlog za napredovanje kariere, nagrade na primer v Microsoftu, Acronisu ali Yandexu. Da, morda dobro programirate, vendar 'sedenje v kotu' celo najboljšega strokovnjaka vedno na koncu stane, ko gre za tiste, ki znajo dobro predstaviti svoj uspeh.
- Akademsko pisanje. Posebno pozornost je treba posvetiti akademskemu pisanju. Študentom je koristno spoznati pravila pisanja znanstvenih besedil, uporabo argumentov, iskanje informacij v različnih virih in oblikovanje referenc na te vire. Želeno je, da se to dela v angleškem jeziku, saj je v mednarodni akademski skupnosti veliko več kakovostnih besedil, za različne discipline pa že obstajajo uveljavljeni vzorci predstavitve znanstvenih rezultatov. Seveda so veščine akademskega pisanja potrebne tudi pri pripravi publikacij v ruščini, vendar je dostope do dobrih sodobnih člankov v angleškem jeziku precej manj. Te veščine je mogoče pridobiti v okviru ustreznega tečaja, ki zdaj spada v mnoge izobraževalne programe.
- Organizacija sastanaka. Većina studenata ne zna kako se pripremiti za sastanke, voditi zapisnike i obraditi podatke. No, ako razvijemo ovu veštinu na fakultetu, na primer, učestvujući u kolektivnim projektima, možemo izbjeći bespotrebno trošenje vremena na radnom mestu. Za to je potreban nadzor nad projektima studenata kako bi ih naučili da efikasno organizuju sastanke. U praksi to košta svaku korporaciju mnogo novca — jer ako nekoliko ljudi sa visokom platom provedu sat vremena na sastanku, želi se da bude proporcionalan povrat investicije.
- Javno nastupanje. Mnogi studenti se suočavaju sa potrebom da javno nastupe samo na odbrani diplomskog rada. I daleko nije svako spreman za to. Video sam mnoge studente koji:
- stoje okrenuti leđima slušaocima,
- ljuljaju se pokušavajući da uvuku komisiju u trans,
- kulte olovke, olovke i pokazivače,
- hodaju u krug,
- gledaju u pod.
To je normalno kada osoba prvi put nastupa. No, sa tim stresom treba početi raditi ranije — prilikom odbrane seminarskih radova u prijateljskoj atmosferi, među kolegama.
Pored toga, standardna praksa u korporacijama je omogućiti zaposleniku da predloži ideju, dobije na nju finansiranje, poziciju ili dodeljeni projekat. No, ako razmislimo — to je ista takođe odbrana seminarskog rada, samo na višem nivou. Zašto ne uvježbavati takve korisne karijerne veštine tokom studija?
Šta sam propustio?
Jedan od povoda za pisanje ovog posta bila je članak, . Autor članka fokusira se samo na nedostatke ruskih studenata uočene od strane stranih profesora. Praksa mog predavanja na različitim univerzitetima pokazuje da rusko osnovno i visoko obrazovanje pruža dobru osnovu. Ruski studenti su obučeni u matematici i algoritmima, lakše se s njima uspostavlja profesionalna komunikacija.
Pri mednarodnih študentih so lahko pričakovanja ruskega predavatelja včasih previsoka. Na primer, indijski študenti, ki jih poznam na osnovni ravni matematike, so podobni ruskima. Vendar jim pogosto primanjkuje posebnega znanja ob zaključku dodiplomskega študija. Dobri evropski študenti običajno nimajo tako močne matematične osnove na srednji šoli.
In če študirate ali delate na univerzi, lahko že sedaj začnete razvijati svoje komunikacijske veščine (svoje ali študentov), širiti temeljno znanje in trenirati programiranje. V ruskem izobraževalnem sistemu so na voljo vse možnosti — le izkoristiti jih je treba pravilno.
Vesel bom, če v komentarjih pod objavo delite svoje povezave do tečajev in metod, ki pomagajo izravnati ravnotežje v izobraževanju, ter tudi druge načine za izboljšanje mehkih veščin med študijem na univerzi.
Izvor: habr.com
