De basis van elke programmering is… puzzels

Hallo, Habr-bewoners!

In dit artikel wil ik mijn ervaringen delen als docent programmeren in C++ aan een hogeschool verbonden aan een technische universiteit. Het was een unieke ervaring in mijn leven, die me veel heeft geleerd. Wanneer het gaat om interessante feitjes uit mijn verleden, komt dit stukje uit mijn leven als een van de eerste gedachten naar boven.
Laten we gaan.

Eerst even iets over mezelf.
In 2016 ben ik afgestudeerd met een rode diploma in de specialisatie 'Informatieve veiligheid van geautomatiseerde systemen'. Gedurende mijn studie heb ik herhaaldelijk de kans gehad om mijn potentieel te benutten bij het schrijven van wetenschappelijke artikelen, deelname aan competities en subsidies. In 2015 werd ik winnaar van de Russische wedstrijd voor jonge wetenschappers 'UMNIK'. Voor ik in 2016 mijn opleiding afrondde, had ik al een baan gekregen bij een grote organisatie in de stad als 'Specialist op het gebied van informatietveiligheid, cryptografie en encryptie'.
Kort samengevat was dat het zo. Je kunt je voorstellen dat ik wel enige kennis over programmeren had.

En daar is 2017. Promotieonderzoek. Ik werd gevraagd om gedurende een semester C++ te onderwijzen aan de hogeschool, waarvoor men me goede bonussen beloofde in het verlichten van de verantwoordelijkheden van een promovendi en verder niets.

Eerlijk gezegd was ik oprecht geïnteresseerd om mezelf hierin uit te proberen.

De eerste les
September. De eerste schoolweek. De studenten kwamen naar me toe. 'De moeilijkste groep' — zo werden ze genoemd.
23 mensen. 'Programmeerlingen'.

Zoals gebruikelijk, heb ik me eerst voorgesteld. Ik vertelde ze op een ingetogen manier inhoudelijk over het deel 'Eerst even iets over mezelf'…
Daarna begon de verschrikkelijke situatie. Op de vraag 'Wat kunnen jullie?' antwoordden de studenten (laten we ze vanaf nu zo noemen) dat ze iets meer wisten dan helemaal niets (nou, dit betekende dat sommigen van hen wisten hoe MS VS eruitzag en een project 'Hello world' konden maken)… Programmers. Laatste jaar…

Vervolgens legden ze gedetailleerd, 'in kleuren', uit dat ze nergens in waren opgeleid en dat ze al met programmeren waren teleurgesteld…

Bijna alle dagen tot de volgende les verliepen als volgt:
De basis van elke programmering is… puzzels

… maar de dag ervoor kwam het idee op om mijn inspanningen te wijden aan het corrigeren van de situatie in de hoofden en geesten van deze jongeren. En toen 'kwam de energie op gang'.

Inleiding tot programmeren
Voor de volgende les nam ik… een puzzel mee.
Ja, ja. Puzzel. 'Hoe een draak te temmen'. De regels waren simpel. De groep werd verdeeld in 3 teams. Elk team verzamelde zijn eigen deel. De ene team deed het bos, de andere de aarde, de derde de draak in het midden van de afbeelding. Terwijl ze de hele les het puzzel verzamelden, vertelde ik dat het verzamelen van een puzzel ook programmeren is, dat programmeurs vaak code van anderen gebruiken, dat elk project verschillende teams, functies en modules heeft...
Langzaam raakten ook de meest lauwe studenten betrokken bij het proces.
Toen ik het idee van programmeren in de context van business, processen en... puzzels goed had overgebracht, was het tijd om de regels voor het leren vast te stellen.
Bij elke les moest elke student 10 IT-termen in zijn schrift opschrijven. Welke dan ook. Iedereen had zijn eigen. Het idee was dat ik het schrift van één student nam, de meest praktische termen zocht en deze vroeg aan een andere student. Wanneer de andere student zei: 'Ik heb die term niet opgeschreven', was dat niet bestraffend (omdat het logisch was), maar die student moest de 'ontbrekende' termen opschrijven (net als iedereen die ze niet had) en hun betekenis vinden voor de volgende les. Zo deden we het. Elke les begon met een vrolijke random selectie van twee of drie studenten. De jongens waren enthousiast over dit proces.

Onderwerpen van de lessen

Wanneer je begint met lesgeven is het heel belangrijk om de studenten goede literatuur te geven. Naar mijn mening was het ideaal om het boek te gebruiken:
Een tijdje geleden moest ik het geheimzinnig lezen, terwijl ik het omarmde met Microsoft Visual Studio. Toen begreep ik programmeren praktisch vanaf nul. De ideale optie.
De basis van elke programmering is… puzzels

Je komt bescheiden naar de studenten en zegt: 'Om programmeurs te worden, moeten jullie gewoon alles lezen en proberen wat in dit boek staat', en je gooit het boek op tafel. Het belangrijkste is om de boeken in je rugzak niet door elkaar te halen...

Voor elk onderwerp moest ik me uiteraard goed voorbereiden. Ik las dezelfde Lafore en nog enkele interessante bronnen op het internet.

Uitleggen moest bijna vanaf de basis. En het was belangrijk om deductief te begrijpen waar bij de studenten de basiskennis ontbrak.
Arrays -> Werken met geheugen (constructors) -> Referenties -> Hoe geheugen werkt -> Opslagmedia -> Wat is een fysieke schijf -> Binaire gegevensrepresentatie...
Arrays -> Geheugenbeheer (constructors) -> Referenties -> Hoe geheugen werkt -> Opslagmedia -> Wat is een fysieke opslagmedia -> Binaire gegevensrepresentatie...
De basis van elke programmering is… puzzels

Een zeer indrukwekkende crash-test van kennis over de fundamentele feiten van programmeren. Ik ben geen programmeur meer, ik ben een historicus!

En zo, gaan de historische veldslagen een paar rondes achter elkaar. Op een dag komt er een secretaresse van de afdeling ons kantoor binnen, kijkt naar de groep met grote ogen, kijkt aandachtig en sluit de deur. Later hoorde ik dat ze in shock was omdat DIT team zo stil en zo aandachtig naar mij luisterde... Tjah, easy.

Laboratoriumwerk
De eerste praktische informatie — de eerste 'labs'. Gedurende een semester heeft de groep 10 laboratoriumwerkstukken ingeleverd. In de eerste maakten ze de eenvoudigste console a+b, en in de laatste schreven ze, ook al waren het consoleprogramma's, toch vrij interessante applicaties, zoals het berekenen van de waarde van een integraal van een willekeurig gedefinieerde functie met behulp van een van de drie methoden — ongeveer dezelfde taken die ook op de eindexamenopdracht stonden.

De benadering van de acceptatie niet was gebruikelijk. Gedurende mijn hele studie aan de universiteit kwam ik erachter dat slim zijn en in staat zijn om rapporten in te leveren niet hetzelfde is. Dat beviel me totaal niet.

— Jongens, ik heb eraan gedacht. Laten we de 'conceptuele' relaties vestigen. Als iemand van jullie denkt dat programmeren niet nodig voor hem is — de deur is daar. Ik geef jullie gratis les. Ik wil hier alleen nieuwsgierige, betrokken en gepassioneerde enthousiastelingen zien. Iedereen die niet geïnteresseerd is, vraag ik om geen tijd te verspillen — zei ik op de eerste dag van het inleveren van laboratoriumwerk. Na dit stopten 5 mensen onmiddellijk met het bijwonen van de lessen. Dat was logisch en te verwachten. Met de rest kon je proberen iets zinnigs te doen.

— ... het interesseert me niet om te zien hoe iemand anders jouw werk heeft gedaan, alleen maar om het in te leveren. Je hoeft geen programmeurs te zijn, maar mensen moet je in mijn lessen wel zijn Omdat dat nodig is.

Het zag er als volgt uit:

case uitblinker

Een student komt bij me om het werk in te leveren.
— Heb je het zelf gedaan?
— Ja.
— Wat is dit?
— *antwoordt juist*.
*Ik stel nog een paar vragen. Hij antwoordt correct*
— goedgekeurd. Geweldig.

case praatjesmaker

— Heb je het zelf gedaan?
— Ja.
— Wat is dit?
— *antwoordt ONjuiste / antwoordt niet*.
*Ik stel nog een paar vragen. Hetzelfde resultaat*
— NIET goedgekeurd. ONvoldoende. Ik wacht op herkansing.

case goede leerling

— Heb je het zelf gedaan?
— Ja.
— Wat is dit?
— *antwoordt juist, maar niet zeker, twijfelt*.
*Ik stel nog een paar vragen. Hetzelfde resultaat*
— goedgekeurd. Goed.

case gemiddelde drieën

— Heb je het zelf gedaan?
— Nee.
— Waarom?
— Het is moeilijk. Iemand hielp me... *noemt eerlijk een student-uitblinker uit de groep*
— Ben je erachter gekomen?
— Ja, ik heb bijna alles begrepen.

— Wat is dit?
— *antwoordt juist*.
*Ik vraag nog over een paar dingen. Hij antwoordt meer of minder correct, soms compleet de verkeerde kant op, zelfs als het een 50-50 mix is van juiste en onjuiste antwoorden*
— goedgekeurd. Goed.

Het heeft geen zin om alle andere gevallen te beschrijven. Ja, de 'goede leerling' kan ontevreden zijn dat de 'matig presterende leerling' dezelfde beoordeling krijgt terwijl hij op eerlijkheid voortgaat. Dan hangt alles af van de stemming. Of ik vraag de 'goede leerling' om naar de vloer te kijken, want 'nu ga ik een snufje wijsheid delen', en dan leg ik de essentie van de aanpak uit, beschrijf ik wat in het leven meer waarde heeft en verduidelijk ik dat het voor de 'matig presterende leerling' veel moeilijker was om te slagen dan voor hem, de 'goede leerling', enzovoort...
… of, zoals mijn docent in die tijd, teken ik een klein tandje in het vak van het verslag tegenover deze ontevreden persoon en voeg ik de volgende keer persoonlijk extra materiaal toe aan de laboratoriumopdracht. Gewoon zo. Zodat hij zijn vrienden niet 'verpest'.

De basis van elke programmering is… puzzels

Cijfers
Het leerproces, net als de wereld, wordt letterlijk ondergedompeld in prijzen en cijfers.
Studenten zijn ook mensen, maar de 'kaders', naar mijn mening, moesten ook 'geschud' worden.
Gedurende het semester kreeg iedereen een bonusopdracht. Zich registreren op github.com, upload een leeg project in C++, maak 2 updates, commit ze en push. Voor deze acties was 15 punten toegewezen. Ja, ja, geen 4, geen 5, maar 15. Drie personen begrepen het. Dit was nog enigszins begrijpelijk voor het psychotype van de studenten, maar er was een andere situatie.
Op een gegeven moment werd onze les verplaatst, zodat die de laatste les werd, en dat ook nog eens door een tussenperiode. Desondanks kwamen er toch 15 mensen. Het voelde niet goed om een nieuw onderwerp te behandelen ter ere van zo'n heldhaftigheid, omdat we al redelijk ver gevorderd waren met de onderwerpen + het volgende onderwerp was niet echt eenvoudig voor de vermoeide geesten (die van mij en die van de studenten). Toen besloot ik om over filosofie te praten.

— Ik verklaar de attractie van ongekende vrijgevigheid. Iedereen zegt me welke beoordeling ik hem moet geven voor deze les.
Iedereen wilde een 'vijf'.
— beschouw het als gegeven, — zei ik. Iedereen was blij.
Stilte.
— Waarom wilde niemand 7- een 10- een?
Iedereen staarde met wijd open ogen en begon dom te glimlachen.
— En zult u dat echt opschrijven? In het verslag?! — klonk er een stem van de achterste bank.
— Dat kan ik gemakkelijk! — zei ik, — ik kondig een quiz aan over termen, wie de 10 vragen beantwoordt — krijgt 20 punten in het verslag, zonder addertjes onder het gras, wie niet antwoordt — krijgt -10 (min tien).

«Het team kwam tot leven, er ontstond een discussie», iedereen had eerlijk verdiende cijfers. Twee mensen boden zich aan. Met enkele kleine onnauwkeurigheden doorstonden ze elk om de beurt 10 vragen over stack, queue, constructor, destructor, garbage collector, encapsulatie, polymorfisme, hash-functies…
Ieder kreeg in het tijdschrift een tekening 20-ers… maar de betekenis van het tijdschrift en de cijfers daalde in de ogen van iedereen. Nu betreur ik het dat ik niet heb gevraagd of ze hun cijfer met iemand willen 'delen'. Ik denk dat ze het zouden delen… Voortaan gaf iedereen de 'lab' door middel van kennis en eerlijkheid.

Vanaf dat moment verscheen er nog een type labinzending:


case eerlijkNietZijnMaarHijPoging

— Heb je het zelf gedaan?
— Nee.
— Waarom?
— Het is moeilijk. Iemand hielp me... *noemt eerlijk een student-uitblinker uit de groep*
— Ben je erachter gekomen?
— Sergey Nikolajevitsj, eerlijk — ik begrijp er echt niets van, ik heb zelf opmerkingen geschreven naast elke regel — dit is gewoon niet mijn ding, ik zal trekkerchauffeur worden
— Wat is dit?
— *leest de opmerking naast de regel*.
— …
— …
— Wat is het verschil tussen Belarus MTZ en Don 500 en K700?
— ??!.. De eerste is een wieltractor van Wit-Russische fabricage, vaak gebruikt voor lichte en middelgrote soorten landbouwproductie. Hij heeft ook kleine wielen aan de voorkant en grote wielen aan de achterkant. Don 500 is voornamelijk een oogstmachine, en K-700 'Kirovets' is een Sovjet wieltractor van algemeen gebruik met een verhoogde terreinvaardigheid, trekkracht klasse 5.
— Begrepen. Goed (!!!).
— Dank je, Sergey Nikolajevitsj!!!

In mijn thuisland over een tractor praten is bijna hetzelfde als hier over SOLID.

Genie
Ik had een Genie in mijn groep. Een student die vanaf de eerste les sterk te laat kwam en niet samen met iedereen de puzzel verzamelde. Toen vroeg ik hem om te doen wat ik voor iedereen had gepland voor de volgende les — schrijf op een blad wat hij leuk vindt, wat hem interesseert. Na afloop had de 'Genie' 2-3 regels: iets als 'ik begrijp de zinloosheid van het bestaan'…

… Oh God, ik heb in mijn groep in één persoon tegelijk de tweede Laozi en Kojima…
De basis van elke programmering is… puzzels

Tot mijn verbazing beantwoorde hij in de eerste twee lessen inderdaad schitterend vragen over termen, maar het effect duurde niet lang. De 'Genie' stopte met het bezoeken van lessen en kwam de volgende keer alleen om de eerste laboratoriumwerk te overhandigen, die hij succesvol niet heeft ingediend om objectieve redenen. Daarna stapelden vanwege afwezigheden zijn schulden zich vanzelf op, die, zoals hij dacht, ik hem gewoon moest laten tellen, zo gezegd, 'broederlijk'.
Het niet bezoeken van lessen + een opgeblazen ego strookte niet met de vastgestelde principes voor het bijwonen van mijn lessen. Voor de 'Genie' was er maar één keuze: zich rehabiliteren (de verwachte weg) of de lessen negeren en hopen op een 'vijfje' van de decaan om van de luiaard af te komen.
Nou, dit is toch de 'Genie'… hier moet men 'geniaal' handelen. Deze jonge man vond niets beters dan in een algemene chat op VK (waar ik en alle studenten van deze groep waren) een woedende tirade met scheldwoorden en beledigingen naar mij te schrijven.

Tja… Teleurstelling.
Wat me het meest verraste, was dat hij, voordat het proces van de strafmaatregelen van de collegeleiding was afgerond, besloot om zich bij mij te verontschuldigen. Waarvoor? — dat is me oprecht onduidelijk. Op dat moment was ik al lang onafhankelijk van kritiek, vooral van zo'n openlijk domme. Mijn persoon was niet geraakt, maar processen — dat zijn processen, als docent kon ik hier niet omheen. Blijkbaar had hij in de tijd dat hij studeerde zoveel klachten verzameld dat deze zaak de laatste was. Hij is van de opleiding uitgesloten. Van de laatste jaar van het mbo.
Misschien observeert hij me al geruime tijd door de richtkijker van een sluipschuttergeweer, maar eerlijk gezegd, het kan me niet schelen.
Ach, geniaalheid, je bent harteloos...

Epilog
Persoonlijk was mijn ervaring als docent een van de meest leerzame. Het hielp me fundamenten in programmeren te verankeren na mijn studie aan de universiteit. Ik voelde me zeker in het gekozen vakgebied (van de beschikbare specialisaties). Bijzonder belangrijk is dat de 'meest onhandelbare groep' respect en vriendelijkheid voor mij kreeg — dat is veel waard. Ik slaagde erin om toegang te krijgen tot hun innerlijke vernieuwers, probeerde de werkelijkheid over te brengen in plaats van deze sjablonen. Jammer dat we niet bij de 'puzzels' in het coderen zijn gekomen — waarbij iedereen een deel van de code zou moeten maken en, door alles samen te voegen, we een groot werkend programma zouden krijgen...
Ik hoop dat ieder van hen dit ooit zal voelen… maar voor nu zijn hieronder screenshots verzameld met feedback van enkele studenten twee jaar later.

De basis van elke programmering is… puzzels

Het is nog te vroeg om conclusies te trekken over het succes van de carrière van een programmeur van iemand van hen, want nu is een groot deel van deze groep bezig met hbo. De tijd zal het leren.

Ik hoop dat het artikel nuttig was. Bedankt voor uw aandacht!
Creatieve successen en een positieve stemming, collega's!

Bron: habr.com

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