Hoe je het meeste uit je Computer Science-opleiding kunt halen

De meeste moderne programmeurs hebben een opleiding aan een universiteit gevolgd. Dit zal in de loop der tijd veranderen, maar momenteel komen goede mensen in IT-bedrijven nog steeds uit universiteiten. In deze post deelt Stanislav Protasov, directeur van Acronis voor universitaire relaties, zijn visie op de kenmerken van universitaire opleidingen voor toekomstige programmeurs. Docenten, studenten en degenen die hen aannemen, kunnen zelfs onder de kat enkele nuttige tips vinden.

Hoe je het meeste uit je Computer Science-opleiding kunt halen

In de afgelopen 10 jaar heb ik wiskunde, algoritmes, 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 aan de MIPT. Uit mijn ervaring met goede Russische (en andere) universiteiten heb ik enkele observaties over de opleiding van studenten in computerdisciplines opgedaan.

De 30-secondenregel werkt niet meer

Ik ben er zeker van dat u bekend bent met de 30-secondenregel, die stelt dat een programmeur het doel van een functie moet begrijpen na een vluchtige blik op de code. Dit is давно bedacht, sindsdien zijn er talloze besturingssystemen, talen, hardware en algoritmes bijgekomen. Ik programmeer al 12 jaar, maar relatief recent zag ik de broncode van een product dat me zelfs op het eerste gezicht als magische spreuken leek. Tegenwoordig, als je niet bekend bent met het vakgebied, stopt de 30-secondenregel met werken. In dat geval heb je niet alleen 30, maar zelfs 300 seconden nodig om te begrijpen wat wat is.

Als je bijvoorbeeld stuurprogramma's wilt schrijven, moet je je in dit gebied verdiepen en duizenden regels specifieke code lezen. Met deze aanpak van het bestuderen van het onderwerp ontwikkelt de specialist een 'flow-gevoel'. Net zoals in rap, wanneer het gevoel van een goede rijm en het juiste ritme ontstaat zonder speciale rationalisatie. Evenzo kan een goed voorbereide programmeur gemakkelijk inefficiënte of gewoon slechte code herkennen zonder in detail te onderzoeken waar de stijl is geschonden of een suboptimale aanpak is gebruikt (maar dit gevoel uitleggen kan behoorlijk moeilijk zijn).

Specialisatie en de toenemende complexiteit zorgen ervoor dat een bacheloropleiding niet langer de mogelijkheid biedt om alle richtingen voldoende diepgaand te bestuderen. Maar precies op dit opleidingsniveau is het belangrijk om een breder perspectief te verwerven. Daarna, in de masteropleiding of op het werk, zal er tijd moeten worden besteed aan het verdiepen in de problematiek en specificiteit van het vakgebied, het leren van jargon, programmeertalen en de code van collega's, en het lezen van artikelen en boeken. Ik geloof dat alleen zo, met behulp van de universiteit, je jezelf kunt voorbereiden op de toekomst. T-vormige specialisten.

Welke programmeertaal is het beste om op de universiteit te onderwijzen?

Hoe je het meeste uit je Computer Science-opleiding kunt halen
Tot mijn vreugde hebben universiteitsdocenten al afstand gedaan van het zoeken naar het juiste antwoord op de vraag: 'Waarin is het beter om te programmeren?'. Discussies over wat beter is - C# of Java, Delphi of C++ - zijn feitelijk tot een einde gekomen. De opkomst van veel nieuwe programmeertalen en de opbouw van onderwijservaring hebben ertoe geleid dat in de academische wereld het begrip is gevestigd: voor elke taal is er een eigen niche.

Het probleem van onderwijs met behulp van een specifieke programmeertaal is niet langer de hoogste prioriteit. Het maakt niet uit in welke taal de cursus wordt gegeven. Het belangrijkste is de voldoende expressiviteit van de taal. Het boek 'The Art of Multiprocessor Programming' is een goed voorbeeld van deze observatie. In deze inmiddels klassieker zijn alle voorbeelden in Java gegeven - een taal zonder pointers, maar met een Garbage Collector. Weinig mensen zullen betwisten dat Java ver verwijderd is van de optimale keuze bij het schrijven van hoogpresterende parallelle code. Maar voor het uitleggen van de concepten in het boek bleek de taal geschikt te zijn. Een ander voorbeeld is de klassieke cursus machine learning van Andrew Ng, die in de taal Matlab in de Octave-omgeving wordt gegeven. Tegenwoordig zou je wellicht een andere programmeertaal kunnen kiezen, maar wat maakt het in wezen uit, als de ideeën en benaderingen belangrijk zijn?

Praktischer en dichter bij de realiteit

Tegelijkertijd is het aantal praktijken aan universiteiten de afgelopen jaren flink toegenomen. Waar Russische universitaire programma's eerder vaak werden bekritiseerd omdat ze van de werkelijkheid waren losgekoppeld, kan men vandaag de dag niet hetzelfde zeggen over IT-onderwijs. Tien jaar geleden waren er bijna geen docenten met echte ervaring in de industrie aan de universiteiten. Tegenwoordig geven steeds vaker praktiserende IT-specialisten les op de relevante afdelingen, terwijl ze alleen 1-2 cursussen in hun vrije tijd van hun belangrijkste werk geven. Deze aanpak bewijst zichzelf als het gaat om kwalitatieve training van personeel, actualisering van cursussen en natuurlijk het zoeken naar potentiële medewerkers voor bedrijven. Ik denk niet dat ik een geheim onthul als ik zeg dat wij de basisafdeling aan de MFTI ondersteunen en relaties opbouwen met andere universiteiten, ook om studenten voor te bereiden die hun carrière bij Acronis kunnen beginnen.

Wiskundige of programmeur?

Hoe je het meeste uit je Computer Science-opleiding kunt halen
De controverse die vroeger rondom programmeertalen plaatsvond, is overgegaan in een filosofisch debat. Nu discussiëren voorwaardelijke “programmeurs” en “wiskundigen” met elkaar. In principe zouden deze scholen in twee opleidingsprogramma's kunnen worden onderscheiden, maar de industrie maakt nog steeds niet goed onderscheid tussen zulke nuances, en van universiteit tot universiteit hebben we vergelijkbaar onderwijs met een iets andere focus. Dit betekent dat zowel de student als het bedrijf waar hij verder zal werken, het puzzelstuk van kennis moeten aanvullen met ontbrekende stukjes.

De komst van praktijken aan universiteiten die industriële code schrijven in verschillende talen biedt studenten een betere ontwikkelingsvaardigheid. Omdat ze goed bekend zijn met de implementaties van standaardbibliotheken, frameworks en programmeertechnieken, stimuleren praktiserende programmeurs studenten om goede code te schrijven, dit snel en kwalitatief te doen.

Deze nuttige vaardigheid leidt echter soms tot de opkomst van liefhebbers die de fiets opnieuw uitvinden. Studenten-programmeurs denken zo: “Wat weerhoudt me ervan om nog eens 200 lijnen goede code te schrijven, die direct het probleem oplost?”

Docenten met een klassieke wiskundige opleiding (bijvoorbeeld van de wiskundefaculteit of toegepaste wiskunde) werken vaak in een wetenschappelijke omgeving of op het gebied van modellering en gegevensanalyse. "Wiskundigen" bekijken problemen in de informatica op een andere manier. Ze werken voornamelijk met algoritmes, theorema's en formele modellen in plaats van met code. Een belangrijk voordeel van de wiskundige aanpak is het duidelijke begrip van wat kan en niet kan worden opgelost, en hoe dit te doen.

Bijgevolg spreken wiskundedocenten over programmeren met een focus op theorie. Studenten die 'van de wiskundigen' komen, bieden vaak goed doordachte en theoretisch sterkere oplossingen aan, maar zijn meestal niet optimaal vanuit het perspectief van de taal en vaak gewoon slordig geschreven. Zo'n student denkt dat zijn belangrijkste doel is om te laten zien dat hij dit soort problemen in principe kan oplossen. De implementatie kan echter te wensen overlaten.

Jongeren die op school of in de eerste jaren door programmeurs zijn onderwezen, brengen een "heel mooie fiets" mee, die echter meestal asymptotisch niet erg efficiënt werkt. Zij hebben daarentegen niet als doel om diepgaand te theoretiseren en zoeken niet in boeken naar optimale oplossingen, maar geven de voorkeur aan mooie code.

Bij interviews met studenten aan verschillende universiteiten zie ik meestal welke "school" de basis vormt van hun opleiding. Ik heb zelden een perfecte balans gezien in de basisopleiding. In mijn jeugd kon je in mijn stad je voorbereiden op wiskunde-olympiades, maar er waren geen programmeerclubs. Nu leren kinderen in clubs programmeren in de 'modieuze' talen Go en Python. Daarom zijn er al bij de toelating tot universiteiten verschillen in benaderingen. Ik vind het belangrijk dat beide vaardigheden op de universiteit worden ondersteund, anders komt er ofwel een specialist met een onvoldoende theoretische basis in het bedrijf werken, of een persoon die niet heeft geleerd en niet wil leren om goede code te schrijven.

Hoe kun je "de rekstok trainen" voor toekomstige T-vormige specialisten?

Hoe je het meeste uit je Computer Science-opleiding kunt halen
Het is duidelijk dat een student in zulke omstandigheden gewoon kiest wat hem het meest aanspreekt. De docent daarentegen geeft simpelweg de mening weer die hem het dichtst bij staat. Maar iedereen zal profiteren als de code mooi is geschreven en de algoritmes helder, onderbouwd en efficiënt zijn.

  • IT-horizon. Een afgestudeerde bachelor in Computer Science is al een specialist met een brede technische horizon, die waarschijnlijk zijn of haar profiel heeft gekozen. Maar in de eerste jaren weten we niet wat hij of zij gaat doen. Misschien gaat hij of zij de wetenschap in of analytics, of misschien juist elke dag een enorme hoeveelheid code schrijven. Daarom moet de student alle aspecten van werken in de IT-wereld leren kennen en kennismaken met alle tools. Het is ideaal als docenten van de theoretische cursussen de link met de praktijk kunnen aantonen (en vice versa).
  • Groei-punt. Voorkom dat studenten in extremen vervallen — dat is in het belang van de student zelf. Het is niet moeilijk om te begrijpen wie je bent — een 'wiskundige' of een 'programmeur'. Het is voldoende om te luisteren naar je eerste impuls bij het oplossen van een probleem: wat wil je doen — in een handboek kijken naar de optimale aanpak of een paar functies schrijven die je later zeker van pas komen? Op basis hiervan kun je een vervolgtraject voor je studie opbouwen.
  • Alternatieve kennisbronnen. Het komt voor dat het programma goed in balans is, maar 'Systeemprogrammering' en 'Algoritmes' worden gegeven door totaal verschillende mensen, en voor sommige studenten ligt de voorkeur bij de eerste docent en voor anderen bij de tweede. Maar zelfs als je de professor niet leuk vindt, is dat geen reden om bepaalde vakken te negeren ten faveure van andere. De bachelorstudenten zelf zijn geïnteresseerd in het vinden van de wil om met kennisbronnen te werken en nooit radicaal te vertrouwen op meningen zoals 'wiskunde is de koningin der wetenschappen, het belangrijkste is om algoritmes te kennen' of 'goede code compenseert alles'.

Versterk je kennis van de theorie door gespecialiseerde literatuur en online cursussen te raadplegen. Je kunt je vaardigheden in programmeertalen verbeteren via Coursera, Udacity of Stepik, waar een breed scala aan cursussen beschikbaar is. Studenten beginnen vaak met het volgen van gevorderde cursussen in programmeertalen wanneer ze het gevoel hebben dat de docent van algoritmen goed thuis is in de wiskunde, maar niet kan antwoorden op complexe vragen over de implementatie. Niet iedereen zal het met me eens zijn, maar in mijn ervaring heeft de specialisatie C++ van Yandex, waarin stapsgewijs steeds moeilijkere aspecten van de taal worden behandeld. Over het algemeen, kies een cursus met hoge beoordelingen van gerenommeerde bedrijven of universiteiten.

Soft skills

Hoe je het meeste uit je Computer Science-opleiding kunt halen
Wanneer afgestudeerden van een universiteit beginnen te werken in een bedrijf, van een startup tot een groot bedrijf, blijken zelfs studenten van topuniversiteiten slecht aangepast aan de echte werkomgeving. Dit komt omdat universiteiten tegenwoordig veel "verzorging" bieden aan studenten. Zelfs na het missen van veel lessen, zich niet op tijd voorbereiden voor toetsen en examens, of te laat komen op een examen, kan iedereen slagen en zelfs opnieuw slagen — en uiteindelijk nog steeds een diploma behalen.

Desondanks zijn er vandaag de dag alle voorwaarden om studenten voor te bereiden op het volwassen leven en zelfstandige professionele activiteiten. Ze zullen niet alleen moeten programmeren, maar ook moeten communiceren. Dit moet ook worden onderwezen. Universiteiten bieden verschillende manieren om deze vaardigheden te ontwikkelen, maar helaas krijgt dit vaak niet de nodige aandacht. Toch hebben we veel mogelijkheden om vaardigheden voor effectieve samenwerking te verwerven.

  • Schriftelijke zakelijke communicatie. Helaas hebben de meeste afgestudeerden geen idee van de etiquette van correspondentie. De specifieke manier van communiceren in chat-apps bij het uitwisselen van berichten, zowel 's nachts als overdag, met gebruik van een informeel stijl en woordenschat. Echter, schriftelijke taalvaardigheid zou geoefend kunnen worden door de communicatie tussen studenten en de universiteit.

    In de praktijk komen managers vaak voor de uitdaging te staan om een groot project op te splitsen in kleinere taken. Hiervoor is het belangrijk om elke taak en de bijbehorende onderdelen goed te beschrijven, zodat junior ontwikkelaars begrijpen wat er van hen wordt verwacht. Een slecht geformuleerde taak leidt vaak tot de noodzaak om iets opnieuw te doen, en daarom helpt ervaring met schriftelijke communicatie afgestudeerden om te werken in gedistribueerde teams.

  • Schriftelijke presentatie van de resultaten van hun werk. Voor de presentatie van hun studieprojecten kunnen studenten in de hogere jaren artikelen op Habr schrijven, wetenschappelijke artikelen en ook gewoon rapporten. Hiervoor zijn er tal van mogelijkheden — al in het tweede jaar beginnen op sommige universiteiten de cursusprojecten. Essay schrijven kan ook als een vorm van controle worden gebruikt — deze zijn meestal vormelijk dichterbij een journalistiek artikel. Deze aanpak is al gerealiseerd aan de Nationale Onderzoeksuniversiteit HSE.

    Als een bedrijf een flexibele aanpak in de ontwikkeling hanteert, worden de resultaten van het werk vaak in kleinere porties gepresenteerd, maar dan wel vaker. Het is belangrijk om in staat te zijn om beknopt het resultaat van het werk van één specialist of het hele team over te brengen. Ook worden in veel bedrijven tegenwoordig 'reviews' gehouden — jaarlijkse of halfjaarlijkse. Werknemers bespreken resultaten en toekomstperspectieven. Een succesvolle review is de belangrijkste reden voor carrièreontwikkeling en bonussen, bijvoorbeeld bij Microsoft, Acronis of Yandex. Ja, je kunt goed programmeren, maar ''zittend in de hoek'' verliest zelfs een geweldige specialist altijd van degene die zijn succes goed kan presenteren.

  • Academisch Schrijven. Het is ook belangrijk om academisch schrijven apart te benadrukken. Het is nuttig voor studenten om bekend te raken met de regels voor het schrijven van wetenschappelijke teksten, het gebruik van argumenten, het zoeken naar informatie uit verschillende bronnen en het citeren van deze bronnen. Het is wenselijk om dit in het Engels te doen, omdat er in de internationale academische gemeenschap veel meer goede teksten zijn, en voor verschillende disciplines zijn er al gevestigde sjablonen voor het presenteren van wetenschappelijke resultaten. Natuurlijk zijn vaardigheden in academisch schrijven ook nodig bij het voorbereiden van publicaties in het Russisch, maar er zijn veel minder voorbeelden van goede moderne artikelen in het Engels. Deze vaardigheden kunnen worden verworven in het kader van een relevante cursus, die momenteel deel uitmaakt van veel onderwijsprogramma's.
  • Vergaderingen leiden. De meeste studenten weten niet hoe ze zich moeten voorbereiden op vergaderingen, notulen moeten bijhouden en gegevens moeten verwerken. Maar als we deze vaardigheid ontwikkelen op de universiteit, bijvoorbeeld door deel te nemen aan groepsprojecten, kunnen we tevergeefs tijdsverlies op de werkplek voorkomen. Dit vereist controle over het projectwerk van studenten, om hen te leren effectief vergaderingen te houden. In de praktijk kost dit elke onderneming een hoop geld — want als meerdere mensen met hoge salarissen een uur van hun werk tijd aan een vergadering besteden, willen we de bijbehorende opbrengst.
  • Openbare spreken. Veel studenten worden geconfronteerd met de noodzaak om openbaar te spreken alleen tijdens hun afstudeerverdediging. En lang niet iedereen is hierop voorbereid. Ik heb veel studenten gezien die:
    • met hun rug naar het publiek staan,
    • heen en weer wiegen, terwijl ze de commissie proberen in trance te brengen,
    • pennen, potloden en aanwijzers breken,
    • in cirkels lopen,
    • op de vloer kijken.

    Het is normaal dat iemand voor het eerst spreekt en dit moet eerder worden aangepakt — bij de verdediging van stages in een vriendelijke sfeer, onder medestudenten.

    Bovendien is het standaardpraktijk in bedrijven om een medewerker de kans te geven om een idee voor te stellen, financiering, een positie of een specifiek project te krijgen. Maar als je erover nadenkt — dat is eigenlijk dezelfde verdediging van een stage, maar dan op een hoger niveau. Waarom zouden we zulke nuttige carrièrevaardigheden niet tijdens de studie trainen?

Wat heb ik gemist?

Een van de redenen om deze post te schrijven was een artikel, gepubliceerd op de website van Tyumen State University. De auteur van het artikel richt zich alleen op de tekortkomingen van Russische studenten, zoals opgemerkt door buitenlandse docenten. Mijn ervaring met lesgeven aan verschillende universiteiten laat zien dat het Russische basis- en hoger onderwijs een goede basis biedt. Russische studenten zijn goed onderlegd in wiskunde en algoritmes, het is gemakkelijker om professionele communicatie met hen op te bouwen.

Voor buitenlandse studenten kunnen de verwachtingen van de Russische docent soms te hoog zijn. Bijvoorbeeld, op het gebied van basisvaardigheden wiskunde lijken de Indische studenten die ik heb ontmoet op die uit Rusland. Toch missen ze soms specifieke kennis aan het einde van hun bacheloropleiding. Goede Europese studenten hebben waarschijnlijk een minder sterke wiskundige voorbereiding op schoolniveau.

En als je studeert of werkt aan een universiteit, kun je nu al beginnen met het ontwikkelen van communicatieve vaardigheden (van jezelf of van studenten), je fundamentele basis uitbreiden en oefenen in programmeren. Het Russische onderwijssysteem biedt hiervoor alle mogelijkheden — je moet ze alleen goed benutten.

Ik zou het geweldig vinden als je in de reacties onder de post je links naar cursussen en methoden deelt, die helpen om de balans in het onderwijs te verbeteren, evenals andere manieren om soft skills te ontwikkelen tijdens je studie aan de universiteit.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster