Hoe u het meeste uit een computerwetenschappelijk onderwijs kunt halen

De meeste moderne programmeurs hebben hun opleiding aan universiteiten genoten. In de loop van de tijd zal dit veranderen, maar nu zijn de zaken zo dat goed personeel in IT-bedrijven nog steeds afkomstig is van universiteiten. In deze post vertelt Stanislav Protasov, directeur Universiteitsrelaties van Acronis, over zijn visie op de kenmerken van universitaire opleiding voor toekomstige programmeurs. Leraren, studenten en degenen die hen inhuren, vinden misschien zelfs enkele nuttige tips onder de snit.

Hoe u het meeste uit een computerwetenschappelijk onderwijs kunt halen

De afgelopen 10 jaar heb ik wiskunde, algoritmen, programmeertalen en machine learning gegeven aan verschillende universiteiten. Tegenwoordig ben ik naast mijn functie bij Acronis ook plaatsvervangend hoofd van de afdeling theoretische en toegepaste informatica bij MIPT. Vanuit mijn ervaring met werken aan goede Russische (en niet alleen) universiteiten, heb ik enkele opmerkingen gemaakt over de voorbereiding van studenten in computerdisciplines.

De 30-secondenregel werkt niet meer

Ik ben er zeker van dat je de 30-secondenregel bent tegengekomen, die stelt dat een programmeur het doel van een functie moet begrijpen na een snelle blik op de code ervan. Het is lang geleden uitgevonden en sindsdien zijn er veel besturingssystemen, talen, hardware en algoritmen verschenen. Ik schrijf al twaalf jaar code, maar relatief recent zag ik de broncode voor één product, wat mij op het eerste gezicht magische spreuken leek. Als u zich tegenwoordig niet verdiept in het onderwerp, werkt de 12-secondenregel niet meer. Anders zijn niet alleen 30, maar ook 30 seconden niet genoeg om erachter te komen wat wat is.

Als u bijvoorbeeld stuurprogramma's wilt schrijven, moet u zich in dit gebied verdiepen en duizenden regels specifieke code lezen. Met deze benadering van het bestuderen van een onderwerp ontwikkelt een specialist een ‘gevoel van flow’. Zoals bij rap, wanneer het gevoel van een goed rijm en het juiste ritme verschijnt zonder speciale rationalisatie. Op dezelfde manier kan een goed opgeleide programmeur ineffectieve of eenvoudigweg slechte code gemakkelijk herkennen zonder gedetailleerd te onderzoeken waar een stijlschending heeft plaatsgevonden of een suboptimale aanpak is gebruikt (maar dit gevoel kan erg moeilijk uit te leggen zijn).

Specialisatie en toenemende complexiteit leiden ertoe dat een bacheloropleiding niet langer de mogelijkheid biedt om alle vakgebieden voldoende te verdiepen. Maar het is juist op dit opleidingsniveau dat je een visie moet verwerven. Daarna zul je op de graduate school of op het werk wat tijd moeten besteden aan het onderdompelen in de problemen en details van het vakgebied, het bestuderen van jargon, programmeertalen en code van collega's, het lezen van artikelen en boeken. Het lijkt mij dat dit de enige manier is om, met de hulp van de universiteit, de lat hoger te leggen voor de toekomst. T-vormige specialisten.

Welke programmeertaal kun je het beste op de universiteit doceren?

Hoe u het meeste uit een computerwetenschappelijk onderwijs kunt halen
Tot mijn vreugde hebben universitaire docenten het zoeken naar het juiste antwoord op de vraag: “Wat is de beste taal om in te programmeren?” al opgegeven? De discussie over wat beter is – C# of Java, Delphi of C++ – is vrijwel verdwenen. De opkomst van veel nieuwe programmeertalen en de accumulatie van pedagogische ervaring hebben geleid tot een gevestigd begrip in de academische omgeving: elke taal heeft zijn eigen niche.

Het probleem van het lesgeven in een of andere programmeertaal is niet langer een prioriteit. Het maakt niet uit in welke taal de cursus wordt gegeven. Het belangrijkste is voldoende expressiviteit van de taal. Boek "De kunst van het programmeren met meerdere processors” is een goede illustratie van deze observatie. In deze nu klassieke editie worden alle voorbeelden gepresenteerd in Java - een taal zonder verwijzingen, maar met Garbage Collector. Bijna niemand zou beweren dat Java verre van de optimale keuze is voor het schrijven van hoogwaardige parallelle code. Maar de taal was geschikt om de concepten uit het boek uit te leggen. Een ander voorbeeld - klassieke machine learning-cursus Andrew Nna, gaf les in Matlab in de Octave-omgeving. Tegenwoordig zou je een andere programmeertaal kunnen kiezen, maar wat maakt het eigenlijk uit als de ideeën en benaderingen belangrijk zijn?

Praktischer en dichter bij de realiteit

Tegelijkertijd zijn er de afgelopen jaren veel meer beoefenaars aan universiteiten gekomen. Terwijl eerdere Russische universitaire programma's actief werden bekritiseerd omdat ze los stonden van de werkelijkheid, kan dat vandaag de dag niet meer worden gezegd over IT-onderwijs. Tien jaar geleden waren er bijna geen docenten aan universiteiten met echte ervaring in de sector. Tegenwoordig worden de lessen op een gespecialiseerde afdeling steeds vaker niet gegeven door fulltime leraren informatica, maar door praktiserende IT-specialisten die in hun vrije tijd slechts 10-1 cursussen geven naast hun hoofdwerk. Deze aanpak rechtvaardigt zichzelf vanuit het oogpunt van hoogwaardige personeelstraining, het bijwerken van cursussen en natuurlijk het zoeken naar potentiële werknemers in het bedrijf. Ik denk niet dat ik het geheim zal onthullen door te zeggen dat we een basisafdeling bij MIPT ondersteunen en relaties opbouwen met andere universiteiten, onder meer om studenten voor te bereiden die hun carrière bij Acronis zouden kunnen beginnen.

Wiskundige of programmeur?

Hoe u het meeste uit een computerwetenschappelijk onderwijs kunt halen
Heilige oorlogen, die voorheen rond programmeertalen draaiden, zijn een filosofische richting ingeslagen. Nu zijn de zogenaamde ‘programmeurs’ en ‘wiskundigen’ met elkaar in discussie. In principe zouden deze scholen kunnen worden onderverdeeld in twee onderwijsprogramma's, maar de industrie is nog steeds slecht in het scheiden van dergelijke subtiliteiten, en van universiteit tot universiteit hebben we vergelijkbaar onderwijs met een iets andere focus. Dit betekent dat zowel de student als het bedrijf waarin hij blijft werken de kennispuzzel zal moeten aanvullen met de ontbrekende stukjes.

De opkomst van beoefenaars op universiteiten die industriële code in verschillende talen schrijven, geeft studenten betere ontwikkelingsvaardigheden. Omdat ze goed bekend zijn met implementaties van standaardbibliotheken, raamwerken en programmeertechnieken, wekken praktiserende programmeurs bij studenten de wens op om goede code te schrijven, om dit snel en efficiënt te doen.

Deze nuttige vaardigheid leidt er echter soms toe dat mensen het wiel opnieuw uitvinden. Programmeerstudenten denken zo: “Moet ik nog eens 200 regels goede code schrijven die het probleem direct zal oplossen?”

Docenten die een klassieke wiskundige opleiding hebben genoten (bijvoorbeeld van de Faculteit Wiskunde of Toegepaste Wiskunde) werken vaak in een pseudo-wetenschappelijke omgeving, of op het gebied van modellering en data-analyse. ‘Wiskundigen’ zien problemen op het gebied van de informatica anders. Ze werken in de eerste plaats niet met code, maar met algoritmen, stellingen en formele modellen. Een belangrijk voordeel van de wiskundige benadering is een duidelijk fundamenteel begrip van wat wel en niet kan worden opgelost. En hoe je het kunt oplossen.

Daarom praten wiskundeleraren over programmeren met een voorkeur voor theorie. Studenten met een “wiskundeachtergrond” zullen eerder met goed doordachte en theoretisch superieure oplossingen komen, maar deze zijn vanuit taalkundig oogpunt doorgaans suboptimaal en vaak eenvoudigweg slordig geschreven. Zo'n student gelooft dat het zijn belangrijkste doel is om het vermogen aan te tonen om dergelijke problemen in principe op te lossen. Maar de implementatie kan zwak zijn.

Kinderen die op school of in de eerste jaren als programmeur zijn opgevoed, brengen een ‘heel mooie fiets’ mee, die echter asymptotisch meestal niet zo efficiënt werkt. Integendeel, ze stellen zichzelf niet de taak om diepgaand te theoretiseren en zich tot leerboeken te wenden op zoek naar optimale oplossingen, waarbij ze de voorkeur geven aan mooie code.

Op verschillende universiteiten zie ik tijdens studenteninterviews meestal welke ‘school’ ten grondslag ligt aan zijn opleiding. En een perfecte balans ben ik bijna nooit tegengekomen in het basisonderwijs. Als kind kon je je in mijn stad voorbereiden op de wiskundeolympiade, maar er waren geen programmeerclubs. Nu leren kinderen in clubs programmeren in het ‘modieuze’ Go en Python. Daarom zijn er zelfs op het niveau van toelating tot universiteiten verschillen in aanpak. Ik ben van mening dat het belangrijk is om beide vaardigheden op een universiteit te behouden, anders komt er een specialist met een onvoldoende theoretische basis, of iemand die niet heeft geleerd en geen goede code wil schrijven, bij het bedrijf komen werken.

Hoe je de lat “oppompt” voor de toekomst T-vormige specialisten?

Hoe u het meeste uit een computerwetenschappelijk onderwijs kunt halen
Het is duidelijk dat de student in dergelijke omstandigheden eenvoudigweg kiest wat hij het leukst vindt. De leraar brengt eenvoudigweg het standpunt over dat dichter bij hem staat. Maar iedereen heeft er baat bij als de code mooi is geschreven en vanuit het oogpunt van algoritmen alles duidelijk, redelijk en effectief is.

  • IT-horizonten. Een afgestudeerde bachelor Computerwetenschappen is een kant-en-klare specialist met een ontwikkelde technische blik, die waarschijnlijk voor zijn profiel heeft gekozen. Maar in het eerste jaar weten we niet wat hij of zij gaat doen. Hij kan zich bezighouden met wetenschap of analyse, of, integendeel, hij kan elke dag een enorme hoeveelheid code schrijven. Daarom moet de student alle aspecten van het werken op IT-gebied worden getoond en kennis maken met alle tools. Idealiter tonen docenten uit theoretische opleidingen een aansluiting met de praktijk (en vice versa).
  • Groeipunt. Het is in het belang van de student zelf om zichzelf niet tot het uiterste te laten gaan. Begrijpen of u een “wiskundige” of een “programmeur” bent, is niet moeilijk. Het is voldoende om naar de eerste impuls te luisteren bij het oplossen van een probleem: wat wil je doen - in het leerboek kijken op zoek naar de optimale aanpak of een paar functies schrijven die later zeker van pas zullen komen? Op basis hiervan kun je een verder complementair leertraject uitbouwen.
  • Alternatieve bronnen van kennis. Het komt voor dat het programma goed uitgebalanceerd is, maar 'Systeemprogrammering' en 'Algoritmen' worden door totaal verschillende mensen onderwezen, en sommige studenten staan ​​​​dichter bij de eerste leraar, en anderen - bij de tweede. Maar zelfs als je de professor niet mag, is dit geen reden om sommige onderwerpen te verwaarlozen ten gunste van andere. Bachelors zijn zelf geïnteresseerd in het vinden van de wil om met kennisbronnen te werken en vertrouwen in geen geval op radicale opvattingen als ‘wiskunde is de koningin der wetenschappen, het belangrijkste is om de algoritmen te kennen’ of ‘goede code compenseert al het andere’.

Je kunt je kennis in theorie verdiepen door je te wenden tot gespecialiseerde literatuur en online cursussen. Je kunt je vaardigheden in programmeertalen verbeteren op Coursera, Udacity of Stepik, waar veel verschillende cursussen worden aangeboden. Ook gaan studenten vaak naar hardcore taalcursussen kijken als ze het gevoel hebben dat de algoritmeleraar de wiskunde goed kent, maar geen complexe implementatievragen kan beantwoorden. Niet iedereen zal het met mij eens zijn, maar in mijn praktijk heeft het zich goed bewezen specialisatie in C++ van Yandex, waarin steeds complexere kenmerken van de taal achtereenvolgens worden geanalyseerd. Kies over het algemeen een cursus met hoge beoordelingen van gerenommeerde bedrijven of universiteiten.

Sociale vaardigheden

Hoe u het meeste uit een computerwetenschappelijk onderwijs kunt halen
Studenten van zelfs topuniversiteiten die van de universiteit komen om in welk bedrijf dan ook te werken, van een start-up tot een groot bedrijf, zijn slecht aangepast aan de echte werkomgeving. Feit is dat universiteiten tegenwoordig veel ‘oppassen’ op studenten. Zelfs nadat je veel lessen hebt gemist, je niet op tijd hebt voorbereid op toetsen en toetsen, je hebt verslapen of te laat bent voor een examen, kan iedereen slagen en het opnieuw afleggen - en uiteindelijk toch een diploma ontvangen.

Tegenwoordig zijn er echter alle voorwaarden voor studenten om voorbereid te zijn op het volwassen leven en onafhankelijke professionele activiteiten. Ze zullen niet alleen moeten programmeren, maar ook moeten communiceren. En dit moet ook geleerd worden. Universiteiten hebben verschillende formats om deze vaardigheden te ontwikkelen, maar helaas wordt daar vaak niet genoeg aandacht aan besteed. We hebben echter veel mogelijkheden om effectieve teamwerkvaardigheden te verwerven.

  • Schriftelijke zakelijke communicatie. Helaas hebben de meeste afgestudeerden die de universiteit verlaten geen idee van correspondentie-etiquette. De specificiteit van communicatie in instant messengers ligt in de uitwisseling van berichten dag en nacht en het gebruik van gespreksstijl en informele woordenschat. Het zou echter mogelijk zijn om schriftelijke spraak te trainen wanneer de student communiceert met de afdeling en de universiteit.

    In de praktijk worden managers vaak geconfronteerd met de noodzaak om een ​​groot project op te splitsen in kleine taken. Om dit te doen, moet je elke taak en de componenten ervan duidelijk beschrijven, zodat junior-ontwikkelaars begrijpen wat er van hen wordt verlangd. Een slecht gedefinieerde taak leidt vaak tot de noodzaak om iets opnieuw te doen. Daarom helpt ervaring in schriftelijke communicatie afgestudeerden om in gedistribueerde teams te werken.

  • Schriftelijke presentatie van de resultaten van uw werk. Om hun educatieve projecten te presenteren, kunnen ouderejaars berichten schrijven over Habr, wetenschappelijke artikelen en ook gewoon rapporten. Hiervoor zijn veel mogelijkheden: het cursuswerk begint op sommige universiteiten in het tweede jaar. Je kunt essays ook gebruiken als een vorm van controle; de ​​vorm ervan ligt meestal dichter bij een journalistiek artikel. Deze aanpak is al geïmplementeerd bij de National Research University Higher School of Economics.

    Als een bedrijf een flexibele benadering van ontwikkeling hanteert, moet het de resultaten van zijn werk in kleinere porties presenteren, maar vaker. Om dit te doen, is het belangrijk om de resultaten van het werk van één specialist of het hele team kort te kunnen overbrengen. Ook voeren veel bedrijven tegenwoordig ‘beoordelingen’ uit – jaarlijks of halfjaarlijks. Medewerkers bespreken resultaten en werkperspectieven. Succesvolle beoordeling is de belangrijkste reden voor carrièregroei, bonussen, bijvoorbeeld bij Microsoft, Acronis of Yandex. Ja, je kunt goed programmeren, maar ‘in de hoek zitten’ zal zelfs een coole specialist altijd verliezen van iemand die zijn succes goed weet te presenteren.

  • Academisch schrijven. Academisch schrijven verdient een speciale vermelding. Het is nuttig dat leerlingen vertrouwd raken met de regels voor het schrijven van wetenschappelijke teksten, het gebruik van argumenten, het zoeken naar informatie in verschillende bronnen en het opmaken van verwijzingen naar deze bronnen. Het is raadzaam om dit in het Engels te doen, omdat er in de internationale academische gemeenschap veel meer goede teksten bestaan ​​en er voor verschillende disciplines al sjablonen bestaan ​​voor het presenteren van wetenschappelijke resultaten. Natuurlijk zijn ook academische schrijfvaardigheden nodig bij het voorbereiden van Russischtalige publicaties, maar er zijn veel minder voorbeelden van goede moderne artikelen in het Engels. Deze vaardigheden kunnen worden verworven via een passende cursus, die inmiddels in veel onderwijsprogramma's is opgenomen.
  • Het leiden van vergaderingen. De meeste studenten weten niet hoe ze zich moeten voorbereiden op vergaderingen, hoe ze notulen moeten maken en hoe ze gegevens moeten verwerken. Maar als we deze vaardigheid op de universiteit ontwikkelen, bijvoorbeeld door deel te nemen aan teamprojecten, kunnen we voorkomen dat we tijd verspillen op de werkplek. Dit vereist begeleiding van het projectwerk van studenten om hen te leren hoe ze effectief vergaderingen kunnen leiden. In de praktijk kost dit elk bedrijf veel geld. Als meerdere mensen die een hoog salaris ontvangen een uur werktijd besteden aan een bijeenkomst, wil je immers dat daar een overeenkomstig rendement op wordt behaald.
  • Spreken in het openbaar. Veel studenten worden geconfronteerd met de noodzaak om alleen in het openbaar te spreken tijdens het verdedigen van hun proefschrift. En niet iedereen is hier klaar voor. Ik heb veel studenten gezien die:
    • met de rug naar het publiek staan,
    • zwaaiend, proberend de commissie kennis te laten maken met de trance,
    • breekpennen, potloden en wijzers,
    • rondjes lopen
    • kijk naar de vloer.

    Dit is normaal wanneer iemand voor de eerste keer optreedt. Maar je moet eerder met deze stress aan de slag gaan - door je cursussen in een vriendelijke sfeer onder je klasgenoten te verdedigen.

    Bovendien is het de standaardpraktijk in bedrijven om een ​​werknemer de kans te geven een idee voor te stellen en daarvoor financiering, een functie of een speciaal project te ontvangen. Maar als je erover nadenkt, is dit dezelfde bescherming van cursussen, alleen op een hoger niveau. Waarom oefen je zulke nuttige carrièrevaardigheden niet tijdens je studie?

Wat heb ik gemist?

Een van de redenen voor het schrijven van dit bericht was het artikel, gepubliceerd op de website van de Tyumen State University. De auteur van het artikel richt zich alleen op de tekortkomingen van Russische studenten die door buitenlandse docenten zijn opgemerkt. De praktijk van mijn lesgeven aan verschillende universiteiten suggereert dat de Russische school en het hoger onderwijs een goede basis bieden. Russische studenten zijn goed op de hoogte van wiskunde en algoritmen, en het is gemakkelijker om professionele communicatie met hen op te bouwen.

Bij buitenlandse studenten daarentegen kunnen de verwachtingen van een Russische leraar soms te hooggespannen zijn. Op het niveau van de basisopleiding op het gebied van wiskunde lijken de Indiase studenten die ik heb ontmoet bijvoorbeeld op Russische studenten. Soms ontbreekt het hen echter aan gespecialiseerde kennis wanneer zij afstuderen aan hun bachelorstudie. Goede Europese leerlingen hebben op schoolniveau waarschijnlijk een minder sterke wiskundeachtergrond.

En als je aan een universiteit studeert of werkt, kun je nu werken aan communicatieve vaardigheden (die van jezelf of die van je studenten), je fundamentele basis uitbreiden en oefenen met programmeren. Voor dit doel biedt het Russische onderwijssysteem alle mogelijkheden - je hoeft ze alleen maar correct te gebruiken.

Ik zal blij zijn als je in de reacties op het bericht je links deelt naar cursussen en methoden die helpen de balans in het onderwijs te egaliseren, evenals andere manieren om zachte vaardigheden te verbeteren tijdens je studie aan een universiteit.

Bron: www.habr.com

Voeg een reactie