Većina modernih programera obrazovala se na sveučilištima. S vremenom će se to promijeniti, no trenutno je situacija takva da dobri kadrovi u IT tvrtkama i dalje dolaze iz univerziteta. U ovom postu, Stanislav Protasov, direktor Acronisa za odnose s univerzitetima, dijeli svoje viđenje posebnosti sveučilišne pripreme budućih programera. Predavači, studenti i oni koji ih zapošljavaju mogu čak pronaći nekoliko korisnih savjeta u nastavku.
Posljednjih 10 godina predajem matematiku, algorithme, programske jezike i strojno učenje na raznim sveučilištima. Danas, osim svoje pozicije u Acronisu, također sam zamjenik pročelnika katedre za teorijsku i primijenjenu informatiku na MFTI-ju. Iz iskustva rada na dobrim ruskim (i ne samo) sveučilištima, izvukao sam neka zapažanja o pripremi studenata u računalnim disciplinama.
Pravilo od 30 sekundi više ne funkcionira
Siguran sam da ste se susreli s pravilom od 30 sekundi, koje kaže da programer mora razumjeti svrhu funkcije nakon brzog pogleda na njen kod. Ono je izmisliti davno, od tada su se pojavili brojni operativni sustavi, jezici, hardver i algoritmi. Pišem kod već 12 godina, ali nedavno sam vidio izvorne datoteke jednog proizvoda koje su mi na prvi pogled izgledale kao magične formule. Danas, ako niste uronjeni u predmetnu oblast, pravilo od 30 sekundi prestaje djelovati. U suprotnom, nećete imati dovoljno ni 30, ni 300 sekundi da shvatite što se dešava.
Na primjer, ako želite pisati upravljačke programe, morat ćete se uroniti u tu sferu, pročitati tisuće redaka specifičnog koda. Ovakvim pristupom učenju stručnjak dobiva 'flow' osjećaj. Kao u rapu, kada osjećaj dobre rime i pravog ritma dolazi bez posebne racionalizacije. Tako i dobro pripremljeni programer može lako prepoznati neučinkovit ili jednostavno loš kod, ne analizirajući detaljno gdje je došlo do kršenja stila ili korištenja neoptimalnog pristupa (no, objašnjenje ovog osjećaja može biti vrlo teško).
Specijalizacija i rastuća složenost dovode do toga da obrazovanje na razini bachelor više ne pruža mogućnost da se prouče sva područja dovoljno duboko. No upravo na toj razini obrazovanja potrebno je steći širok spektar znanja. Nakon toga, na magistarskoj razini ili na radu,bit će potrebno posvetiti neko vrijeme uranjanju u problematiku i specifičnosti područja, proučavanju žargona, programskih jezika i koda kolega, čitanju članaka i knjiga. Mislim da samo tako uz pomoć sveučilišta možemo "izgraditi prečku" za budućnost. .
Koji programski jezik je bolji za podučavanje na sveučilištu?

Na moje zadovoljstvo, nastavnici sveučilišta su već odustali od traženja pravog odgovora na pitanje: "Na čemu je bolje programirati?" Svađe oko toga što je bolje — C# ili Java, Delphi ili C++ — praktički su nestale. Pojava mnogih novih programskih jezika i nakupljanje pedagoškog iskustva doveli su do toga da se u akademskoj sredini ustalila spoznaja: za svaki jezik postoji svoje tržište.
Problem nastave s korištenjem određenog programskog jezika prestao je biti prioritet. Nije važno kojim jezikom se vodi tečaj. Najvažnija je dovoljna izražajnost jezika. Knjiga "" — dobra je ilustracija ove spoznaje. U ovom već klasičnom izdanju svi su primjeri navedeni na Javi — jeziku bez pokazatelja, ali s Garbage Collectorom. Teško da će netko raspravljati da je Java daleko od optimalnog izbora za pisanje visokoučinkovitog paralelnog koda. No za objašnjenje koncepta iznesenog u knjizi, jezik se pokazao pogodnim. Drugi primjer — Endrewa Yna, podučavan na jeziku Matlab u okruženju Octave. Danas bismo mogli odabrati drugi programski jezik, ali koja je, u biti, razlika, ako su važne ideje i pristupi?
Praktičnije i bliže stvarnosti
Tijekom posljednjih godina, istovremeno je u sve većem broju sveučilišta povećan broj praktičara. Ako su prije ruske sveučilišne programe aktivno kritizirali zbog njihove odvojenosti od stvarnosti, danas to ne možemo reći za IT obrazovanje. Prije 10 godina na sveučilištima gotovo da nije bilo predavača s pravim radnim iskustvom u industriji. Sada se sve češće na specijaliziranim katedrama nastava održava od strane praktičnih IT stručnjaka, koji predaju samo 1-2 kolegija u slobodno vrijeme od glavnog posla. Ovaj pristup opravdava se s aspekta kvalitetnog osposobljavanja kadrova, ažuriranja kurseva i, naravno, traženja potencijalnih zaposlenika za kompanije. Ne mislim da ću otkriti tajnu rekavši da podržavamo osnovnu katedru na MIPT-u i uspostavljamo odnose s drugim sveučilištima kako bismo pripremili studente koji bi mogli započeti svoju karijeru u Acronisu.
Matematičar ili programer?

Prethodni 'holivari' koji su se vodili oko programskih jezika preusmjerili su se u filozofski okvir. Sada se međusobno raspravljaju uvjetni 'programeri' i 'matematičari'. U načelu, ove škole bi se mogle izdvojiti u dva obrazovna programa, ali industrija još uvijek slabo razdvaja takve nijanse, i od sveučilišta do sveučilišta imamo sličnu edukaciju s malo drugačijim naglaskom. To znači da će i studentu i kompaniji u kojoj će raditi trebati dopuniti slagalicu znanja nedostajućim komadima.
Pojava praktičara na sveučilištima koji pišu industrijski kod na različitim jezicima daje studentima kvalitetniju vještinu razvoja. Budući da su dobro upoznati s implementacijama standardnih biblioteka, frameworkovima i tehnikama programiranja, praktični programeri podstiču u studentima želju za pisanjem dobrog koda, radeći to brzo i kvalitetno.
Ova korisna vještina, međutim, ponekad dovodi do stvaranja entuzijasta koji izmišljaju bicikl. Studenti programeri razmišljaju ovako: 'Što mi predstavlja napisati još 200 redaka dobrog koda koji će direktno riješiti postavljeni zadatak?'.
Nastavnici s klasičnim matematičkim obrazovanjem (npr. matematički fakultet ili primijenjena matematika) češće rade u polu-naučnim krugovima ili u području modeliranja i analize podataka. 'Matematičari' drugačije percipiraju probleme u domeni računalnih znanosti. Oni prvenstveno operiraju ne kodom, već algoritmima, teoremama i formalnim modelima. Važna prednost matematičkog pristupa je jasno principijelno razumijevanje onoga što se može, a što ne može riješiti. I kako to riješiti.
Stoga, nastavnici matematike pričaju o programiranju s naglaskom na teoriju. Studenti koji dolaze 'od matematičara' često nude dobro promišljena i teoretski potpunija rješenja, ali obično su neoptimalna s obzirom na jezik i često jednostavno loše napisana. Takav student smatra da je njegova glavna svrha demonstrirati sposobnost rješavanja sličnih problema u načelu. Međutim, implementacija može biti slabija.
Djece koja su u školi ili na prvim godinama fakulteta odgajana od strane programera donose sa sobom 'vrlo lijep bicikl', koji, međutim, obično ne radi previše učinkovito asimptotski. Oni, naprotiv, ne postavljaju pred sebe zadatak dubokog teoretiziranja i ne obraćaju se udžbenicima u potrazi za optimalnim rješenjima, dajući prednost lijepom kodu.
Na intervjuima sa studentima u različitim sveučilištima obično vidim koja 'škola' stoji iza njihovog obrazovanja. I gotovo nikada nisam naletio na idealnu ravnotežu u osnovnom obrazovanju. U djetinjstvu, u mom gradu, moglo se pripremati za olimpijsku matematiku, ali nije bilo niti jednog kruga za programiranje. Sada, u krugovima, djeca uče programirati na 'popularnim' Go i Python. Stoga već na razini prijema na fakultet postoje razlike u pristupima. Smatram da je na fakultetu važno održavati obje vještine, inače će u kompaniju doći ili specijalist s nedostatnom teorijskom osnovom, ili osoba koja nije naučila i ne želi pisati dobar kod.
Kako ipak 'napumpati prečicu' za buduće

Razumljivo je da u takvim okolnostima student jednostavno odabire ono što mu se više sviđa. Predavač samo prenosi stajalište koje mu je bliže. No svi će imati koristi ako je kod napisan lijepo, a s aspekta algoritama sve bude jasno, obrazloženo i učinkovito.
- IT horizont. Diplomac preddiplomskog studija u području računalnih znanosti već je spreman stručnjak s razvijenim tehničkim horizontom, koji je vjerojatno odabrao svoj profil. No na prvim godinama ne znamo čime će se baviti. Može ići u znanost ili analitiku, a možda, naprotiv, svakodnevno pisati ogroman količinu koda. Stoga studentu treba predstaviti sve aspekte rada u IT sektoru, upoznati ga sa svim alatima. Idealno je ako predavači s teorijskih kolegija pokažu vezu s praksom (i obrnuto).
- Točka rasta. Ne dopustiti sklizanje u ekstremne stavove - to je u interesu samog studenta. Razumjeti tko ste - "matematičar" ili "programer" - nije teško. Dovoljno je slušati prvu intuiciju prilikom rješavanja zadatka: što želite učiniti - zaviriti u udžbenik u potrazi za optimalnim pristupom ili napisati nekoliko funkcija koje će kasnije sigurno biti korisne? Na temelju toga možete graditi daljnju komplementarnu putanju svog obrazovanja.
- Alternativni izvori znanja. Dogodi se da je program dobro uravnotežen, ali "Sistemsko programiranje" i "Algoritmi" vodi potpuno različita osoba, a jednim studentima je bliži prvi predavač, dok su drugima draži drugi. No čak i ako vam profesor nije simpatičan, to nije razlog da zanemarite neke predmete u korist drugih. Same bachelorke su zainteresirane za to da pronađu u sebi volju za rad s izvorima znanja i ni u kom slučaju ne smiju se oslanjati na radikalna mišljenja, poput "matematika je kralj znanosti, najvažnije je poznavati algoritme" ili "dobar kod nadoknađuje sve ostalo".
Produbite svoje znanje u teoriji obraćajući se specijaliziranoj literaturi i online tečajevima. Usavršavanje vještina u raznim programskim jezicima moguće je na Courseri, Udacityju ili Stepiku, gdje je dostupno puno raznih tečajeva. Također, studenti često počnu gledati napredne tečajeve za jezike kada imaju osjećaj da predavač algoritama dobro poznaje matematiku, ali ne može odgovoriti na složena pitanja u području implementacije. Neće se svi sa mnom složiti, ali u mojoj praksi dobro se pokazala , na kojoj se postupno razrađuju sve složenije osobitosti jezika. Općenito, odaberite tečaj s visokim ocjenama, od uglednih tvrtki ili institucija.
Soft vještine

Stupajući iz sveučilišta na posao u bilo koju kompaniju, od startupa do velike korporacije, studenti čak i najprestižnijih sveučilišta se često slabo adaptiraju na stvarno radno okruženje. Razlog tome je što se danas sveučilišta puno "brišu" s studentima. Čak i propuštajući brojne nastave, ne pripremajući se na vrijeme za provjere i ispite, zakasnivši, svaki može položiti ispit i ponovo ga polažući — i na kraju dobiti diplomu.
Ipak, danas postoje svi uvjeti za to da se studente pripremi za zreli život i samostalno profesionalno djelovanje. Morat će ne samo programirati, već i komunicirati. I to se također treba podučavati. Na sveučilištima postoje različiti formati za usavršavanje ovih vještina, ali, nažalost, često im se ne posvećuje dovoljna pažnja. Ipak, imamo mnoštvo mogućnosti za stjecanje vještina učinkovite timske suradnje.
- Pisana poslovna komunikacija. Nažalost, većina stručnjaka koji izlaze sa sveučilišta nema pojma o etici dopisivanja. Specifičnosti komunikacije u messengerima uključuju razmjenu poruka noću i danju te korištenje razgovornog stila i neformalne leksike. Ipak, vještinu pisane komunikacije moglo bi se vježbati kroz komunikaciju studenata s fakultetom i sveučilištem.
U praksi menadžeri često se susreću s potrebom da razlože veliki projekt na manje zadatke. Za to je važno dobro opisati svaki zadatak i njegove sastavnice kako bi mlađi programeri shvatili što se od njih traži. Loše postavljen zadatak često dovodi do potrebe za prepravkom, stoga iskustvo u pisanju komunikacije pomaže diplomcima da rade u distribuiranim timovima.
- Pisna prezentacija rezultata svog rada. Za prezentaciju svojih školskih projekata studenti više godine mogu pisati postove na Habr, naučne članke, kao i jednostavne izveštaje. Postoji mnogo mogućnosti za to — već od druge godine nekih visokoškolskih ustanova počinju seminarski radovi. Takođe, eseji se mogu koristiti kao oblik evaluacije — obično su oblikom bliži publicističkom članku. Ovaj pristup već je implementiran na HSE.
Ako kompanija praktikuje fleksibilan pristup u razvoju, predstavljati rezultate svog rada mora se u manjim delovima, ali češće. Važno je znati kratko preneti rezultat rada jednog stručnjaka ili celog tima. Takođe, mnoge kompanije danas organizuju "revizije" — godišnje ili polugodišnje. Zaposleni raspravljaju o rezultatima i perspektivama rada. Uspešna revizija je glavni razlog za napredovanje u karijeri, nagrade, na primer, u Microsoftu, Acronisu ili Yandexu. Da, možete dobro programirati, ali "sediti u uglu" čak i vrhunski stručnjak uvek će izgubiti od onoga ko zna dobro predstaviti svoj uspeh.
- Akademsko pisanje. Posebno se ističe akademsko pisanje. Studentima je korisno upoznati se s pravilima pisanja naučnih tekstova, korišćenja argumenata, pretraživanja informacija iz raznih izvora i formatiranja referenci na te izvore. Preporučljivo je to raditi na engleskom jeziku, jer u međunarodnoj akademskoj zajednici ima mnogo boljih tekstova, a za različite discipline već postoje ustaljeni obrasci predstavljanja naučnih rezultata. Naravno, veštine akademskog pisanja su potrebne i pri pripremi publikacija na ruskom jeziku, ali primera dobrih savremenih članaka na engleskom ima znatno manje. Ove veštine se mogu steći kroz odgovarajući kurs, koji se sada uključuje u mnoge obrazovne programe.
- Vođenje sastanaka. Većina studenata ne zna kako se pripremiti za sastanke, voditi zapisnike i obrađivati podatke. No, ako razvijemo ovu vještinu na sveučilištu, na primjer, sudjelovanjem u timskim projektima, možemo izbjeći gubljenje vremena na radnom mjestu. Za to je potrebna kontrola nad projektima studenata kako bismo ih naučili učinkovito voditi sastanke. U praksi to svaki korporacija košta pravo bogatstvo — jer ako nekoliko ljudi s visokim plaćama provede sat vremena na sastanku, želimo da to donese odgovarajući povrat.
- Javno izlaganje. Mnogi studenti suočavaju se s potrebom za javnim izlaganjem samo na obrani diplomskog rada. A rijetko tko je za to spreman. Vidio sam mnoge studente koji:
- stoje okrenuti leđima slušateljima,
- ljuljaju se, pokušavajući uvjeriti komisiju,
- lome olovke, olovke i pointere,
- šetaju u krug,
- gledaju u pod.
To je normalno kada netko nastupa prvi put. No, s tim stresom treba početi raditi ranije — na obrani seminarskih radova u prijateljskoj atmosferi, među kolegama.
Osim toga, standardna praksa u korporacijama je dati zaposleniku priliku da predloži ideju, dobije financiranje za nju, poziciju ili dodijeljeni projekt. No, ako razmislimo — to je ista obrana seminarskog rada, samo na višoj razini. Zašto ne učiti takve korisne karijerne vještine tijekom studija?
Što sam propustio?
Jedan od razloga za pisanje ovog posta bila je članak, . Autor članka fokusira se samo na nedostatke ruskih studenata koje su primijetili strani profesori. Praksa mog predavanja na različitim sveučilištima pokazuje da rusko osnovno i visoko obrazovanje daje dobru osnovu. Ruski studenti dobro su upućeni u matematiku i algoritme, s njima je lakše uspostaviti profesionalnu komunikaciju.
U slučaju stranih studenata, s druge strane, očekivanja ruskog nastavnika ponekad mogu biti previsoka. Na primjer, na osnovnoj razini matematičkog znanja, indijski studenti koje sam upoznao su slični ruskim. Međutim, ponekad im nedostaju specijalizirana znanja na kraju preddiplomskog studija. Dobri europski studenti će vjerojatno imati slabiju matematičku naobrazbu na razini srednje škole.
Ako studirate ili radite na visokom učilištu, možete već sada početi raditi na komunikacijskim vještinama (svojim ili studentima), proširiti temeljnu bazu i vježbati programiranje. Za to su u sustavu ruskog obrazovanja osigurane sve mogućnosti — potrebno je samo pravilno ih iskoristiti.
Bit ću srećan ako u komentarima na post podijelite svoje linkove na tečajeve i metode koje pomažu izjednačiti obrazovne razlike, kao i druge načine za razvijanje softverskih vještina tijekom studija na visokom učilištu.
Izvor: habr.com
