Kuidas maksimeerida oma Computer Science haridust

Enamik kaasaegsetest programmeerijatest on omandanud hariduse ülikoolides. Aja jooksul see muutub, kuid praegu on asi selline, et head IT-spetsialistid tulevad ikka veel ülikoolidest. Selles postituses räägib Stanislav Protassov, Acronise ülikoolisuhete direktor, oma nägemusest ülikoolihariduse eripärast tulevastele programmeerijatele. Õpetajad, üliõpilased ja need, kes neid palgavad, võivad leida paar kasulikku nõuannet allolevast.

Kuidas maksimeerida oma Computer Science haridust

Viimased 10 aastat olen õpetanud matemaatikat, algoritme, programmeerimiskeeli ja masinõpet erinevates ülikoolides. Täna, peale oma ametikoha Acronises, olen ma ka teoreetilise ja rakendusuuringute osakonna juhtimise aseesimees MFTI-s. Hea kogemuse põhjal Venemaa (ja mitte ainult) ülikoolides olen teinud mõned tähelepanekud teaduskonna arvutidistsipliinide õpetamise kohta.

30-sekundiline reegel enam ei kehti

Olen kindel, et olete kokku puutunud 30-sekundilise reegliga, mis ütleb, et programmeerija peaks mõistma funktsiooni eesmärki pärast kiikust koodi. See leiutati ammu, sellest ajast on tekkinud palju operatsioonisüsteeme, keeli, riistvara ja algoritme. Olen juba 12 aastat koodi kirjutanud, kuid suhteliselt hiljuti nägin ma ühe toote lähtekoodi, mis näis esmapilgul olevat nagu maagilised loitsud. Tänapäeval, kui te ei ole teemas süvenenud, ei tööta 30-sekundiline reegel. Vastupidisel juhul ei piisa teil mitte ainult 30-st, vaid ka 300-st sekundist, et mõista, mis toimub.

Näiteks, kui teil on soov kirjutada draivereid, peate sukelduma sellesse valdkonda, lugema tuhandeid ridu spetsiifilist koodi. Sellise lähenemisega aine õppimisele tekib spetsialistil "flow" tunne. Nagu räppides, kui hea riimi ja õige rütmi tunne tekib ilma erilise ratsionaliseerimiseta. Nii saab hästi ettevalmistatud programmeerija hõlpsasti tuvastada ebaefektiivset või lihtsalt halba koodi, süvenemata detailidesse, kus stiili rikutud või kasutatud on ebaoptimaalne lähenemine (aga see tunne seletada on mõnikord üsna keeruline).

Spetsialiseerumine ja kasvav keerukus viivad selleni, et bakalaureusekraad ei paku enam piisavat võimalust kõiki suundi sügavalt uurida. Kuid just selle haridustaseme juures on vaja omandada silmaring. Hiljem, magistriõppes või tööl, tuleb veeta aega, et süveneda probleemistikku ja eriala spetsiifikasse, õppida žargooni, programmeerimise keeli ning kolleegide koodi, lugeda artikleid ja raamatuid. Minu arvates ainult nii saab ülikooli abil tuleviku jaoks "treenida rööbasteed". T-kujulised spetsialistid.

Milliskeelt on ülikoolis parem õpetada?

Kuidas maksimeerida oma Computer Science haridust
Minu rõõmuks on ülikoolide õpetajad juba loobunud õigete vastuste otsimisest küsimusele: "Millel on parem programmeerida?" Vaidlused selle üle, kas C# on parem kui Java, Delphi või C++ on tegelikult taandunud. Paljude uute programmeerimiskeelte ilmumine ja pedagoogilise kogemuse kogunemine on viinud selleni, et akadeemilises keskkonnas on kujunenud arusaam: iga keele jaoks on oma nišš.

Programmeerimiskeele kasutamise probleem õpetamises ei ole enam esmatähtis. Pole oluline, millisel keelel kursus käib. Peamine on keele piisav väljendusvõime. Raamat "The Art of Multiprocessor Programming" on hea illustreerimine sellest tähelepanekust. Selles juba klassikaks saanud väljaandes on kõik näited toodud Java keeles - keeles, kus puuduvad osutid, kuid on olemas jäätme kogumise süsteem (Garbage Collector). Keegi ei vaidle vastu, et Java on kaugel optimaalsest valikust kõrge jõudlusega paralleelkoodi kirjutamisel. Kuid kontseptsioonide selgitamiseks, mis on raamatus esitatud, osutus keel sobivaks. Teine näide on klassikaline masinõppe kursus Andrew Yani poolt, mida õpetatakse Matlab' keeles Octave keskkonnas. Tänapäeval võiks valida teise programmeerimiskeele, kuid mis oluline, kui tähtsad on ideed ja lähenemised?

Praktilisem ja reaalsusele lähemal

Samasugus on viimastel aastatel ülikoolides palju rohkem praktikantide arv kasvanud. Kui varasemalt kritiseeriti vene ülikoolide programme, et need on reaalsusest eemaldunud, siis tänapäeval ei saa nii öelda IT-hariduse kohta. 10 aastat tagasi oli ülikoolides peaaegu mitte ühtegi õppejõudu, kellel oleks olnud tegelik töökogemus tööstuses. Praegu juhendavad erialakursusi üha enam praktiseerivad IT-spetsialistid, kes loenguid peavad ainult 1-2 kursusel oma põhitöö ajast vabana. Selline lähenemine õigustab end kvaliteetse hariduse tagamisel, kursuste aktualiseerimisel ja loomulikult potentsiaalsete töötajate leidmisel ettevõtetesse. Ma ei arva, et avaldan saladust, kui ütlen, et toetame MIPT baaskatedrat ja loome suhteid teiste ülikoolidega ka selleks, et valmistada ette tudengeid, kes võiksid alustada oma karjääri Acronises.

Matemaatik või programmikirjutaja?

Kuidas maksimeerida oma Computer Science haridust
Vaidlused, mis varem käidi programmeerimiskeelte ümber, on muutunud filosoofiliseks. Nüüd vaieldakse omavahel tinglikest „programmikirjutajatest” ja „matemaatikutest”. Põhimõtteliselt oleks need koolid võinud jaguneda kaheks haridusprogrammideks, kuid tööstuses on endiselt keeruline selliseid nüansse eristada ning ülikoolide vahel on sarnane haridus veidi erineva kaldega. See tähendab, et nii üliõpilasel kui ka ettevõttel, kus ta hiljem töötab, tuleb täienda oma teadmiste pusle vajalike tükkidega.

Praktikute, kes kirjutavad tööstuslikku koodi erinevates keeltes, ilmumine ülikoolides annab üliõpilastele kvaliteetsemad arendusoskused. Kuna nad on hästi tuttavad standardraamatukogude, raamistikute ja programmeerimise tehnikatega, kasvatavad praktikud üliõpilastes soovi kirjutada head koodi, teha seda kiiresti ja kvaliteetselt.

Kuid see kasulik oskus toob mõnikord kaasa ka selliste paikade tekkimise, kus inimesed leiutavad jalgratast. Üliõpilased-programmikirjutajad mõtlevad nii: „mida maksab kirjutada veel 200 rida head koodi, mis otse lahendab esitatud ülesande?”

Klassikalise matemaatika haridusega õpetajad (näiteks matemaatika või rakendatud matemaatika), töötavad sagedamini teaduslikus keskkonnas või andmete modelleerimise ja analüüsi valdkonnas. "Matemaatikud" näevad probleeme arvutiteaduse valdkonnas erinevalt. Nad ei opereeri esmajoones koodiga, vaid algoritmide, teoreemide ja formaalsete mudelitega. Matemaatilise lähenemise oluline pluss on selge põhimõtteline arusaam, mida on võimalik lahendada ja mida mitte. Ja kuidas seda lahendada.

Seetõttu räägivad matemaatika õpetajad programmeerimisest teoreetilisest vaatest. Üliõpilased, kes tulevad "matemaatikutelt", pakuvad sageli hästi läbi mõeldud ja teoreetiliselt täiuslikumaid lahendusi, kuid kui reeglina mitte optimaalsed keele tasemel ja tihti lihtsalt lohakalt kirjutatud. Selline üliõpilane arvab, et tema peamine eesmärk on näidata oma võimet selliseid ülesandeid üldiselt lahendada. Kuid rakendamine võib jääda soovitud tasemest alla.

Poisid, keda koolis või esimestel kursustel õpetasid programmeerijad, toovad endaga kaasa "väga ilusa jalgratta", mis siiski tavaliselt ei tööta asümptootiliselt liiga tõhusalt. Nad, vastupidi, ei püüa sügavalt teoreetilisi ülesandeid lahendada ja ei otsi õpikutes optimaalseid lahendusi, eelistades ilusat koodi.

Erinevates ülikoolides näen tudengite vestlustel tavaliselt, milline "kool" on nende hariduse aluseks. Ja ma olen harva kohanud täiuslikku tasakaalu põhihariduses. Lastepõlves oli minu linnas võimalik valmistuda olümpiamatemaatikaks, kuid programmeerimise ringe ei olnud. Nüüd õpetatakse ringides lastele programmeerimist "moes" olevates Go ja Python keeles. Seetõttu on juba ülikooli astumise tasandil lähenemisviisides erinevusi. Ma arvan, et ülikoolis on oluline toetada mõlemat oskust, vastasel juhul tuleb ettevõttesse töötama kas spetsialist, kellel on ebapiisav teoreetiline baas, või inimene, kes ei ole õppinud ega soovi kirjutada head koodi.

Kuidas siiski "treenida horisontaalset riba" tulevaste T-kujuliste spetsialistide jaoks?

Kuidas maksimeerida oma Computer Science haridust
On selge, et sellistes tingimustes valib tudeng lihtsalt selle, mis talle rohkem meeldib. Õppejõud edastab aga vaatepunkti, mis on talle lähemal. Kuid kõik saavad kasu, kui kood on kirjutatud ilusti ning algoritmide seisukohalt on kõik selge, põhjendatud ja efektiivne.

  • IT-horisont. Bakalaureusekraadiga Computer Science erialal on olemasolev spetsialist, kellel on arenenud tehniline silmaring ja kes on tõenäoliselt valinud oma profiili. Kuid esimestel kursustel ei tea me, millega ta hakkab tegelema. Ta võib minna teadusesse või analüütikasse, või vastupidi, iga päev tohutult koodi kirjutama. Seega on tudengile vajalik tutvustada kõik IT-valdkonna töö aspektid ja tutvuda kõigi tööriistadega. Ideaalne, kui teoreetiliste kursuste õpetajad näitavad seoseid praktikaga (ja vastupidi).
  • Kasvupunkt. Äärmustesse laskumise vältimine on tudengi enda huvides. Mõista, kes te olete — "matemaatik" või "programmeerija" — pole keeruline. Piisab, kui kuulata oma esimest sisetunnet probleemi lahendamisel: millist tegevust soovite teha — vaadata õpikusse optimaalse lähenemise leidmiseks või kirjutada mõned funktsioonid, mis hiljem kindlasti kasuks tulevad? Selle põhjal saab kujundada edasise täiendava õppimise trajektoori.
  • Alternatiivsed teadmiste allikad. Juhtub, et õppekava on hästi tasakaalustatud, kuid "Süsteemne programmeerimine" ja "Algoritmid" õpetavad täiesti erinevad inimesed, ning ühele tudengile meeldib rohkem esimene õpetaja, teisele aga teine. Kuid isegi kui teile ei meeldi professor, ei ole see põhjus, miks ühte ainet unarusse jätta mõne teise kasuks. Bakalaureuseõppe tudengid on huvitatud teadlikult töötama teadmiste allikatega ja mitte mingil juhul usaldama radikaalseid arvamusi, nagu "matemaatika on teaduste kuninganna, peamine on teada algoritme" või "hea kood kompenseerib kõik muu".

Teooria süvendamiseks saab pöörduda spetsialiseeritud kirjanduse ja veebikursuste poole. Programmeerimiskeelte oskused on võimalik täiendada Coursera, Udacity või Stepik'i kaudu, kus on saadaval palju erinevaid kursusi. Samuti hakkavad üliõpilased sageli vaatama intensiivseid keelekursusi, kui nad tunnevad, et algoritmide õpetaja oskab hästi matemaatikat, kuid ei suuda vastata keerulistele rakenduslikele küsimustele. Mitte kõik ei nõustu minuga, kuid minu praktikas on hästi toiminud C++ spetsialiseerumine Yandexilt, kus käsitletakse järk-järgult keele kõik keerukamad nüansid. Üldiselt valige kursus, millel on kõrged reitingud ja mis on autoriteetsete ettevõtete või ülikoolide loodud.

Pehmed oskused

Kuidas maksimeerida oma Computer Science haridust
Kui ülikoolist tööle astuvad, leivad üliõpilased, isegi tippülikoolidest, end igasugustes ettevõtetes halvasti kohandatuna reaalsesse tööelusse. Probleem on selles, et tänapäeval “kaitsevad” ülikoolid tudengeid liiga palju. Isegi kui ignoreeritakse mitmeid loenguid, ei valmistuta kontrolltöödeks ja eksamiteks õigel ajal, magatakse maha või tullakse hiljaks, suudab igaüks siiski eksami sooritada ja vajadusel ka uuesti, saades lõpuks diploma.

Kuid tänapäeval on olemas kõik tingimused, et üliõpilasi ette valmistada täiskasvanueluks ja iseseisvaks erialaseks tegevuseks. Neil tuleb mitte ainult programmeerida, vaid ka suhelda. Ja sellele tuleb samuti õpetada. Ülikoolides on olemas erinevaid võimalusi nende oskuste arendamiseks, kuid kahjuks ei pöörata neile sageli piisavalt tähelepanu. Siiski on meil palju võimalusi meeskonnas tõhusaks töötamiseks oskuste omandamiseks.

  • Kirjalik äriakendamine. Kahjuks ei oma enamik spetsialiste, kes ülikoolist väljunevad, mingit aimu kirjavahetuse etikettidest. Messengeri suhtlemise iseärasused, samuti sõnumite vahetamine öösel ja päeval, jutustav stiil ja mitteametlik sõnavara. Siiski võiks kirjaliku kõne oskusi arendada üliõpilaste suhtlemise kaudu teaduskonna ja ülikooliga.

    Praktiliselt seisavad juhid sageli silmitsi vajadusega jagada suurt projekti väiksemateks ülesanneteks. Selleks tuleb iga ülesanne ja selle koostisosad hästi kirjeldada, et nooremad arendajad mõistaksid, mida neilt oodatakse. Halvasti formuleeritud ülesanne viib sageli vajaduseni midagi ümber teha, seega aitab kirjalik suhtlemine lõpetajatel töötada ladistributed meeskondades.

  • Oma töö tulemuste kirjalik esitlus. Oma õppeprojektide esitamiseks võivad vanemate kursuste üliõpilased kirjutada poste Habrisse, teadusartikleid ning lihtsalt aruandeid. Selleks on palju võimalusi — juba teiselt kursuselt algavad mõnes ülikoolis kursusetööd. Samuti võib essee olla kontrolli vorm — vormilt sarnane avaliku artikliga. Selline lähenemine on juba rakendatud НИУ ВШЭ-s.

    Kui ettevõte praktiseerib paindlikku lähenemist arendusele, tuleb oma töö tulemusi esitada väiksemates kogustes, kuid sagedamini. Selleks on oluline osata lühidalt edastada ühe spetsialisti või kogu meeskonna töö tulemus. Samuti korraldatakse täna paljudes ettevõtetes “ülevaateid” — aastaseid või Poolaastaseid. Töötajad arutavad töö tulemusi ja tulevikuväljavaateid. Edukas ülevaade on peamine põhjus karjääriredelil tõusmiseks ja boonusteks, näiteks Microsoftis, Acronises või Yandexis. Jah, sa võid hästi programmeerida, kuid “nurgas istudes” ka kõige andekam spetsialist kaotab sellele, kes oskab oma edu hästi esitlida.

  • Akadeemiline kirjutamine. Erakordselt tasub esile tuua akadeemilist kirjutamist. Üliõpilastele on kasulik tutvuda teaduslike tekstide kirjutamise reeglite, argumentide kasutamise, teabe otsimise erinevatest allikatest ja viidete vormistamisega nendele allikatele. Soovitav on seda teha inglise keeles, kuna rahvusvahelises akadeemilises kogukonnas on palju paremaid tekste, ning erinevatele erialadele on juba välja kujunenud teaduslike tulemuste esitamise mallid. Muidugi on akadeemilise kirjutamise oskused vajalikud ka venekeelsete publikatsioonide ettevalmistamisel, kuid häid kaasaegseid artiklite näiteid inglise keeles on palju vähem. Need oskused saab omandada vastava kursuse raames, mis on nüüd mitmetesse õpikavadele lisatud.
  • Kohtumiste korraldamine. Enamik üliõpilasi ei oska kohtumisteks valmistuda, protokolle pidada ja andmeid töödelda. Kuid kui seda oskust arendada kõrgkoolis, näiteks osaledes meeskonnaprojektides, saame vältida töötunde, mis on raisatud töökohtadel. Selleks on vajalik üliõpilaste projektitöö üle kontrolli teostamine, et õpetada neid kohtumisi efektiivselt läbiviima. Praktikas maksab see igale ettevõttele palju raha — kui mitu kõrge palgaga inimest veedab tund aega koosolekul, tahaks, et sellelt oleks vastav kasu.
  • Avalik esinemine. Paljud üliõpilased peavad avalikult esinema vaid diplomitöö kaitsmisel. Ja kaugelki mitte kõik ei ole selleks valmis. Olen näinud palju üliõpilasi, kes:
    • seisavad seljaga kuulajate poole,
    • kõiguvad, üritades komiteed transsi viia,
    • muravad pliiatseid, pastakaid ja näitajaid,
    • keersivad ringe,
    • vaatavad põrandale.

    See on normaalne, kui inimene esineb esmakordselt. Kuid selle stressiga tuleks alustada varakult — kaitstes kursusetöid sõbralikus õhkkonnas, oma kaasõpilaste seas.

    Lisaks on standardne praktika ettevõtetes anda töötajale võimalus esitada idee, saada selle jaoks rahastust, ametikoht või eriprojekt. Kuid kui sellele mõelda — see on sama kursusetöö kaitse, lihtsalt kõrgemal tasemel. Miks mitte treenida selliseid kasulikke karjäärioskusi õpingute ajal?

Mida ma vahele jäin?

Üks põhjus, miks selle postituse kirjutamine tuli, oli artikkel, mis avaldati Tjumeni Ülikooli veebilehel. Artikli autor keskendub ainult Venemaa üliõpilaste puudustele, nagu on täheldanud välisõpetajad. Minu kogemus õpetajana erinevates kõrgkoolides näitab, et Venemaa kooliharidus ja kõrgharidus annavad hea aluse. Venemaa üliõpilased on tugevad matemaatikas ja algoritmides, nendega on lihtsam professionaalset suhtlemist luua.

Välisüliõpilaste puhul võivad Venemaa õpetaja ootused vahel olla liiga kõrged. Näiteks, matemaatika baasekspertide tasemel sarnanevad kohtuvad India üliõpilased venelastega. Siiski võib neil bakalaureuseõppe lõpus puududa spetsiifilised teadmised. Head Euroopa üliõpilased omavad tõenäoliselt madalamat matemaatika ettevalmistust põhikooli tasemel.

Ja kui õpite või töötate ülikoolis, on juba nüüd võimalik arendada oma või üliõpilaste kommunikatsioonioskusi, laiendada põhialuseid ja harjutada programmeerimist. Selleks on Venemaa haridussüsteemis kõik võimalused olemas — tuleb vaid osata neid õigesti kasutada.

Olen rõõmus, kui jagate postituse kommentaarides linke kursustele ja meetoditele, mis aitavad tasakaalu hariduses saavutada, samuti muid viise, kuidas arendada pehmeid oskusi ülikooli ajal.

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster