Enamik kaasaegsetest programmeerijatest on saanud hariduse ülikoolides. Aja jooksul see muutub, kuid praegu on asi nii, et head töötajad IT-ettevõtetesse tulevad ikka ülikoolidest. Selles postituses räägib Stanislav Protasov, Acronise ülikoolide suhete direktor, oma nägemusest ülikoolihariduse eripärast tulevaste programmeerijate jaoks. Õpetajad, üliõpilased ja tööandjad saavad isegi allpool leida mõned kasulikud näpunäited.
Viimased 10 aastat olen õpetanud matemaatikat, algoritme, programmeerimiskeeli ja masinõpet erinevates ülikoolides. Tänapäeval, peale oma ametikoha Acronises, olen ka teadusliku ja rakendusliku infotehnoloogia õppetooli abijuhataja MFTI-s. Heade vene (ja mitte ainult) ülikoolide töökogemusest olen saanud mõned tähelepanekud üliõpilaste ettevalmistamise kohta arvutiteadustes.
30-sekundiline reegel ei kehti enam
Olen kindel, et olete kuulnud 30 sekundi reeglist, mis ütleb, et arendaja peaks suutma mõista funktsiooni eesmärki peale kiire pilguheitu selle koodile. See reegel on välja mõeldud kaua aega tagasi, ja sellest ajast saime me mitmeid operatsioonisüsteeme, programmeerimiskeeli, riistvara ja algoritme. Olen koodi kirjutanud juba 12 aastat, kuid suhteliselt hiljuti nägin ma ühe toote allikaid, mis tundusid esmapilgul nagu maagilised loitsud. Täna, kui te ei ole teemas süvitsi, kaotab 30 sekundi reegel oma tõhususe. Vastupidisel juhul ei piisa sul mitte ainult 30-st, vaid isegi 300 sekundist, et mõista, mis ja kuidas.
Näiteks, kui soovite kirjutada draivereid, peate sukelduma sellesse valdkonda, lugema tuhandeid ridade erikoodi. Sel viisil aine õppimisest tekib spetsialistil "flow" tunne. Nagu räppides, kui hea riimi ja õige rütmi tunne tekib ilma erilise ratsionaliseerimiseta. Samuti võib hästi ettevalmistatud programmeerija kergesti ära tunda ebaefektiivset või lihtsalt halba koodi, süüvimata detailidesse, kus stiili on rikutud või on kasutatud mitteoptimaalset lähenemist (kuid selle tunde selgitamine võib olla üsna keeruline).
Spetsialiseerumine ja kasvav keerukus toovad kaasa selle, et bakalaureuseõpe ei paku enam võimalust kõiki suundi piisavalt sügavalt uurida. Kuid just selle haridustaseme juures on vaja omandada laiemat silmaringi. Hiljem, magistriõppes või tööl, tuleb kulutada aega probleemide ja aine spetsiifika uurimiseks, tundma õppida slängi, programmeerimiskeeli ja kolleegide koodi, lugeda artikleid ja raamatuid. Minu arvates just nii saab ülikooli kaudu "tõsta baar" tulevaste jaoks. .
Milline programmeerimiskeel on ülikoolis kõige parem õpetada?

Minu rõõmuks on ülikoolide õppejõud juba loobunud otsimast õiget vastust küsimusele: "Millal on parem programmeerida?" Vaidlused selle üle, mis on parem — C# või Java, Delphi või C++ — on peaaegu kadunud. Uute programmeerimiskeelte tekkimine ja pedagoogilise kogemuse kasv on toonud akadeemilisse keskkonda arusaama: iga keele jaoks on oma valdkond.
Programmikeele õpetamise probleem pole enam esmane. Pole oluline, millisel keelel kursus käib. Peamine on keele piisav väljendusvõime. Raamat "" — on hea illustreerimise näide sellele tähelepanekule. Selles juba klassikaks saanud väljaandes on kõik näited antud Java keeles — keeles, kus pole näidikuid, kuid on prügikogumisseade. Vaevalt keegi vaidleb sellele, et Java on kaugel optimaalsest valikust kõrge jõudlusega paralleelkoodi kirjutamiseks. Kuid raamatus esitatud kontseptsioonide selgitamiseks osutus keel sobivaks. Teine näide — Andrew Ng, õpetatakse Matlab'is Octave keskkonnas. Täna võiks valida muu programmeerimiskeele, kuid mis on oluline, on ideed ja lähenemised?
Praktilisem ja lähemal tegelikkusele
Samasuguse arenguga on viimastel aastatel ülikoolides praktiseerijaid tundmatu rohkem. Kui varem kritiseeriti Venemaa kõrgkoolide programme sageli nende reaalsusest eemaloleku pärast, siis tänapäeval ei saa IT-hariduse kohta enam nii öelda. 10 aastat tagasi oli ülikoolides peaaegu mitte ühtegi õppejõudu, kellel oleks päris kogemus valdkonnas. Täna viivad spetsialiseeritud osakondades tunde järjest sagedamini läbi mitte ametlikud arvutiteaduse õppejõud, vaid praktiseerivad IT-spetsialistid, kes õpetavad vaid 1-2 kursust oma põhitöö kõrvalt. See lähenemine õigustab ennast kvaliteetsete töötajate ettevalmistamise, kursuste ajakohastamise ja loomulikult ka potentsiaalsete töötajate leidmise seisukohalt. Ma ei arva, et kirjutaksin salajast, öeldes, et toetame MFTI põhiosakonda ja loome suhteid teiste kohtadega, sealhulgas selleks, et koolitada üliõpilasi, kes võiksid alustada oma karjääri Acronises.
Matemaatik või programmeerija?

Programmeerimiskeelte ümber toimunud vaidlused on muutunud filosoofilisteks. Nüüd vaidlevad omavahel tinglikud "programmeerijad" ja "matemaatikud". Põhimõtteliselt võiks need koolkonnad eristuda kahes haridusprogrammis, kuid tööstus ei erista veel selliseid nüansse piisavalt ning ülikoolist ülikooli on meil sarnane haridus, mis on pisut erineva kallakuga. See tähendab, et nii üliõpilasel kui ka ettevõttel, kus ta edaspidi töötab, tuleb omandada puuduolevad teadmised.
Praktiliste spetsialistide tulek ülikoolidesse, kes kirjutavad tööstuslikku koodi erinevates keeltes, annab üliõpilastele kvaliteetsema arendamisoskuse. Olles hästi tuttavad standardraamatukogude rakenduste, raamistike ja programmeerimistehnikatega, kasvatavad praktikud üliõpilastes soovi kirjutada head koodi, teha seda kiiresti ja kvaliteetselt.
Küll aga viib see kasulik oskus mõnikord ka ülesandeid lahkavate "rataste leiutajateni". Üliõpilasprogrammeerijad mõtlevad nii: "miks mitte kirjutada veel 200 rida head koodi, mis otse lahendab esitatud ülesande?"
Klassikalise matemaatika haridusega õpetajad (näiteks matemaatika või rakendusmatemaatika) töötavad sagedamini teaduslikus keskkonnas või andmete modelleerimise ja analüüsi valdkonnas. "Matemaatikud" näevad probleeme arvutiteaduse valdkonnas teistsuguste lähenemistega. Nad opereerivad esmajoones mitte koodi, vaid algoritmide, teoreemide ja formaalsete mudelitega. Matemaatilise lähenemise oluline plusspool on selge põhimõtteline arusaam, mida on võimalik lahendada ja mida mitte. Ja kuidas seda lahendada.
Seega räägivad matemaatika õpetajad programmeerimisest teoreetilisest vaatenurgast. Üliõpilased, kes tulevad "matemaatikutelt", pakuvad sageli hästi läbi mõeldud ja teoreetiliselt täiustatud lahendusi, kuid tavaliselt ei ole need keele seisukohalt optimaalsed ja sageli lihtsalt ebamugavalt kirjutatud. Selline üliõpilane arvab, et tema peamine eesmärk on näidata oma võimet selliseid ülesandeid lahendada. Kuid rakendamine võib olla puudu.
Koolis või esimestel kursustel programmeerijate poolt kasvatatud noored toovad endaga kaasa "väga ilusa jalgratta", mis aga tavaliselt ei tööta asümptootiliselt eriti efektiivselt. Nad ei sea endale eesmärgiks sügavat teoreetiseerimist ega otsi õpikute kaudu optimaalseid lahendusi, eelistades kaunist koodi.
Erinevates kõrgkoolides tudengite intervjuudel näen tavaliselt, milline "kool" on tema hariduse aluseks. Ja ma pole peaaegu kunagi kohanud ideaalset tasakaalu põhihariduses. Lapsena suutis minu linnas valmistuda olümpiaadi matemaatikaks, kuid programmeerimiskursusi ei olnud. Nüüd õpivad ringides lapsed programmeerimist "populaarsetes" keeltes nagu Go ja Python. Seetõttu on juba ülikooli vastuvõtu tasemel lähenemistes erinevusi. Ma arvan, et ülikoolis on oluline toetada mõlemat oskust, vastasel juhul tuleb ettevõttesse kas spetsialist, kellel on puudulik teoreetiline baas, või inimene, kes ei ole õppinud ega soovinud kirjutada head koodi.
Kuidas ikkagi "treenida barjääri" tulevaste

Selge on, et sellistes tingimustes valib tudeng lihtsalt selle, mis talle rohkem meeldib. Õppejõud edastab lihtsalt vaatenurga, mis on talle lähemal. Kuid kõik saavad kasu, kui kood on kirjutatud kaunilt ning algoritmide seisukohalt on kõik selge, põhjendatud ja efektiivne.
- IT-horisont. Bakalaureusekraadi lõpetanud tudeng, kelle eriala on arvutiteadus, on juba valmis spetsialist, kellel on välja arenenud tehniline silmaring ja kes on tõenäoliselt oma eriala valinud. Kuid esimestel kursustel ei tea me, millega ta või tema tegelema hakkab. Võib minna teadusesse või analüüsima, aga võib-olla kirjutab ta iga päev tohutult koodi. Seetõttu on tudengile oluline näidata kõik IT-sektori töö aspektid ja tutvustada kõiki tööriistu. Ideaalne on, kui teoreetiliste kursuste õpetajad näitavad seost praktikaga (ja vastupidi).
- Kasvukoht. Äärmustesse laskmine tuleks vältida — see on studendi huvides. Selgitada, kes te olete — kas “matemaatik” või “programmeeria” — ei ole keeruline. Piisab, kui kuulata oma esimest instinkti ülesande lahendamisel: mida te soovite teha — vaadata õpikusse, et leida optimaalne lähenemine, või kirjutada mõned funktsioonid, mis hiljem kindlasti kasuks tulevad? Selle põhjal saab kujundada oma edasise õppeteed.
- Alternatiivsed teadmiste allikad. Juhtub, et õppeprogramm on hästi tasakaalustatud, aga “Süsteemne programmeerimine” ja “Algarvutused” on täiesti erinevate õpetajate poolt juhitud, ning ühest üliõpilasest on esimene õpetaja lähemal, teised eelistavad teist. Kuid isegi kui teile professor ei meeldi, ei ole see põhjus, et salvestada mõned ained teiste arvelt. Bakalaureused ise on huvitatud soovist töötada teadmiste allikatega ning mitte usaldama radikaalseid arvamusi, nagu “matemaatika on teaduste kuninganna, põhitähelepanu on algoritmid” või “hea kood kompenseerib kõik muu.”
Teooria süvendamiseks on kasulik pöörduda spetsialiseeritud kirjanduse ja veebikursuste poole. Programmeerimiskeelte oskusi saab arendada Courseras, Udacitys või Stepikis, kus on palju erinevaid kursuseid. Samuti hakkavad üliõpilased tihti vaatama intensiivseid kursuseid, kui nad tunnevad, et algoritmide õpetaja tunneb head matemaatikat, kuid ei oska vastata keerulistele küsimustele rakendamise valdkonnas. Mitte kõik ei pruugi minuga nõustuda, kuid minu praktikas on see hästi toiminud. , kus järkjärgult tutvustatakse üha keerulisemaid keele omadusi. Üldiselt valige kursus, millel on kõrgeid hindeid autoriteetsetelt ettevõtetelt või ülikoolidelt.
Pehmed oskused

Ülikoolist tööle asudes — olgu see siis startup või suur korporatsioon — avastavad isegi parimate ülikoolide tudengid, et nad ei ole reaalse tööeluga piisavalt kohanenud. Probleem on selles, et tänapäeval hoolitsetakse tudengite eest ülemäära. Isegi kui nad jätavad vahele palju loenguid, ei valmista end õigel ajal ette kontrolltöödeks ja eksamiteks või jäävad hiljaks, saavad kõik siiski eksamid sooritada ja neid vajadusel uuesti teha — ning lõpuks saavad nad ikka diplomi.
Siiski on tänapäeval kõik tingimused olemas, et tudengeid ette valmistada täiskasvanueluks ja iseseisvaks ametitegevuseks. Neil tuleb mitte ainult programmeerida, vaid ka suhelda. Ja sellele tuleb samuti õpetada. Ülikoolides on mitmesuguseid vorme nende oskuste arendamiseks, kuid kahjuks ei pöörata neile sageli piisavalt tähelepanu. Siiski on meil palju võimalusi, et omandada tõhusalt koostööoskusi.
- Kirjalik äri kommunikatsioon. Kahjuks ei oma enamik spetsialiste kõrgharidust lõpetades arusaamu kirjavahetuse etikettidest. Messengereid kasutades suhtlemisel nii öösel kui päeval kasutatakse kõnepruuki ja mitteametlikku lexikut. Siiski võiks kirjutamisoskust harjutada tudengi ja õppeosakonna ning ülikooli suhtluses.
Praktikas seisavad juhid sageli silmitsi vajadusega jagada suurt projekti väiksemateks ülesanneteks. Selleks tuleb iga ülesanne ja selle komponendid hästi kirjeldada, et nooremad arendajad mõistaksid, mida neilt oodatakse. Hästi formuleeritud ülesanne vähendab vajadust kuhugi tagasi minna, mistõttu aitab kirjalik suhtlemise kogemus lõpetajatel töötada jaotatud meeskondades.
- Oma töö tulemuste kirjalik esitamine. Kõrgema kursuse üliõpilased saavad oma õpirajatiste esitlemiseks kirjutada poste Habrisse, teadusartikleid ja lihtsalt aruandeid. Selleks on palju võimalusi — juba teisel kursusel, mõnes kõrgkoolis, algavad kursusetööd. Samuti võib esseed kasutada kontrolli vormina — need on tavaliselt vormilt lähedased ajakirjanduslikule artiklile. Selline lähenemine on juba rakendatud HSE-s.
Kui ettevõte praktiseerib paindlikku lähenemist arenduses, tuleb oma töö tulemusi esitada väiksemate osadena, kuid sagedamini. Sellega seoses on oluline osata lühidalt edastada ühe spetsialisti või kogu meeskonna töö tulemus. Paljudes ettevõtetes viiakse tänapäeval läbi “ülevaatusi” — aastaseid või poolaastaseid. Tootjad arutavad tulemusi ja tulevikuplaane. Edukas ülevaatus on karjäärikasvu, preemiate põhjus, näiteks Microsoftis, Acronises või Yandexis. Jah, võite head kood kirjutada, kuid „nurga peal istudes” jääb isegi väga hea spetsialist alati alla sellele, kes oskab oma edu hästi esitleda.
- Akadeemiline kirjutamine. Eraldi tasub märkida akadeemilist kirjutamist. Üliõpilastele on kasulik tutvuda teaduslike tekstide kirjutamise reeglitega, argumentide kasutamisega, teabe otsimisega erinevates allikates ja viidete vormindamisega nendele allikatele. Soovitav on seda teha inglise keeles, kuna rahvusvahelises akadeemilises kogukonnas on palju rohkem häid tekste ning erinevate erialade jaoks on juba olemas väljakujunenud teaduslike tulemuste esitamise malli. Muidugi on akadeemilise kirjutamise oskused vajalikud ka venekeelsete väljundite ettevalmistamisel, kuid ingliskeelsete kaasaegsete artiklite häid näiteid on märgatavalt vähem. Neid oskusi saab omandada vastavas kursuses, mis on praegu paljude haridusprogrammide osa.
- Kohtumiste juhtimine. Enamik üliõpilastest ei oska kohtumisteks valmistuda, protokolle pidada ja andmeid töödelda. Kui aga arendada neid oskusi ülikoolis, näiteks osaledes kollektiivsetes projektides, saame vältida aega raiskamist töökohtadel. Selleks on vajalik üliõpilaste projektitöö üle kontrolli teostamine, et õpetada neid kohtumisi efektiivselt läbi viima. Praktikas maksab see igale ettevõttele palju raha — kui mitu inimest, kes saavad suurt palka, viibivad tunnikese koosolekul, on soov, et see annaks vastava tulu.
- Avalik esinemine. Paljud üliõpilased seisavad avaliku esinemise vajadusega silmitsi vaid diplomitööd kaitstes. Ja kaugel sellest, et kõik oleksid selleks valmis. Olen näinud palju üliõpilasi, kes:
- seisavad seljaga kuulajate poole,
- kõikuvad, üritades komisjoni transsi viia,
- murdavad pliiatseid, pastakaid ja pulki,
- kõndivad ringe,
- vaatavad põranda poole.
See on normaalne, kui inimene esineb esmakordselt. Kuid selle stressiga tuleks alustada varem — kursusetöid kaitstes sõbralikus õhkkonnas, koos kaasõpilastega.
Samuti on ettevõtetes tavaline praktika anda töötajale võimalus esitada idee, saada selle jaoks rahastust, positsioon või eriprojekt. Kui süveneda, on see sama kaitse, mis toimub lõputöö käigus, lihtsalt kõrgemal tasemel. Miks mitte arendada selliseid kasulikke karjäärioskusi õpingute ajal?
Mida ma jätsin vahele?
Selle postituse kirjutamise üheks põhjuseks oli artikkel, . Artikli autor keskendub ainult Venemaa üliõpilaste puudustele, mis on välisõppejõudude poolt märgatud. Minu õpetamiskogemus erinevates ülikoolides näitab, et Venemaa kooli- ja kõrgharidus annab head alused. Venemaa üliõpilased on tugevad matemaatikas ja algoritmides, nendega on lihtsam üles ehitada professionaalset suhtlust.
Välisüliõpilaste puhul võivad vene õppejõudude ootused mõnikord olla liiga kõrged. Näiteks sarnanevad mu tutvunud India üliõpilased vene üliõpilaste tasemega matemaatika algtasemel. Küll aga puuduvad neil mõnikord eriteadmised bakalaureuseõppe lõpetamisel. Head Euroopa üliõpilased võivad sageli omada madalamat matemaatikatase kooli tasemel.
Ja kui õpid või töötad ülikoolis, saad juba nüüd alustada suhtlemisoskuste (oma või üliõpilaste) arendamist, laiendada oma põhiteadmisi ja harjutada programmeerimist. Selleks on Venemaa haridussüsteemis kõik võimalused – tuleb vaid neid õigesti kasutada.
Olen rõõmus, kui jagate postituse kommentaarides oma linke kursustele ja meetoditele, mis aitavad hariduses tasakaalu saavutada, samuti muid viise, kuidas arendada pehmeid oskusi ülikoolis õppimise ajal.
Allikas: habr.com
