Cum să extragi maximum din educația în Știința Computerelor

Majoritatea programatorilor moderni au studiat la universitate. De-a lungul timpului, acest lucru se va schimba, dar în prezent, companiile IT tot primesc cei mai buni specialiști din universități. În acest articol, Stanislav Protasov, directorul Acronis pentru relațiile cu universitățile, își împărtășește viziunea despre pregătirea universitară a viitorilor programatori. Profesorii, studenții și angajatorii lor pot găsi chiar mai jos câteva sfaturi utile.

Cum să extragi maximum din educația în Știința Computerelor

În ultimii 10 ani, am predat matematică, algoritmi, limbaje de programare și învățare automată la diverse universități. Astăzi, pe lângă poziția mea la Acronis, sunt de asemenea viceșef al catedrei de informatică teoretică și aplicată la MFTI. Din experiența acumulată în universități rusești de prestigiu (și nu numai), am observat câteva aspecte legate de pregătirea studenților în disciplinele informatice.

Regula de 30 de secunde nu mai funcționează

Sunt sigur că ați auzit de regula de 30 de secunde, care afirmă că un programator ar trebui să înțeleagă scopul unei funcții după o privire rapidă asupra codului său. Aceasta a fost inventată cu mult timp în urmă, de atunci au apărut numeroase sisteme de operare, limbaje, hardware și algoritmi. Scriu cod de 12 ani, dar recent am văzut sursa unui produs, care la prima vedere mi s-a părut o vrajă magică. Astăzi, dacă nu ești familiarizat cu domeniul de studiu, regula de 30 de secunde încetează să funcționeze. În caz contrar, nu îți vor ajunge nici 30, nici 300 de secunde pentru a înțelege ce și cum.

De exemplu, dacă îți dorești să scrii drivere, va trebui să te aprofundezi în acest domeniu și să citești mii de linii de cod specific. Cu o astfel de abordare a studierii subiectului, specialistul dezvoltă un „sentiment de flow”. Asemenea unui rapper, când senzația unei rime bune și a unui ritm corect apare fără o raționalizare specială. La fel, un programator bine pregătit poate recunoaște ușor un cod ineficient sau pur și simplu prost, fără a înțelege în detaliu unde s-a produs o încălcare a stilului sau a fost folosită o abordare neoptimă (însă este destul de dificil să explici această senzație).

Specializarea și complexitatea în creștere fac ca o diplomă de licență să nu mai ofere posibilitatea de a studia toate domeniile suficient de profund. Totuși, exact la acest nivel de educație trebuie să îți lărgești orizonturile. După aceea, în cadrul unui program de masterat sau în cadrul muncii, va trebui să dedici ceva timp pentru a te familiariza cu problemele și specificul domeniului, să studiezi jargonul, limbajele de programare și codul colegilor, să citești articole și cărți. Mi se pare că doar așa, cu ajutorul universității, poți „întări bara orizontală” pentru viitorii specialiști T-shaped.

Care limbaj de programare ar trebui predat la universitate?

Cum să extragi maximum din educația în Știința Computerelor
Cu bucurie observ că profesorii universitari au renunțat deja la căutarea răspunsului corect la întrebarea: „Pe ce ar fi mai bine să programăm?”. Disputele despre ce este mai bun — C# sau Java, Delphi sau C++ — au scăzut semnificativ. Apariția unui număr mare de noi limbaje de programare și acumularea experienței pedagogice au condus la înțelegerea în mediul academic că fiecare limbaj are propria sa nișă.

Problema predării folosind un anumit limbaj de programare a încetat să mai fie prioritara. Nu contează în ce limbaj este susținut cursul. Cel mai important este expresivitatea suficientă a limbajului. Cartea „The Art of Multiprocessor Programming” reprezintă o ilustrare bună a acestei observații. În această lucrare care a devenit clasică, toate exemplele sunt prezentate în Java — un limbaj fără pointere, dar cu Garbage Collector. Cu siguranță, nimeni nu va contesta că Java este departe de a fi alegerea optimă pentru scrierea codului paralel de înaltă performanță. Dar pentru explicarea conceptelor prezentate în carte, limbajul s-a dovedit a fi potrivit. Un alt exemplu este cursul clasic de învățare automată al lui Andrew Ng, predat în limbajul Matlab în mediu Octave. Astăzi s-ar putea alege un alt limbaj de programare, dar ce importanță are, dacă ideile și abordările sunt cele care contează?

Este mai practic și mai aproape de realitate

În același timp, în ultimii ani, numărul practicienilor din universități a crescut semnificativ. Dacă anterior programele universitare rusești erau criticate pentru faptul că erau deconectate de la realitate, astăzi nu se mai poate afirma același lucru despre educația IT. Acum 10 ani, universitățile aveau aproape niciun cadru didactic cu experiență reală în industrie. În prezent, tot mai des, la catedrele de profil predau nu cadre didactice angajate, ci specialiști IT practicieni, care țin doar 1-2 cursuri în timpul liber de la locul de muncă. Această abordare se dovedește benefică din perspectiva pregătirii calitative a forței de muncă, actualizării cursurilor și, desigur, căutării potențialilor angajați pentru companie. Nu cred că voi descoperi un secret, spunând că susținem catedra de bază de la MFTI și stabilim relații cu alte universități, inclusiv pentru a pregăti studenți care ar putea să-și înceapă cariera la Acronis.

Matematician sau programator?

Cum să extragi maximum din educația în Știința Computerelor
Discuțiile aprinse, care anterior se învârteau în jurul limbajelor de programare, au căpătat o direcție filozofică. Acum se ceartă între ei așa-numiții „programatori” și „matematicieni”. În principiu, aceste școli ar putea fi separat în două programe educaționale, dar industria încă nu distinge bine astfel de nuanțe, iar de la o universitate la alta, avem educație similară cu un ușor accent diferit. Asta înseamnă că, atât studentul, cât și compania în care va lucra ulterior, vor trebui să completeze puzzle-ul cunoștințelor cu piese lipsă.

Apariția practicienilor în universități, care scriu cod industrial în diferite limbaje, oferă studenților abilități de dezvoltare de calitate superioară. Fiind bine familiarizați cu implementările bibliotecilor standard, cadrelor și tehnicilor de programare, programatorii practicieni insuflă studenților dorința de a scrie cod bun, de a face asta rapid și de calitate.

Această abilitate utilă, totuși, uneori duce la apariția pasionaților de a inventa roata. Studenții-programatori gândesc astfel: „ce-mi costă să scriu încă 200 de linii de cod bun, care va rezolva problema pusă direct?”.

Cadrele didactice cu o educație clasică în matematică (de exemplu, matematică pură sau matematică aplicată) lucrează mai des în mediul științific sau în domeniul modelării și analizei datelor. „Muzicienii” văd problemele din domeniul Informatica în mod diferit. Ei operează în primul rând cu algoritmi, teoreme și modele formale, nu cu cod. Un avantaj important al abordării matematice este înțelegerea clară a ceea ce poate și ceea ce nu poate fi rezolvat și cum să se rezolve.

Prin urmare, profesorii de matematică discută despre programare cu o orientare spre teorie. Studenții care vin „de la matematicieni” propun adesea soluții bine gândite și teoretic superioare, dar, de obicei, acestea sunt suboptimale din punctul de vedere al limbajului și, de multe ori, pur și simplu neglijente. Un astfel de student consideră că scopul său principal este să demonstreze abilitatea de a rezolva asemenea probleme în principiu. Însă implementarea poate lăsa de dorit.

Tinerii care au fost crescuți de programatori în școală sau în primii ani de facultate aduc cu ei „o bicicletă foarte frumoasă” care, însă, de obicei, nu funcționează foarte eficient asimptotic. Ei, dimpotrivă, nu își propun să teoretizeze profund și să caute în manuale soluții optime, preferând un cod elegant.

La diverse universități, în timpul interviurilor studenților, pot observa care este „școala” de bază pe care o au în educația lor. Și aproape nu am întâlnit un echilibru ideal în educația de bază. În copilărie, în orașul meu, puteai să te pregătești pentru olimpiadele de matematică, dar nu existau cercuri de programare. Acum, în cercuri, copiii învață să programeze în limbaje „la modă” precum Go și Python. Prin urmare, chiar la nivelul admiterii în universități există discrepanțe în abordări. Consider că este important să susținem abilitățile amândouă la universitate, altfel în companie va veni să lucreze fie un specialist cu o bază teoretică insuficientă, fie o persoană care nu a învățat și nu dorește să scrie cod de calitate.

Cum să „antrenăm bara de tracțiune” pentru viitorii specialiști T-shaped?

Cum să extragi maximum din educația în Știința Computerelor
Este clar că, în astfel de condiții, studentul alege pur și simplu ceea ce îi place mai mult. Profesorul, pe de altă parte, transmite un punct de vedere care îi este mai aproape. Dar toată lumea va beneficia dacă atât codul este scris frumos, cât și din punct de vedere al algoritmilor, totul va fi clar, justificat și eficient.

  • Orizont IT. Absolventul de licență în domeniul Computer Science este deja un specialist pregătit, cu un orizont tehnic bine dezvoltat, care, probabil, și-a ales profilul. Dar în anii de început nu știm ce va face el sau ea. Poate se va îndrepta către știință sau analiză, sau poate, dimpotrivă, va scrie un volum uriaș de cod în fiecare zi. Prin urmare, studentul trebuie să fie expus tuturor aspectelor muncii în domeniul IT, să fie familiarizat cu toate instrumentele. Ideal ar fi ca profesorii să facă legătura între cursurile teoretice și practică (și viceversa).
  • Punct de creștere. A nu permite căderea în extreme este în interesul studentului. Să înțelegi cine ești — „matematician” sau „programator” — nu e complicat. Este suficient să asculți prima tendință atunci când rezolvi o problemă: ce ți-ar plăcea să faci — să consulți un manual în căutarea unei abordări optime sau să scrii câteva funcții care ulterior vor fi cu siguranță utile? Pe baza acestui lucru, se poate construi o traiectorie complementară a învățării tale.
  • Surse alternative de cunoștințe. Se întâmplă uneori ca programul să fie bine echilibrat, dar „Programarea de sistem” și „Algoritmii” sunt susținute de oameni complet diferiți, iar unii studenți se simt mai apropiați de primul profesor, iar alții de al doilea. Dar chiar dacă nu-ți place profesorul, nu este un motiv să neglijezi unele materii în favoarea altora. Studenții însuși sunt interesați să găsească în ei voința de a lucra cu surse de cunoștințe și nici într-un caz să nu se încreadă în opinii radicale, cum ar fi „matematica este regina științelor, cel mai important este să cunoști algoritmii” sau „un cod bun compensează tot ce e altceva”.

Pentru a-ți aprofunda cunoștințele în teorie, poți apela la literatura specializată și cursurile online. Abilitatea de a lucra cu limbaje de programare poate fi îmbunătățită pe platforme precum Coursera, Udacity sau Stepik, care oferă o varietate mare de cursuri. De asemenea, studenții încep adesea să urmeze cursuri avansate de limbaje, dacă simt că profesorul de algoritmi are cunoștințe solide de matematică, dar nu poate răspunde la întrebări complexe legate de aplicații. Nu toți vor fi de acord cu mine, dar în experiența mea, aceasta a fost o alegere bună. specializarea C++ de la Yandex, care examinează în mod secvențial tot mai multe caracteristici complexe ale limbajului. În general, alege un curs cu recenzii înalte, de la companii sau instituții de învățământ de prestigiu.

Soft skills

Cum să extragi maximum din educația în Știința Computerelor
La ieșirea din facultate și intrarea în orice companie, de la startup-uri la mari corporații, studenții chiar și de la cele mai bune universități se dovedește că sunt slab adaptați la mediul de lucru real. Problema este că astăzi universitățile au tendința de a „cocoloși” studenții. Chiar și după ce lipsesc de la numeroase cursuri, fără a se pregăti la timp pentru teste și examene, dormind sau întârziind la examen, fiecare poate trece și să repete — și în cele din urmă să obțină totuși diploma.

Cu toate acestea, astăzi există toate condițiile necesare pentru ca studenții să fie pregătiți pentru viața de adult și activitatea profesională autonomă. Aceștia nu vor trebui doar să programeze, ci și să comunice. Și acest aspect trebuie să fie de asemenea învățat. Universitățile au diferite formate pentru dezvoltarea acestor abilități, dar, din păcate, adesea nu se acordă suficientă atenție. Cu toate acestea, avem la dispoziție o mulțime de oportunități pentru a obține abilități de lucru eficient în echipă.

  • Comunicarea scrisă în afaceri. Din păcate, majoritatea specialiștilor la ieșirea din facultate nu au noțiuni despre eticheta corespondenței. Specificitatea comunicării în mesagerie, schimbul de mesaje noaptea și ziua, folosirea stilului conversațional și a limbajului informal. Totuși, practicarea abilităților de scriere ar fi putut fi realizată prin comunicarea studentului cu facultatea și universitatea.

    În practică, managerii se confruntă adesea cu necesitatea de a descompune un proiect mare în sarcini mai mici. Pentru aceasta, este important să descrie bine fiecare sarcină și componentele sale, astfel încât dezvoltatorii juniori să înțeleagă ce li se cere. O sarcină prost formulată duce adesea la necesitatea de a face modificări, iar experiența în comunicarea scrisă îi ajută pe absolvenți să lucreze în echipe distribuite.

  • Prezentarea în scris a rezultatelor muncii proprii. Pentru a-și prezenta proiectele academice, studenții din anii terminali pot scrie articole pe Habr, articole științifice sau pur și simplu rapoarte. Există multe oportunități pentru aceasta – deja din anul II, în unele universități încep lucrările de seminar. De asemenea, se poate folosi eseul ca formă de evaluare – de obicei, acesta este mai similar unei articole de gazetă. Această abordare a fost deja implementată la NHU HSE.

    Dacă o companie practică o abordare flexibilă în dezvoltare, este necesar să se prezinte rezultatele muncii în porții mai mici, dar mai frecvent. Este important să poți comunica concis rezultatul muncii unui specialist sau al întregii echipe. De asemenea, în multe companii se organizează astăzi "revizuiri" – anuale sau semestriale. Angajații discută rezultatele și perspectivele muncii. O revizuire de succes este principala cauză a avansării în carieră, a primirii de bonusuri, de exemplu, la Microsoft, Acronis sau Yandex. Da, poți să programezi bine, dar stând „în colț” chiar și un specialist excelent va pierde întotdeauna în fața celui care știe să își prezinte bine succesul.

  • Scrierea academică. În mod special, merită menționată scrierea academică. Este util pentru studenți să se familiarizeze cu regulile scrierii textelor științifice, utilizării argumentelor, căutării informațiilor din diverse surse și formatarea citatelor din aceste surse. Este de preferat să facă acest lucru în limba engleză, deoarece în comunitatea academică internațională există mult mai multe texte de bună calitate, iar pentru diverse discipline există deja șabloane stabilite pentru prezentarea rezultatelor științifice. Desigur, abilitățile de scriere academică sunt necesare și pentru pregătirea publicațiilor în limba română, dar exemplele de articole moderne bune în engleză sunt cu mult mai puține. Aceste abilități pot fi obținute în cadrul unui curs corespunzător, care acum face parte din multe programe educaționale.
  • Conducerea întâlnirilor. Majoritatea studenților nu știu cum să se pregătească pentru întâlniri, să conducă procesele verbale și să prelucreze datele. Dar, dacă dezvoltăm această abilitate în universitate, de exemplu, participând la proiecte de grup, putem evita pierderea de timp în mediul de lucru. Pentru aceasta, este necesar un control asupra muncii de proiect a studenților, pentru a-i învăța cum să conducă întâlniri eficient. În practică, asta costă fiecare corporație o sumă considerabilă — deoarece dacă mai multe persoane, care câștigă un salariu mare, petrec o oră din timpul de lucru în cadrul unei întâlniri, este de dorit să obțină un retur corespunzător.
  • Vorbitul în public. Mulți studenți se confruntă cu necesitatea de a vorbi în public doar la susținerea lucrării de licență. Și departe de toți sunt pregătiți pentru asta. Am văzut mulți studenți care:
    • stau cu spatele la ascultători,
    • se leagănă, încercând să introducă comisia într-o tranșă,
    • rup pixuri, creioane și rigle,
    • se plimbă în cercuri,
    • se uită în jos.

    Este normal ca o persoană să vorbească pentru prima dată. Dar cu acest stres trebuie să începem să lucrăm mai devreme — de la susținerea lucrărilor de curs într-o atmosferă prietenoasă, printre colegi.

    În plus, practica standard în corporații este de a oferi angajatului posibilitatea de a propune o idee, de a obține finanțare pentru aceasta, o poziție sau un proiect dedicat. Dar, dacă stăm să ne gândim — aceasta este aceeași susținere a lucrării de curs, doar la un nivel mai înalt. De ce să nu exersăm aceste abilități utile pentru carieră în timpul studiilor?

Ce am omis?

Unul dintre motivele pentru care am scris acest post a fost un articol, publicat pe site-ul Universității Tiumen,. Autorul articolului se concentrează doar pe dezavantajele studenților ruși, observate de profesorii străini. Practica predării mele în diferite universități arată că educația școlară și superioară din Rusia oferă o bază bună. Studenții ruși sunt bine pregătiți în matematică și algoritmi, este mai ușor să construiești comunicarea profesională cu ei.

În cazul studenților străini, așteptările profesorului rus pot fi uneori exagerate. De exemplu, la nivelul pregătirii de bază în matematică, studenții indieni pe care i-am întâlnit seamănă cu cei ruși. Totuși, le lipsesc uneori cunoștințele specifice la finalul studiilor universitare. Studenții europeni buni vor avea, de obicei, o pregătire în matematică la un nivel școlar mai puțin solid.

Și dacă studiezi sau lucrezi într-o universitate, poți deja să începi să îți dezvolți abilitățile de comunicare (ale tale sau ale studenților), să îți extinzi baza de cunoștințe fundamentale și să exersezi programarea. Sistemul educațional rus oferă toate posibilitățile necesare - trebuie doar să le folosești corect.

Aș fi bucuros dacă ai împărtăși în comentariile la postare linkuri către cursurile și metodele care te ajută să echilibrezi educația, precum și alte modalități de a-ți dezvolta abilitățile soft în timpul studiilor universitare.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster