Podstawą każdego programowania są… puzzle

Witajcie, mieszkańcy Habr!

W tym artykule chciałbym podzielić się moim doświadczeniem pracy jako nauczyciel programowania w C++ w kolegium technicznym. Było to wyjątkowe doświadczenie w moim życiu, które nauczyło mnie wiele. Kiedy padają pytania o interesujące fakty z przeszłości — ten fragment życia przychodzi mi na myśl jako jeden z pierwszych.
Jedziemy.

Najpierw trochę o sobie.
W 2016 roku ukończyłem uczelnię z wyróżnieniem na kierunku „Bezpieczeństwo informacji systemów zautomatyzowanych”. W trakcie nauki wielokrotnie miałem okazję zrealizować swój potencjał w pisaniu artykułów naukowych, uczestniczeniu w konkursach i projektach. W 2015 roku udało mi się wygrać ogólnopolski konkurs młodych naukowców „UMNIK”. W 2016 roku, zanim ukończyłem studia, już pracowałem w dużej organizacji miejskiej na stanowisku „Specjalista ds. bezpieczeństwa informacji, kryptografii i szyfrowania”.
Krótko mówiąc, tak to mniej więcej wygląda. Można założyć, że miałem jakieś pojęcie o programowaniu.

I oto rok 2017. Studia doktoranckie. Poproszono mnie, abym przez semestr uczył C++ w kolegium, w zamian oferując mi dobre bonusy w postaci ulgi dla doktorantów i nic więcej.

Szczerze mówiąc, byłem szczerze zainteresowany, by spróbować swoich sił w tej roli.

Pierwsza lekcja
Wrzesień. Pierwszy tydzień zajęć. Przyszli do mnie studenci. „Najbardziej niegrzeczna grupa” — tak ich nazywano.
23 osoby. „Programiści”.

Zgodnie z zasadami, na początku się przedstawiłem. Cicho opowiedziałem im o sobie…
A potem zaczęło się coś strasznego. Na pytanie „Co potraficie?” studenci (od teraz będziemy ich tak nazywać) odpowiedzieli, że potrafią nieco więcej niż kompletnie nic (to znaczy, że niektórzy z nich wiedzieli, jak wygląda MS VS i mogli stworzyć projekt „Hello world”)… Programiści. Ostatni rok studiów…

Następnie szczegółowo, „w barwach”, wyjaśnili, że niczego ich nie nauczyli i że w ogóle rozczarowali się programowaniem…

Prawie wszystkie dni do następnych zajęć spędziłem w ten sposób:
Podstawą każdego programowania są… puzzle

… ale dzień przed nimi wpadłem na pomysł, aby spróbować zmienić sytuację w umysłach i świadomości tej młodzieży. I wtedy „Ostap zaczął działać”.

Wprowadzenie do programowania
Na następne zajęcia przyniosłem… puzzle.
Tak, tak. Puzzle. „Jak oswoić smoka“. Zasady były proste. Grupa została podzielona na 3 zespoły. Każdy zespół układał swoją część. Jedni zajmowali się lasem, inni ziemią, a trzeci smokiem na środku obrazka. Dopóki wszyscy układali puzzle, opowiadałem, że układanie puzzli to także programowanie, że programiści często korzystają z cudzych kodów, że w każdym projekcie jest kilka różnych zespołów, funkcji, modułów…
Stopniowo do procesu dołączyli nawet najwolniejsi studenci.
Kiedy skończyłem wprowadzać ideę programowania w koncepcje biznesowe, procesy i… puzzle, nadszedł czas na ustalenie zasad nauki.
Na każde zajęcia każdy student musiał wypisać w zeszycie 10 terminów z IT. Jakichkolwiek. Każdy miał swoje. Chodziło o to, że brałem zeszyt jednego studenta, znajdowałem wśród wszystkich terminów maksymalnie praktyczne i pytałem o nie innego studenta. Kiedy inny student mówi „Nie zapisałem tego terminu”, nie było to karane (ze względu na zdrowy rozsądek), ale ten student musiał wypisać „brakujące” terminy (jak wszyscy, którzy ich nie mieli) i znaleźć ich znaczenia do następnych zajęć.

Tak właśnie zrobiliśmy. Każde zajęcia zaczynały się energetycznym losowaniem dwóch-trzech studentów. Chłopaki mieli przyjemność z tego procesu.

Tematy zajęć
Rozpoczynając naukę, bardzo ważne jest, aby zapewnić uczącym się dobrą literaturę. Moim zdaniem idealnym podręcznikiem była książka:
Podstawą każdego programowania są… puzzle

Zdarzyło mi się nieco podstępnie przeczytać ją w objęciach Microsoft Visual Studio. Wtedy udało się zrozumieć programowanie praktycznie od zera. Idealna opcja.

Wchodzisz skromnie do studentów i mówisz: „Aby stać się programistami, musicie po prostu przeczytać i spróbować wszystkiego, co znajduje się w tej książce”, a potem rzucasz książkę na stół. Najważniejsze, żeby nie pomylić książek w swoim plecaku…

Przed każdym tematem musiałem oczywiście solidnie się przygotować. Czytałem tego samego Lafore'a i jeszcze kilka interesujących źródeł z sieci.
Musiałem wyjaśniać niemalże od podstaw. Przy czym rozumienie, gdzie studenci mają braki w podstawowej wiedzy, powinno było być dedukcyjne.
Tablice -> Praca z pamięcią (konstruktorzy) -> Odnośniki -> Jak działa pamięć -> Nośniki -> Czym jest fizyczny nośnik -> Binarne przedstawienie danych…
Podstawą każdego programowania są… puzzle

Bardzo wymagający test wiedzy o fundamentalnych faktach dotyczących programowania. Już nie jestem programistą, jestem historykiem!

Tak więc prowadzimy historyczne batalie kilka par z rzędu. Pewnego dnia do naszego biura wchodzi sekretarz z katedry i, widząc grupę, otwiera szeroko oczy, przygląda się i zamyka drzwi. Jak mnie później poinformowano, była w szoku, że TA grupa siedziała tak cicho i tak uważnie mnie słuchała… Cześć, luz.

Prace laboratoryjne
Pierwsze zastosowane informacje — pierwsze „laby”. W ciągu semestru grupa złożyła 10 prac laboratoryjnych. W pierwszych wykonywali najprostsze konsolowe a+b, a w ostatnich pisali, choć konsolowe, ale dość interesujące aplikacje, takie jak obliczanie wartości całki z dowolnej zadanej funkcji jedną z trzech metod — mniej więcej takie same zadania były na końcowej ocenie — pracy semestralnej.

Tylko podejście do przyjęcia nie było zwyczajne. Cały czas w instytucie spotykałem się z tym, że bycie mądrym i umiejętność składania raportów — to nie to samo. To mnie w ogóle nie satysfakcjonowało.

— Chłopaki, pomyślałem. Stwórzmy „pojęciowe” relacje. Jeśli ktoś z was uważa, że programowanie mu się nie przyda — drzwi tam, z boku. Uczę was za darmo. Chcę widzieć tutaj tylko ciekawskich, zaangażowanych i pełnych pasji entuzjastów. Wszystkich innych proszę o nie marnowanie wspólnego czasu — powiedziałem w pierwszy dzień przyjmowania prac laboratoryjnych. Po tym 5 osób natychmiast przestało przychodzić na zajęcia. To było logiczne i przewidywalne. Z pozostałymi można było próbować zrobić coś sensownego.

— … nie interesuje mnie, jak ktoś inny zrobił pracę, byle tylko złożyć. Możecie nie być programistami, ale w moich zajęciach musicie być.

Wyglądało to następująco:

case prymus

Siada do mnie student, by złożyć pracę.
— Sam zrobiłeś?
— Tak.
— Co to jest?
— *odpowiada poprawnie*.
*Pytam jeszcze o parę rzeczy. Odpowiada poprawnie*
— przyjęto. Doskonale.

case gadatliwy

— Sam zrobiłeś?
— Tak.
— Co to jest?
— *odpowiada NIEpoprawnie / nie odpowiada*.
*Pytam jeszcze o parę rzeczy. Ten sam wynik*
— NIE przyjęto. NIEDOSTATECZNY. Czekam na poprawkę.

case dobry uczeń

— Sam zrobiłeś?
— Tak.
— Co to jest?
— *odpowiada poprawnie, ale niepewnie, waha się*.
*Pytam jeszcze o parę rzeczy. Ten sam wynik*
— przyjęto. Dobrze.

case stworzony na 3

— Sam zrobiłeś?
— Nie.
— Dlaczego?
— Trudno. Pomagał mi… *szczerze wymienia ucznia-prymusa z grupy*
— Zrozumiałeś?
— Tak, prawie wszystko zrozumiałem.

— Co to jest?
— *odpowiada poprawnie*.
*Jeszcze pytam o kilka zagadnień. Odpowiada mniej więcej poprawnie, czasami całkowicie nietrafnie, nawet jeśli 50 na 50 są poprawne i błędne*
— przyjęto. Dobrze.

Nie ma sensu opisywać wszystkich pozostałych przypadków. Tak, „dobrze” może być niezadowolony, że „trujka” dostaje taką samą ocenę, zdobywając ją uczciwie. Wtedy wszystko zależy od nastroju. Albo proszę „dobrego studenta”, żeby zobaczył na podłogę, bo „teraz podzielę się odrobiną mądrości”, a potem wyjaśnię sedno podejścia, opiszę, co w życiu ma większą wartość i wyjaśnię, że „trójkarzowi” było dużo trudniej zaliczyć niż jemu, „dobremu uczniowi”, itd...
… lub, tak jak kiedyś, narysuję małą „szóstkę” w rubryce dziennika naprzeciw tego niezadowolonego i następnym razem osobiście dla niego uzupełnię pracę laboratoryjną. Tak po prostu. Żeby nie „przygasić” kolegów.

Podstawą każdego programowania są… puzzle

Oceny
Proces edukacyjny, jak i cały świat, dosłownie tonie w cenach i ocenach.
Studenci — też ludzie, jednak „ramy”, moim zdaniem, należało „nagiąć” i w tym przypadku.
W ciągu semestru wszystkim zadano dodatkowe zadanie. Zarejestrować się na github.com, załadować pusty projekt w C++, zrobić 2 aktualizacje, skomentować je i wypuścić. Za te działania przyznano 15 punktów. Tak, tak, nie 4, nie 5, a 15. Troje się zrozumiało. Typologicznie studentowi było to jakoś jasne, jednak potem był inny przypadek.
Pewnego razu nasza para została przeniesiona tak, że stała się ostatnia, a jeszcze przez okno. Jednak przyszło na nią 15 osób. Nie chciało mi się tłumaczyć nowego tematu na cześć takiego heroizmu, ponieważ czytaliśmy już wystarczająco dobrze do przodu + następny temat nie był zbyt prosty dla zmęczonych mózgów (moich i uczniów). Wtedy postanowiłem porozmawiać o filozofii.

— Ogłaszam atrakcję niewidzianej szczodrości. Wszyscy pytają mnie, jaką ocenę mu wystawić za dzisiejsze zajęcia.
Wszyscy chcieli po „piątce”.
— Oczywiście, już jest, — powiedziałem. Wszyscy się ucieszyli.
Cisza.
— A dlaczego nikt nie chciał 7-ki lub 10-ki?
Wszyscy wlepili oczy i zaczęli głupio się uśmiechać.
— A czy pan naprawdę to wystawi? W dzienniku?! — usłyszał głos z tylnej ławki.
— Tak łatwo! — powiedziałem, — ogłaszam blitz z terminów, kto odpowie na 10 moich pytań — wystawiam 20-tkę w dzienniku, bez podstępu, kto nie odpowie — temu -10 (minus dziesięć).

„Zespół ożywił się, zaczęła się polemika”, wszyscy mieli uczciwie zarobione oceny. Dwóch się zgłosiło. Z drobnymi niedokładnościami odpowiadali na 10 pytań dotyczących stosu, kolejki, konstruktora, destruktora, zbieracza śmieci, enkapsulacji, polimorfizmu, funkcji haszujących…
Każdemu w zeszycie narysowano dwudziestkę… ale znaczenie zeszytu i ocen spadło w oczach wszystkich. Teraz żałuję, że nie zapytałem, czy nie chcą „podzielić się” swoją oceną z kimś. Wydaje mi się, że by się podzielili… Od teraz każdy zdawał „laboratorium” wiedzą i uczciwością.

Od tego momentu pojawił się jeszcze jeden typ zdawania laboratorium:


przypadek uczciwyNieJegoAleOnPróbował

— Sam zrobiłeś?
— Nie.
— Dlaczego?
— Trudno. Pomagał mi… *szczerze wymienia ucznia-prymusa z grupy*
— Zrozumiałeś?
— Sergej Nikolić, szczerze — nic nie rozumiem, sam napisałem komentarze przy każdej linijce — to nie dla mnie, będę traktorem.
— Co to jest?
— *czyta komentarz przy linijce*.
— …
— …
— Czym różni się Białorus MTZ od Don 500 i od K700?
— ??!.. Pierwszy — ciągnik kołowy produkcji Mińska, często używany w lekkich i średnich typach produkcji rolniczej. Ma jeszcze małe koła z przodu, a z tyłu — duże. Don 500 — to głównie kombajn do zbioru, a K-700 „Kiroviec” — radziecki kołowy ciągnik ogólnospożywczy o zwiększonej przejezdności, klasa ciągnikowa 5.
— przyjęte. Dobrze (!!!).
— Dziękuję, Sergej Nikolić!!!

W mojej ojczyźnie rozmawiać o traktorze — to prawie jak tu o SOLID.

Geniusz
Miałem w grupie geniusza. Student, który spóźnił się na pierwsze zajęcia i nie usiadł razem ze wszystkimi, aby złożyć ten puzzle. Wtedy poprosiłem go, aby zrobił to, co wszyscy planowali na następne zajęcia — napisał na kartce o sobie, czym się interesuje, co go interesuje. Na koniec u „Geniusza” było 2-3 linijki: coś w stylu „poznaję marność istnienia”…

… O, Boże, w mojej grupie w jednej osobie jednocześnie drugi Laozi i Kojima…
Podstawą każdego programowania są… puzzle

Ku mojemu zdziwieniu na pierwszych dwóch zajęciach naprawdę błyskawicznie odpowiadał na pytania dotyczące terminów, jednak efekt nie trwał długo. „Geniusz” przestał uczęszczać na zajęcia i przybył tylko na zaliczenie pierwszej pracy laboratoryjnej, którą pomyślnie nie zdał z obiektywnych powodów. Potem z powodu nieobecności narosły mu długi, które, jak uważał, byłem zobowiązany mu zaliczyć, tak powiem, „po bratersku”.
Nieobecność na zajęciach + nadmierne ego nie zgadzało się z ustalonymi zasadami uczestnictwa w moich zajęciach. «Geniusz» miał tylko 2 wyjścia z tej sytuacji — zrehabilitować się (oczekiwany sposób) lub zrezygnować z zajęć i liczyć na «trójkę» wystawioną przez dziekanat, aby pozbyć się leniucha.
No cóż, to jest «Geniusz»… tu trzeba działać «genialnie». Ten młody człowiek nie znalazł nic lepszego, jak napisać w ogólnym dialogu na VK (gdzie byłem ja i wszyscy studenci tej grupy) oburzającą tyradę z przekleństwami i wyzwiskami w moim kierunku.

Hmm… Rozczarowanie.
Najbardziej zaskoczyło mnie to, że przed zakończeniem procesu karnej operacji ze strony zarządu uczelni, postanowił się przede mną przeprosić. Za co? — szczerze mówiąc, nie rozumiem. W tym momencie byłem już dawno niezależny od krytyki, szczególnie takiej, powiedzmy, absurdalnej. Moja osobowość nie była zraniona, a procesy — to procesy, jako nauczyciel nie mogłem nie zgłosić tego. Jak się okazało, przez czas studiów uzbierało się tyle skarg, że ten przypadek okazał się ostatnim. Został wydalony. Z ostatniego roku technikum.
Może już od dawna obserwuje mnie w celowniku snajperskiej broni, ale szczerze mówiąc, nie obchodzi mnie to.
Ech, genialności, bezsercowa jesteś…

Epilog
Osobiście doświadczenie nauczycielskie było dla mnie jednym z najbardziej pouczających. Pomogło mi to umocnić podstawowe wiedzę programistyczną po studiach na uczelni. Czułem pewność w wybranym zawodzie (zakres dostępnych specjalności). Szczególne znaczenie ma to, że «najbardziej nieposłuszna grupa» okazała mi szacunek i przyjaźń — to znaczy wiele. Udało mi się znaleźć drogę do ich wewnętrznych innowatorów, starałem się wpoić rzeczywistość, a nie te szablonowe priorytety. Szkoda, że nie dotarliśmy do «układanek» w kodowaniu — kiedy każdy miałby zrobić część kodu, a łącząc wszystkie części w jedną, otrzymalibyśmy dużą działającą aplikację…
Mam nadzieję, że kiedyś każdy z nich to poczuje… a na razie poniżej zebrano zrzuty ekranu z opiniami kilku studentów po 2 latach.

Podstawą każdego programowania są… puzzle

Wyciąganie wniosków o sukcesie kariery programisty u kogokolwiek z nich jest na razie przedwczesne, gdyż obecnie większa część tej grupy studiuje na uczelni. Czas pokaże.

Mam nadzieję, że artykuł był przydatny. Dziękuję za uwagę!
Życzę twórczych sukcesów i pozytywnego nastawienia, koledzy!

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster