window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster już istnieje') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() SZYNY DYDAKTYCZNE - The Codest
The Codest
  • O nas
  • Nasze Usługi
    • Software Development
      • Frontend Development
      • Backend Development
    • Zespoły IT
      • Programiści frontendowi
      • Backend Dev
      • Inżynierowie danych
      • Inżynierowie rozwiązań chmurowych
      • Inżynierowie QA
      • Inne
    • Konsultacje IT
      • Audyt i doradztwo
  • Branże
    • Fintech i bankowość
    • E-commerce
    • Adtech
    • Healthtech
    • Produkcja
    • Logistyka
    • Motoryzacja
    • IOT
  • Wartość dla
    • CEO
    • CTO
    • Delivery Managera
  • Nasz zespół
  • Case Studies
  • Nasze Know How
    • Blog
    • Meetups
    • Webinary
    • Raporty
Kariera Skontaktuj się z nami
  • O nas
  • Nasze Usługi
    • Software Development
      • Frontend Development
      • Backend Development
    • Zespoły IT
      • Programiści frontendowi
      • Backend Dev
      • Inżynierowie danych
      • Inżynierowie rozwiązań chmurowych
      • Inżynierowie QA
      • Inne
    • Konsultacje IT
      • Audyt i doradztwo
  • Wartość dla
    • CEO
    • CTO
    • Delivery Managera
  • Nasz zespół
  • Case Studies
  • Nasze Know How
    • Blog
    • Meetups
    • Webinary
    • Raporty
Kariera Skontaktuj się z nami
Strzałka w tył WSTECZ
2018-11-05
Software Development

SZYNY SZKOLENIOWE

Michał Begejowicz

Najpierw kilka słów o samym kursie. Przed jego rozpoczęciem nasi studenci otrzymali zadanie "prework", które zawierało instrukcje i ćwiczenia do wykonania przed rozpoczęciem kursu. Ich zadania obejmowały instalację Linuksa, zapoznanie się z terminalem i podstawami HTML, CSS i Git.

Obliczenia

Przez następne cztery miesiące spotykaliśmy się co dwa tygodnie i krok po kroku odkrywaliśmy The Awesome World of Ruby et al. Kurs obejmował język Ruby, Ruby on Rails, Javascript oraz kilka popularnych narzędzi do aplikacji RoR, takich jak Devise, Pundit, Sidekiq czy Carriewave.

Każdy student miał również mentora, który był odpowiedzialny za motywowanie studentów i sprawdzanie ich pracy pomiędzy spotkaniami.

Plan ataku

Jako nauczyciel przyszedłem przygotowany z 3-letnim doświadczeniem z Ruby on Rails, 10-letnim doświadczeniem z programowaniem w ogóle i kilkoma prezentacjami z zagadnieniami i ćwiczeniami do wykonania.

Poza krótkim kursem zarządzania Linuksem, który odbyłem wcześniej, nie miałem żadnego doświadczenia w nauczaniu. Jeśli chodzi o studentów, wiedziałem tylko, że będzie ich dziesięciu i że pochodzą z bardzo różnych środowisk - dla niektórych z nich jest to pierwszy kontakt z programowaniem, podczas gdy inni próbowali nauczyć się C lub Ruby na własną rękę przed zapisaniem się na kurs.

Postanowiłem zrobić dwa postanowienia - będę cierpliwy i wyjaśnię wszystko, jeśli zajdzie taka potrzeba (żadnego "już to omówiliśmy"). Pierwsze postanowienie przetrwało próbę czasu, ale drugie - oczywiście - nie. Postanowiłem, że nie będę się specjalnie przygotowywał do tego, czego będę uczył - pracuję z Ruby/Rails na co dzień i czuję się dość pewny swoich umiejętności w tym zakresie. Co najwyżej przeczytałem prezentacje, które miałem.

Dwie osoby przed laptopami

Wyzwanie

Jedną z pierwszych rzeczy, która stała się dla mnie absolutnie jasna tuż po rozpoczęciu kursu - nie można wyjaśnić wszystkiego. To bardzo smutna świadomość dla kogoś takiego jak ja, kto lubi zagłębiać się i odkrywać, jak rzeczy działają, ale w ograniczonym czasie jednego spotkania można nauczyć tylko tyle, co może zostać zapamiętane przez uczniów. Okazuje się, że można być bardzo przyzwoitym programistą Ruby, nie wiedząc dokładnie, w jaki sposób tablice są reprezentowane w pamięci lub jak dokładnie działa Devise.

Lekcje odbywały się w soboty i niedziele w godzinach 9-17. Ważne jest, aby zdać sobie sprawę, że nauczanie jest dość wyczerpującą pracą - oprócz wyjaśniania materiału, musisz być zawsze gotowy, aby odpowiedzieć na powiązane (lub nie tak powiązane) pytania i rozwiązać różne problemy, które mają twoi uczniowie.

Kawa jest twoim przyjacielem, ale najważniejsza jest wspomniana wcześniej cierpliwość. Dla osób, które nie miały wcześniej do czynienia z kodowaniem, pojęcia oczywiste dla programistów - takie jak pętle, typy czy nawet zmienne - wymagają nauki i nie jest to proces błyskawiczny. Jeśli programujesz od XX lat, uważasz matematykę za łatwą, potrafisz wymienić wszystkie znane paradygmaty programowania w środku nocy, może być trudno postawić się w sytuacji osoby, która nie jest pewna, po której stronie znaku równości znajduje się nazwa zmiennej. Jest to jednak bardzo ważne. Podstawowe koncepcje, takie jak zmienne, pętle czy tablice, stają się tak naturalne, że trudno zrozumieć, jak ktoś może ich nie rozumieć od razu, ale są trudniejsze, niż się wydaje "nam, programistom".

Dodatkową trudnością, szczególnie na początku kursu, było wyjaśnienie tych pojęć tak, aby były dobrze zrozumiałe. Moim zdaniem nie da się nauczyć Railsów bez nauki Rubiego - choć wiem, że niektórzy twierdzą, że tak nie jest. To prawda, że Railsy mają swoje własne wzorce i wiele rzeczy można zapamiętać, a nie nauczyć się ich na początku. Uważam jednak, że aby zostać świadomym programistą RoR, umiarkowane zrozumienie Rubiego, OOP lub SQL jest koniecznością. Uczenie ludzi programowania jest czymś zupełnie innym niż uczenie Railsów - podczas gdy w przypadku Railsów można oczekiwać, że wiele zostanie po prostu zaakceptowanych lub uwierzonych (nikt nie musi wiedzieć, jak działają callbacki na początku - tylko co mogą zrobić), koncepcje programistyczne powinny być wyjaśnione bardziej szczegółowo.

Angażowanie Mocy

Jak więc to zrobić?

Cierpliwie.

Prawdopodobnie wydaje się, że cały czas się powtarzam, ale nie mogę wystarczająco podkreślić, jak ważna jest cierpliwość. Nawet moi najbardziej zmotywowani uczniowie popełniali tu i ówdzie błędy składniowe - jest to część normalnego procesu uczenia się i nauczyciel nie może zrobić nic poza pokazaniem, na czym polega błąd i jak go naprawić. Z czasem nauczą się naprawiać je samodzielnie, ale zajmie to znacznie więcej czasu niż jeden lub dwa błędy.

Kolejną rzeczą, na którą należy zwrócić uwagę, jest to, że Ruby nie jest tak łatwy, jak się wydaje. Jeśli zacząłeś uczyć się Rubiego ze znajomością C/Javy/Python, wszystko prawdopodobnie wydaje się takie czyste, ładne i proste. Spróbuj jednak o tym pomyśleć, a zauważysz:

  1. O co chodzi z nawiasami? Czy powinienem ich używać? Czy nie powinienem?
  2. Co to jest jaźń rzecz? Czasami muszę go użyć (np. attr_writer – self.variable = ...), czasami nie (attr_reader – zmienny) i czasami nie mogę! (private def some_method – self.some_method wyrzuci błąd)
  3. Bloki. Założę się, że nawet niektórzy doświadczeni programiści (różnych języków) potrzebowaliby chwili więcej niż oczekiwano, aby zrozumieć #inject

Oprócz prostego naprawiania błędów, istnieje kwestia faktycznego przekazywania uczniom swojego zrozumienia rzeczy. Aby to zrobić, będziesz potrzebował dużej elastyczności. Niektórzy uczniowie byli zadowoleni z tego, że Array jest po prostu uporządkowaną listą elementów. Inni potrzebowali bardziej wizualnej analogii, jak półka z ponumerowanymi miejscami, na których można umieszczać rzeczy. Okazało się, że wyjaśniam te same rzeczy wiele razy na różne sposoby - co jest dość wymagającym ćwiczeniem!

Ale, jak powiedziałem wcześniej, nie można wyjaśnić wszystkiego. Kiedy wyjaśniałem relacje w Railsach, było to raczej "tak to się robi i pozwala to robić to i tamto. Chcesz tego, to super". Na szczęście nikt nie zapytał mnie, jak to działa - nie sądzę, by młodsi programiści musieli wiedzieć o odbiciach.

Pozycjonowanie sytuacyjne

Ze względu na format naszego kursu (spotkania w co drugi weekend i długie przerwy) musieliśmy upewnić się, że okresy między tymi weekendami są produktywne dla naszych studentów - bez ich ćwiczeń w tym czasie kurs w ogóle by nie działał.

Niektórzy z moich współpracowników zgodzili się zostać mentorami dla uczestników kursu. Praca mentorów polegała na weryfikowaniu ćwiczeń, które zostały przydzielone podczas weekendowych spotkań i pomaganiu w rozwiązywaniu problemów, które pojawiały się podczas ich wykonywania. Studenci komunikowali się z mentorami za pośrednictwem Slacka.

Byłem mentorem dla dwóch moich studentów. Była to znacznie inna forma nauczania - i pełna własnych pułapek. Jedną z rzeczy, z których zdałem sobie sprawę nieco za późno, jest to, że dobry programista musi być niezależny - powinien przynajmniej próbować rozwiązywać problemy samodzielnie, zanim poprosi o pomoc. A bycie dostępnym na Slacku przez cały czas nie tylko zabierało mi mnóstwo czasu, ale też nie inspirowało do takiej niezależności.

Nie zrozum mnie źle - wiele pytań, które zadawano mi jako mentorowi, było ważnych, a odpowiadanie na nie poszerzało wiedzę uczniów. Bardzo łatwo jest jednak przejść do "trybu nauczyciela" - i ponownie wyjaśnić wszystkie kwestie z weekendowych spotkań. Z dzisiejszej perspektywy myślę, że rolą mentora jest przeglądanie, dostarczanie przydatnych linków i zadawanie pytań, które mogą pomóc w znalezieniu rozwiązania. Okazjonalne wyjaśnianie może się zdarzyć, ale nie powinno stanowić większości.

Wykorzystanie inteligencji

Każdy uczeń jest inny. Jedną z większych trudności było dostosowanie tempa kursu do potrzeb wszystkich studentów. Ze względu na różne pochodzenie i ogólny poziom łatwości w akceptowaniu nowych pomysłów między studentami jest to prawie niemożliwe.

Nasze ramy czasowe wynosiły 9 spotkań - razy 2 dni razy 8 godzin dało nam 144 godziny na przejście od 0 do Ruby-hero. Najważniejsze było zrobienie całego sylabusa w tym czasie - co samo w sobie wymusiło dość szybkie tempo. Pierwsze trzy spotkania dotyczyły Rubiego - potem jedno spotkanie dla SQL, potem RoR i jedno spotkanie dla JS pomiędzy.

Jako nauczyciel zawsze musiałem wiedzieć, kto mniej więcej rozumie część prezentowanego przeze mnie materiału. Czasami wystarczyło zapytać, czy to jest zrozumiałe, czasami robiłem małe testy. Na przykład, poprosiłem wszystkich moich uczniów o przesłanie mi ich własnych definicji pojęć Ruby, takich jak klasa, jaźń, metoda, zmienny itp. na Slacku. Jeśli jakaś kwestia była szczególnie niejasna, wracałem i próbowałem wyjaśnić ją ponownie.

Iluzja i rzeczywistość

Podsumowując, nauczanie było jeszcze trudniejszym przedsięwzięciem, niż myślałem. Może być również bardzo satysfakcjonujące. Niemniej jednak jest to ciężka praca, a jej efekty nie zależą wyłącznie od nauczyciela - wysiłek samego ucznia jest jeszcze ważniejszy w jego nauce. To sprawia, że nauczanie bardzo różni się od programowania, gdzie zazwyczaj można być właścicielem wszystkich sukcesów i porażek. Ważne jest, aby pamiętać o tej różnicy.

Zmusza również do myślenia o kwestiach, o których zwykle się nie myśli - wyjaśnianie rzeczy pozwala również lepiej je zrozumieć. W ten sposób nauczanie może również uczynić cię lepszym programistą.

Powiązane artykuły

Software Development

Tworzenie przyszłościowych aplikacji internetowych: spostrzeżenia zespołu ekspertów The Codest

Odkryj, w jaki sposób The Codest wyróżnia się w tworzeniu skalowalnych, interaktywnych aplikacji internetowych przy użyciu najnowocześniejszych technologii, zapewniając płynne doświadczenia użytkowników na wszystkich platformach. Dowiedz się, w jaki sposób nasza wiedza napędza transformację cyfrową i biznes...

THEECODEST
Software Development

10 najlepszych firm tworzących oprogramowanie na Łotwie

Dowiedz się więcej o najlepszych łotewskich firmach programistycznych i ich innowacyjnych rozwiązaniach w naszym najnowszym artykule. Odkryj, w jaki sposób ci liderzy technologiczni mogą pomóc w rozwoju Twojej firmy.

thecodest
Rozwiązania dla przedsiębiorstw i scaleupów

Podstawy tworzenia oprogramowania Java: Przewodnik po skutecznym outsourcingu

Zapoznaj się z tym niezbędnym przewodnikiem na temat skutecznego tworzenia oprogramowania Java outsourcing, aby zwiększyć wydajność, uzyskać dostęp do wiedzy specjalistycznej i osiągnąć sukces projektu z The Codest.

thecodest
Software Development

Kompletny przewodnik po outsourcingu w Polsce

Wzrost liczby outsourcing w Polsce jest napędzany przez postęp gospodarczy, edukacyjny i technologiczny, sprzyjający rozwojowi IT i przyjazny klimat dla biznesu.

TheCodest
Rozwiązania dla przedsiębiorstw i scaleupów

Kompletny przewodnik po narzędziach i technikach audytu IT

Audyty IT zapewniają bezpieczne, wydajne i zgodne z przepisami systemy. Dowiedz się więcej o ich znaczeniu, czytając cały artykuł.

The Codest
Jakub Jakubowicz CTO & Współzałożyciel

Subskrybuj naszą bazę wiedzy i bądź na bieżąco!

    O nas

    The Codest - Międzynarodowa firma programistyczna z centrami technologicznymi w Polsce.

    Wielka Brytania - siedziba główna

    • Office 303B, 182-184 High Street North E6 2JA
      Londyn, Anglia

    Polska - lokalne centra technologiczne

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Warszawa, Polska

      The Codest

    • Strona główna
    • O nas
    • Nasze Usługi
    • Case Studies
    • Nasze Know How
    • Kariera
    • Słownik

      Nasze Usługi

    • Konsultacje IT
    • Software Development
    • Backend Development
    • Frontend Development
    • Zespoły IT
    • Backend Dev
    • Inżynierowie rozwiązań chmurowych
    • Inżynierowie danych
    • Inne
    • Inżynierowie QA

      Raporty

    • Fakty i mity na temat współpracy z zewnętrznym partnerem programistycznym
    • Z USA do Europy: Dlaczego amerykańskie startupy decydują się na relokację do Europy?
    • Porównanie centrów rozwoju Tech Offshore: Tech Offshore Europa (Polska), ASEAN (Filipiny), Eurazja (Turcja)
    • Jakie są największe wyzwania CTO i CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Warunki korzystania z witryny

    Copyright © 2025 by The Codest. Wszelkie prawa zastrzeżone.

    pl_PLPolish
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek pl_PLPolish